5

Windows 環境から来て、カーネル デバッグを行ったり、ユーザー モードでさえも、非常に詳細な方法で逆アセンブルされたコードを確認できます。次に例を示します。

80526db2 6824020000 プッシュ 224h
80526db7 6808a14d80 プッシュ オフセット nt!ObWatchHandles+0x8dc (804da108)
80526dbc e81f030100 call nt!_SEH_prolog (805370e0)
80526dc1 a140a05480 mov eax,dword ptr [nt!__security_cookie (8054a040)]

最初の数字は明らかにアドレスですが、2 番目の数字はオペコード バイトを表し、GDB には欠けているか、少なくとも同様の結果を得る方法がわかりません。

私は通常、次のようなことをします:

(gdb): /i $pc を表示

しかし、私が得るのは次のようなものだけです:

x/i $pc 0x21c4c: ポップ %eax

コードバイトが何であるかを確認できますが、これは時々私にとって少し問題になります。役立つディスプレイでできることはありますか?

編集: 問題の GDB は、Mac OS X 10.8.3 では 6.3.50 です。

4

2 に答える 2

7

disassemble /rあなたが探しているものをあなたに与えるべきだと思います:

(gdb) help disass
Disassemble a specified section of memory.
Default is the function surrounding the pc of the selected frame.
With a /m modifier, source lines are included (if available).
With a /r modifier, raw instructions in hex are included.
With a single argument, the function surrounding that address is dumped.
Two arguments (separated by a comma) are taken as a range of memory to dump,
  in the form of "start,end", or "start,+length".
(gdb) disass /r main
Dump of assembler code for function main:
   0x004004f8 <+0>:      55     push   %ebp
   0x004004f9 <+1>:      48     dec    %eax
   0x004004fa <+2>:      89 e5  mov    %esp,%ebp
   0x004004fc <+4>:      48     dec    %eax
   0x004004fd <+5>:      83 ec 10       sub    $0x10,%esp
   0x00400500 <+8>:      89 7d fc       mov    %edi,-0x4(%ebp)
   0x00400503 <+11>:     48     dec    %eax
   0x00400504 <+12>:     89 75 f0       mov    %esi,-0x10(%ebp)
   0x00400507 <+15>:     bf 0c 06 40 00 mov    $0x40060c,%edi
   0x0040050c <+20>:     b8 00 00 00 00 mov    $0x0,%eax
   0x00400511 <+25>:     e8 0a ff ff ff call   0x400420
   0x00400516 <+30>:     bf 00 00 00 00 mov    $0x0,%edi
   0x0040051b <+35>:     e8 10 ff ff ff call   0x400430
End of assembler dump.
(gdb) 

GDB 逆アセンブル コマンドのドキュメント

于 2013-10-22T17:07:48.917 に答える
3

lldb を使用する場合は、 -b オプションを使用して逆アセンブルし、同じ効果を得ることができます。

(lldb) disassemble -b -p
Sketch`main + 46 at SKTMain.m:17:
-> 0x10001aa0e:  48 89 c7              movq   %rax, %rdi
   0x10001aa11:  b0 00                 movb   $0, %al
   0x10001aa13:  e8 f2 48 00 00        callq  0x10001f30a               ; symbol stub for: NSLog
   0x10001aa18:  48 8d 35 99 fa 00 00  leaq   64153(%rip), %rsi         ; @Sketch`.str3
于 2013-11-13T23:31:24.597 に答える