3

私がこれまでにしたこと:

AphexのAfxCodeHook.pasユニットで見つけました。

また、それを使用して多数の興味深いサンプルコードをスキミングしました。

  • ライブラリの挿入(DLLを別のプロセスに挿入する方法)。
  • ライブラリExを挿入する(Exメソッドを使用してDLLを別のプロセスに挿入する方法)。
  • プロセスExの作成(Exメソッドを使用して作成されたプロセスにDLLを挿入する方法)。
  • 実行可能ファイルを挿入します(InjectLibraryExの真の力:EXEファイルを挿入する機能)。
  • 単純なApiフック(afxcodehookを使用してWindows APIへの呼び出しを操作する方法)。

私も読んだ:


質問:

私は、経験豊富なDelphiコーダーからのレイマンの用語の{$ IMAGEBASE$13140000}ディレクティブの情報に基づいた意見と簡単な説明を求めています。

4

1 に答える 1

3

これは、DLLの優先ベースアドレスを指定します。DLLをこのアドレスにロードできる場合、ローダーはロードします。それができない場合は、再配置する必要があり、DLL内のすべての絶対ジャンプを新しいアドレスに調整する必要があります。

ローダーがDLLをプロセスアドレス空間にマップしようとすると、最初に優先ベースアドレスを読み取ります。次に、DLLのサイズを計算します。最後に、ベースアドレスからベースアドレス+サイズに伸びる連続したメモリブロックが見つかるかどうかを確認します。その場合、DLLは優先ベースアドレスにロードされます。別のDLL、またはexeが優先ベースアドレスにある場合は、DLLを再配置する必要があります。アプリケーションが優先DLLロードアドレス空間とオーバーラップするヒープメモリを予約している場合は、DLLを再配置する必要があります。

DLLを再配置する必要がある場合、その物理ページをプロセス間で共有することはできません。WindowsシステムDLLは、衝突がなく、共有できるように、慎重にベースアドレスを選択しています。

現在、アドレス空間配置のランダム化(ASLR)は、問題をさらに複雑にします。

これらの記事から詳細を学ぶことができます:

于 2012-04-19T10:11:19.253 に答える