2016-04-11 9 views
-2

特定のアドレスでアセンブリ命令を更新しようとしています。私は、例えば、命令はバイト単位でエンコードされていることを発見しアセンブリ命令の保存方法を調べる

0x088...  jmp  0x88465002 

(gdb) x /2b 0x088 
0x088... <main+20> 0xeb 0x15 

:そうするために、私は、アセンブリ命令は、具体的に以下の命令を見て、保存されているかを確認するために、C関数を分解しましたJMP0xEBとしてエンコードされます。しかし、なぜJMPの場所が0x15として格納されていますか?これは、0x15バイトをスタック(つまり0x15はオフセット)にジャンプさせるためですか?

+2

アセンブラ/インテルの参考マニュアルを入手した場合は、すべてクリアされます... "何も役に立たない場合は、マニュアルをお読みください。" –

+0

アセンブリ命令は、* machine *命令に対応する意味でのみ、プログラムイメージ内のアドレスを持つことに注意してください。また、マシン命令は2バイト以上(たとえオペランドを除外したとしても)にエンコードされることに注意してください。 –

+0

アセンブリ言語に関する書籍をお読みになり、参考マニュアルをお手元に用意してください。 – Olaf

答えて

3

0xEB Thanks--

は、x86上の短い相対ジャンプのオペコードです。短絡とは、8ビットの符号付き変位を意味します。そしてyes 0x15は、現在の命令カウンタ値(この命令のすぐ次の命令のアドレス)に対する相対的な変位で、0x15 = 21バイトです。

関連する問題