1

Linux で実行可能ファイルからダンプされた情報を読み取るときに問題が発生します。情報は次のとおりです。

804a0ea:  04 08            add $0x8, %al
     ...
804a0f4:  a6               cmpsb %es:(%edi),%ds:(%esi)

2 つの質問があります。

  1. アドレス 804a0ea と 804a0f4 はどういう意味ですか? プロセスのアドレス空間の仮想アドレス?
  2. ... とはどういう意味ですか? アドレス 804a0f0 で命令を取得するにはどうすればよいですか?

前もって感謝します。

コードのこの部分に関する詳細情報:

Disassembly of section .got.plt:

    0804a0e8 <_GLOBAL_OFFSET_TABLE_>:
     804a0e8:       14 a0                   adc    $0xa0,%al
     804a0ea:       04 08                   add    $0x8,%al
            ...
     804a0f4:       a6                      cmpsb  %es:(%edi),%ds:(%esi)
     804a0f5:       87 04 08                xchg   %eax,(%eax,%ecx,1)
     804a0f8:       b6 87                   mov    $0x87,%dh
     804a0fa:       04 08                   add    $0x8,%al
     804a0fc:       c6 87 04 08 d6 87 04    movb   $0x4,-0x7829f7fc(%edi)
     804a103:       08 e6                   or     %ah,%dh
     804a105:       87 04 08                xchg   %eax,(%eax,%ecx,1)
     804a108:       f6 87 04 08 06 88 04    testb  $0x4,-0x77f9f7fc(%edi)
     804a10f:       08 16                   or     %dl,(%esi)
     804a111:       88 04 08                mov    %al,(%eax,%ecx,1)
     804a114:       26 88 04 08             mov    %al,%es:(%eax,%ecx,1)
     804a118:       36 88 04 08             mov    %al,%ss:(%eax,%ecx,1)
     804a11c:       46                      inc    %esi

誰かが私に手を差し伸べてくれることを願っています.:-)

4

2 に答える 2

2
  1. アセンブリ コードのみをテキスト エディターにコピーする
  2. 最初の行に main と入力します: (main() のアセンブリ)
  3. ファイルを *.s として保存します。
  4. ターミナルを開き、 gcc -s -o と入力してコンパイルするか、ターミナル gdb に入力してから、layout asm と入力してから print と入力します。
于 2011-05-14T09:56:54.873 に答える
1

グローバル オフセット テーブルはコードを指しているのではなく、データを指しています (実際には hrm... オフセット) 。したがって、逆アセンブルしようとしても、あまり意味のあるコードは得られません。(実際には、コード値 0804a014、... 080487a6 を見ることで、どのオフセットを見つけることができます)。

... は通常、ストリームに多数の 0 があることを意味します。

于 2010-03-31T18:51:27.733 に答える