6
Si prega di guardare la riga di comando qui sotto. Ho impostato due punti di interruzione: uno su strcpy e l'altro su printf. Perché ha saltato il breakpoint 1?Perché gdb non si infrange su strcpy?
[email protected]:~/Desktop/Programs# gcc -g -o exp exp.c
[email protected]:~/Desktop/Programs# gdb -q exp
Reading symbols from /root/Desktop/Programs/exp...done.
(gdb) list
1 #include <stdio.h>
2 #include <string.h>
3
4 int main() {
5 char str_a[20];
6
7 strcpy(str_a, "Hello world!\n");
8 printf(str_a);
9 }
(gdb) break strcpy
Function "strcpy" not defined.
Make breakpoint pending on future shared library load? (y or [n]) y
Breakpoint 1 (strcpy) pending.
(gdb) break printf
Breakpoint 2 at 0x8048300
(gdb) run
Starting program: /root/Desktop/Programs/exp
Breakpoint 2, 0xb7eabf54 in printf() from /lib/i386-linux-gnu/i686/cmov/libc.so.6
(gdb) i r eip
eip 0xb7eabf54 0xb7eabf54 <printf+4>
(gdb) cont
Continuing.
Hello world!
[Inferior 1 (process 3726) exited with code 015]
Può essere ottimizzato e ridotto a codice inline, non una chiamata di funzione in realtà. Prova a compilare senza ottimizzazione. – Rohan
@Rohan Ho usato 'gcc -g -O0 -o exp exp.c' ma non ha funzionato. –
@ W.Zhu Controllare il codice dell'assieme. Scoprirai che anche con '-O0' non ci sono chiamate a' strcpy'. – kaylum