2016-04-18 2 views
-1

私はndisasmでプログラムを逆アセンブルしています。私の質問は、呼び出しの指示とジャンプの後、メモリ参照はどういう意味ですか?NDISASM出力の命令パラメータとしてのメモリ参照の意味は何ですか?

命令に関連しているのか、それともプログラムの始めから数えていますか?彼らは、ndisasm出力テキストの最初の列のアドレスを参照していますか?

+0

相対的なジャンプについては、第1列を参照してください。絶対値の場合、命令にエンコードされた実際のアドレスが表示されます。 – Jester

答えて

0

これは、出力の最初の列に指定されたアドレスを指しています。これは通常、ファイルの先頭からの相対的な命令の位置です。プログラムはメモリ内のどこにコードがロードされるのかを知らないので、メモリ内のどこに実際にあるのかを伝えることはできません。

ダイレクトジャンプおよびコールに近い命令(条件付きJccジャンプ命令を含む)のデスティネーションアドレスは、これらのアドレスが命令に対してエンコードされているためにのみ該当します。他の命令のアドレスは相対エンコーディングを使用しないため、表示されるアドレスは最初の列のアドレスを参照しません。代わりに、実行時に使用される実際のアドレスです。プログラムがメモリにロードされたときに別の場所に再配置されないと仮定します。そのため、表示アドレスが実際ndisasmのみ一般的に意味するもので、これらの違いの

(64ビットRIP相対アドレッシングは、相対アドレス符号化を使用し、このアドレス指定モードを使用して、上記命令に対する例外である。)

ブートローダーやMS-DOS .COMファイルなどのフラットなバイナリファイルを逆アセンブルする場合にのみ有効です。このような場合は、プログラムがメモリにロードされる場所を(-oオプション付きで)知ることができるので、表示されるアドレスは一貫しており、プログラムがメモリにロードされた場所を反映します。

+0

助けてくれてありがとう! – Slagathor

関連する問題