Domanda

Ho un file oggetto compilato utilizzando come (dal codice assembler).

Se collego usando ld , quando provo a stepi (o nexti ) gdb lamenta l'accesso di memoria all'indirizzo 0x0. Se collego usando gcc , tutto va bene.

sto indovinando il problema è causato da ld , che produce un minor numero di sezioni rispetto al risultato di collegamento di gcc .

C'è un modo per configurare gdb per essere più verbose così posso forse capire cosa c'è di sbagliato con l'eseguibile?

(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:. L'eseguibile si gestisce come previsto in entrambe le versioni

Successivamente modificare: i comandi che ho usato per compilare:

as -arch x86_64 src.s -o src.o
ld -e _main -arch x86_64 src.o -o src
gcc -o src src.o
È stato utile?

Soluzione

gdb ha un comando "show debug", dando varie impostazioni di debug interne. Per esempio. "Set di debug obiettivo 1" si accende la traccia per l'interazione di gdb con il processo di destinazione. Si potrebbe desiderare di sperimentare con ogni bandiera che hanno (non ce ne sono molti).

Altri suggerimenti

GCC in realtà non fare il collegamento, si chiama semplicemente ld a vostro nome. Le opzioni è che forniscono devono essere diversi da quelli che si sta utilizzando.

Per questa discussione:

Come arrivare comando del linker GCC?

Si dovrebbe essere in grado di vedere riga di comando del invocazione ld eseguendo gcc -v. Questo dovrebbe dirvi come modificare la riga di comando ld quindi le cose funzionano per voi.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top