2016-10-25 3 views
0

私は「-g」コマンドを使用して、私のコードをコンパイルし、gdbの中で私がgdbにソースコードの対応する逆アセンブリを一緒に印刷させるには?

「L」はアセンブリコードを一覧表示するには、ソースコード

「disass」を一覧表示することができます。

は、しかし、私はそうで、窓には視覚的なスタジオで、リストのソースコードの1行を参照して、それに対応する逆アセンブル(複数の行)のソースコードの、その後、別のラインを一覧表示し、できるかのように表示したいです。

gdbはこれをサポートする必要があります、どのように指定する必要がありますか?

+0

gdbである必要がありますか?なぜ 'objdump -dS'や' gcc -S'? – a3f

+0

私は、Visual Studioで見ることができるような、各行のアセンブリコードを知っている間に、デバッグ中にソースコードをデバッグすることができます。ありがとう。 –

+0

コンパイラの出力が入力を連続的または線形的に一致させると仮定する理由はありません。最適化されていないコードに対してのみ、これは有用でもあります。そうでなければ、必ずしもサイド・バイ・サイドの関係が存在するとは考えられません。いくつかの単純な関数/プログラムは確かですが、一般的ではありません。 –

答えて

2

/mまたは/sのフラグをdisassembleに設定して、ソースとアセンブリを混在させることができます。通常私は前者があなたが望むものだと思います。だから、:

(gdb) disassemble/m main 
0

しかし、私は窓の視覚的なスタジオ、ソースコードの リスト1行に見ることができるもののように表示したい、それに対応する 解体(数行)をリスト

あなたはone of gdb TUI layoutsを使用できます。ここでlayout asm/usr/bin/lsのためのサンプルデバッグセッションは次のとおりです。

[[email protected] ~]$ gdb -q /usr/bin/ls 
Reading symbols from /usr/bin/ls...Reading symbols from /usr/lib/debug/usr/bin/ls.debug...done. 
done. 
(gdb) start 
Temporary breakpoint 1 at 0x39a0: file ../src/ls.c, line 1249. 
Starting program: /usr/bin/ls 
[Thread debugging using libthread_db enabled] 
Using host libthread_db library "/lib64/libthread_db.so.1". 

Temporary breakpoint 1, main (argc=1, argv=0x7fffffffdde8) at ../src/ls.c:1249 
1249 { 
Missing separate debuginfos, use: dnf debuginfo-install pcre-8.39-3.fc24.x86_64 
(gdb) layout asm 

ここでは、GDBでどのように見えるかです:

┌─────────────────────────────────────────────────────────────────┐ 
    >│0x5555555579a0 <main>   push %r15      │ 
    │0x5555555579a2 <main+2>   push %r14      │ 
    │0x5555555579a4 <main+4>   mov %edi,%r15d    │ 
    │0x5555555579a7 <main+7>   push %r13      │ 
    │0x5555555579a9 <main+9>   push %r12      │ 
    │0x5555555579ab <main+11>  mov %rsi,%r14     │ 
    │0x5555555579ae <main+14>  push %rbp      │ 
    │0x5555555579af <main+15>  push %rbx      │ 
    │0x5555555579b0 <main+16>  sub $0x3a8,%rsp    │ 
    │0x5555555579b7 <main+23>  mov (%rsi),%rdi    │ 
    │0x5555555579ba <main+26>  mov %fs:0x28,%rax    │ 
    │0x5555555579c3 <main+35>  mov %rax,0x398(%rsp)   │ 
    │0x5555555579cb <main+43>  xor %eax,%eax     │ 
    │0x5555555579cd <main+45>  callq 0x555555562ed0 <set_progra│ 
    │0x5555555579d2 <main+50>  lea 0x15e7c(%rip),%rsi  │ 
    │0x5555555579d9 <main+57>  mov $0x6,%edi     │ 
    │0x5555555579de <main+62>  callq 0x5555555578a8   │ 
    │0x5555555579e3 <main+67>  lea 0x1302d(%rip),%rsi  │ 
    │0x5555555579ea <main+74>  lea 0x1300c(%rip),%rdi  │ 
    │0x5555555579f1 <main+81>  callq 0x5555555576d8   │ 
    │0x5555555579f6 <main+86>  lea 0x13000(%rip),%rdi  │ 
    │0x5555555579fd <main+93>  callq 0x5555555576b8   │ 
    │0x555555557a02 <main+98>  lea 0x21b7cf(%rip),%rax  │ 
    │0x555555557a09 <main+105>  lea 0x7c60(%rip),%rdi  #│ 
    │0x555555557a10 <main+112>  movl $0x2,(%rax)    │ 
    │0x555555557a16 <main+118>  callq 0x555555569020 <atexit> │ 
    │0x555555557a1b <main+123>  movabs $0x8000000000000000,%rax │ 
    └─────────────────────────────────────────────────────────────────┘ 
Thread 0x7ffff7fd78 In: main     L1249 PC: 0x5555555579a0 
(gdb) 

layout asm以外の他のレイアウトがあります。おそらくあなたのニーズに合ったlayout splitも参照してください。

関連する問題