我寫了一個小程序來查找exit()函數在Linux中的工作方式。如何知道exit()函數的工作方式?
#include <unistd.h>
int main()
{
exit(0);
}
然後我用gcc編譯程序。
gcc -o example -g -static example.c
在gdb中,當我設置一個斷點時,我得到了這些行。
Dump of assembler code for function exit:
0x080495a0 <+0>: sub $0x1c,%esp
0x080495a3 <+3>: mov 0x20(%esp),%eax
0x080495a7 <+7>: movl $0x1,0x8(%esp)
0x080495af <+15>: movl $0x80d602c,0x4(%esp)
0x080495b7 <+23>: mov %eax,(%esp)
0x080495ba <+26>: call 0x80494b0 <__run_exit_handlers>
End of assembler dump.
(gdb) b 0x080495a3
Function "0x080495a3" not defined.
Make breakpoint pending on future shared library load? (y or [n]) y
Breakpoint 1 (0x080495a3) pending.
(gdb) run
Starting program: /home/jack/Documents/overflow/example
[Inferior 1 (process 2299) exited normally]
程序不停在斷點處。爲什麼?我使用-static來編譯程序,爲什麼斷點會一直等到庫加載到內存中?
嘗試添加標誌-O0(大O零)到編輯。這會將優化設置爲最低,因此彙編代碼可能更易於閱讀。 – Mads 2012-04-18 07:14:19