1

DelphiでRtlQueryProcessHeapInformationを呼び出す必要があります。RtlQueryProcessHeapInformationは、ntdll.dllからエクスポートされた関数です。この関数のプロトタイプはありません。「未宣言の識別子」エラーが発生します。

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

ご協力ありがとうございました。

4

1 に答える 1

6

Web検索を少し行うと、このページまたはこのページが表示され、関数が次のようになっていることがわかります。

NTSTATUS NTAPI RtlQueryProcessHeapInformation( 
    IN OUT PRTL_DEBUG_INFORMATION Buffer 
);

あなたはすでにあなたの前の質問NTSTATUSから何を知っていますか。は、それです。つまり、Delphiでの関数宣言は次のとおりです。NTAPI__stdcall

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

私がリンクしているページには、の宣言も含まれPRTL_DEBUG_INFORMATIONています。あなたがそれを自分で翻訳できると確信しています。これは実装のプライベートで文書化されていない関数であるため、パラメーターの意味をリバースエンジニアリングする必要があります。


これはあなたが尋ねた2番目の質問であり、ほとんど同じです。両方の質問で、質問をアセンブラー質問として提示します。しかし、そうではありません。どちらの質問でも、関数の宣言と、それを外部DLLからインポートする方法を理解する必要がありました。これから取り除くべきことは、別のDLLで関数を呼び出す必要がある場合、次の2つのいずれかを実行できるということです。

  1. external両方の質問で示したコードを使用して、暗黙的にインポートします。これはより単純なアプローチです。
  2. LoadLibraryおよびを使用しGetProcAddressて、明示的にインポートします。これはより面倒なアプローチです。

これを間違った方法でとらないでください。私は、このような問題を自分で解決するために知っておくべきことを示しているだけです。

于 2012-04-14T12:28:36.563 に答える