質問

使用してコンパイルされたオブジェクトファイルがあります なので (アセンブラーコードから)。

使用してリンクする場合 Ld, 、私がしようとするとき stepi (また nexti)GDBは、アドレス0x0でのメモリアクセスについて不満を述べています。使用してリンクする場合 GCC, 、 すべてが順調。

私は問題が原因であると推測しています Ld, 、のリンク結果と比較すると、より少ないセクションを生成するセクションが少なくなります GCC.

GDBをより冗長にするように構成する方法はありますか。

(gdb) b main
Breakpoint 1 at 0x100000f8e
(gdb) r
Breakpoint 1, 0x0000000100000f8e in main ()
(gdb) x/10i $pc
0x100000f8e <main>: fbld   0x6c(%rip)        # 0x100001000 <data1>
0x100000f94 <main+6>: fimul  0x7a(%rip)        # 0x100001014 <data2>
0x100000f9a <main+12>: fbstp  0x60(%rip)        # 0x100001000 <data1>
0x100000fa0 <main+18>: mov0x0    $0x2000001,%rax
0x100000fa7 <main+25>: mov    $,%rdi
0x100000fae <main+32>: syscall 
(gdb) si
Cannot access memory at address 0x0
0x0000000100000f94 in main ()

PS:実行可能ファイル自体は、両方のバージョンで期待どおりに実行されます。

後で編集:コンパイルに使用したコマンド:

as -arch x86_64 src.s -o src.o
ld -e _main -arch x86_64 src.o -o src
gcc -o src src.o
役に立ちましたか?

解決

GDBには「ショーデバッグ」コマンドがあり、さまざまな内部デバッグ設定が提供されます。たとえば、「デバッグターゲットのセット1」は、GDBとターゲットプロセスとの相互作用のトレースをオンにします。あなたは彼らが持っているすべてのフラグを試してみたいと思うかもしれません(それほど多くはありません)。

他のヒント

GCCは実際にリンクを行いません。あなたに代わってLDに電話するだけです。提供しているオプションは、使用しているオプションとは異なる必要があります。

このスレッドごとに:

GCCリンカーコマンドを取得する方法は?

GCC -Vを実行することにより、LD Invocationのコマンドラインを確認できるはずです。これにより、LDコマンドラインを変更する方法がわかります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top