答案1
printf
包含和函数的库exit
是一个共享库(*.so
),在程序启动后动态加载。在动态链接器将库放入进程的地址空间之前,这些函数的地址是未知的。程序的一次运行和另一次运行期间,地址可能会发生变化。
您可以使用gdb
调试器来查找动态链接器放置函数的位置,方法是运行程序直到出现断点,然后p printf
在调试器提示符下键入。
为了避免动态链接,您可以将库静态链接到您的程序。如果执行此操作,则地址是预先已知的,并且可以使用进行检查readelf
。要使用静态编译程序gcc
,请将-static
选项添加到命令行,例如:
gcc -static myprog.c -o myprog