ELF文件入口点之后的执行流程
以上上篇文章中的test为例,先看入口点函数start( ):
前辈已给出调用顺序:
1、start( )->__libc_start_main( )
2、__libc_start_main( )->init( )->main( )->fini( )->rtld_fini( )->exit( )
init( ):用于C++全局对象构造
main( ):你自己写的函数
fini( ):用于C++全局对象析构
经过查看/lib/i386-linux-gnu/libc-2.23.so文件中__libc_start_main( )函数代码,未发现调用fini( )、rtld_fini( )函数,如下:
main( )函数调用之后紧接着就是exit( )调用
经过动态调试证实fini( )、rtld_fini( )函数确实没有执行。
gdb调试过程中一些指令记录做以后参考:
显示__libc_start_main( )函数的7个参数:x /7xw 内存地址
依次是:main( )地址 argc argv init( )地址 fini( )地址 rtld_fini( )地址 stack_end
显示程序参数:x /sb 内存地址
关于main函数参数可以看
https://blog.****.net/singleyellow/article/details/78942853
https://blog.****.net/singleyellow/article/details/78895108
设置默认汇编语言编码与ida相同:set disassembly-flavor intel
显示汇编代码同时显示对应内存数据:disassemble -r