1

我需要在 Delphi 中调用 RtlQueryProcessHeapInformation。RtlQueryProcessHeapInformation 是从 ntdll.dll 导出的函数。我没有这个函数的原型。我收到“未声明的标识符”错误。

asm 
 ...
 xchg ebx, eax
 pop ebp
 call RtlQueryProcessHeapInformation
 dec ebp
 ...
end;

谢谢您的帮助。

4

1 回答 1

6

一些网络搜索导致这个页面这个表明该功能如下所示:

NTSTATUS NTAPI RtlQueryProcessHeapInformation( 
    IN OUT PRTL_DEBUG_INFORMATION Buffer 
);

NTSTATUS您已经从上一个问题中知道了什么。至于NTAPI,那是__stdcall。这意味着 Delphi 中的函数声明是:

function RtlQueryProcessHeapInformation(
    Buffer: PRTL_DEBUG_INFORMATION
): NTSTATUS; stdcall; external 'ntdll.dll';

我链接到的页面还包含一个声明,PRTL_DEBUG_INFORMATION我相信你可以自己翻译。您仍然需要对参数的含义进行逆向工程,因为这是一个实现私有的、未记录的函数。


这是您提出的第二个几乎相同的问题。在这两个问题中,您都将问题作为汇编程序问题提出。但事实并非如此。在这两个问题中,您都需要制定函数的声明,以及如何从外部 DLL 中导入它。你应该从中得到的是,当你需要调用另一个 DLL 中的函数时,你可以做以下两件事之一:

  1. external使用我在您的两个问题中显示的代码隐式导入它。这是更简单的方法。
  2. 使用LoadLibraryandGetProcAddress显式导入它。这是比较费力的方法。

请不要采取错误的方式——我只是想向您展示您需要知道什么才能自己解决这些问题。

于 2012-04-14T12:28:36.563 回答