1

ねえ、今日、NDIS.sys のバイナリ diff を実行しようとしましたが、奇妙なことに気付きました。私は関数を取り、それを比較し始めました。最初の 30 バイトは、ディスク (IDA を使用) とメモリ (WinDbg を使用) で同じでした。すると、何かが変わった。「 jmp_imp_XXXXX 」のようなものを見ました。JMP バイトは同じでしたが、アドレスが異なっていました。

私の質問は - 何が違いを生むのですか? 引っ越しの関係もあると思います。ジャンプは同じモジュール内でアドレス指定することですが、これは長いジャンプであるため、モジュールのベース アドレスに相対的になります。再配置が発生した場合、このアドレスも再配置する必要がありますが、同じモジュール上にあります。

私は正しいですか、それとも完全に間違っていますか? :-) ありがとう。

4

1 に答える 1

2

はい、モジュールがメモリ内の優先ベースアドレスにロードされていない場合、再配置中にジャンプターゲットが再書き込みされます。実際、開発者は、再配置コストを回避するために、モジュールにデフォルト以外のベース アドレスを提供することをお勧めしますが、多くの場合はそうしないため、一部のモジュールは常に再配置され、ローダーはジャンプ ターゲットを再書き込みする必要があります。

于 2010-10-21T21:54:07.713 に答える