Ich habe eine Objektdatei kompiliert mit als (aus Assembler-Code).Details auf gdb Speicherzugriff Beschwerde
Wenn ich verknüpfen es mit ld, wenn ich stepi versuchen (oder WEITERi) GDB beschwert sich über Speicherzugriff auf Adresse 0x0. Wenn ich es mit gcc verknüpfen, ist alles in Ordnung.
ich das Problem bin zu raten, wird durch ld verursacht, die, wenn sie auf das Verknüpfungsergebnis von gcc im Vergleich weniger Abschnitte erzeugt.
Gibt es eine Möglichkeit, gdb ausführlicher zu konfigurieren, damit ich vielleicht herausfinden kann, was mit der ausführbaren Datei nicht stimmt?
(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: Die ausführbare Datei selbst läuft wie in den beiden Versionen erwartet.
Später bearbeiten: Befehle, die ich habe zu kompilieren verwendet:
as -arch x86_64 src.s -o src.o
ld -e _main -arch x86_64 src.o -o src
gcc -o src src.o
Haben Sie versucht, die Register (Info-Register) oder den Stack vor und, falls unterschiedlich, nach dem "stepi" -Befehl auszugeben? Warum interessiert es dich, ob die ausführbare Datei in Ordnung ist? – AlastairG
Ich kann die Register vor und nach dem "stepi" ablegen, aber ich sehe nichts relevantes. Ich sorge mich, weil ich ungeklärtes Verhalten nicht mag. – diciu
Wie hast du 'ld' und 'gcc' (und 'wie' natürlich) aufgerufen? Welche Flaggen hast du benutzt? – Bart