我试图获取exit()
libc中提供的函数的地址(十六进制),但我不知道在哪里以及如何找到它.
任何人都知道找到它的方法请分享一些想法.谢谢!
如果您需要exit
过程中已存在的函数的地址,请参阅Grijesh和其他人的答案.但是如果你需要通过名称来解析libc exit
函数,例如因为libc 被另一个库遮蔽了,你可以使用以下方法获取它:exit
dlsym
#define _GNU_SOURCE /* for RTLD_NEXT */
#include <dlfcn.h>
/* ... */
void (*exit_addr)(int) = dlsym(RTLD_NEXT, "exit");
Run Code Online (Sandbox Code Playgroud)
对于dlsym
解决,您需要与链接-ldl
.
我认为这会奏效:
printf("%p", (void*)exit);
Run Code Online (Sandbox Code Playgroud)
"%p"
参数应该是指针void
.指针的值以实现定义的方式转换为可打印字符序列.
任何函数的地址都只是它的名字(没有括号).你也需要#include <stdlib.h>
.要设置初始化指针:
void (*p)(int) = exit;
Run Code Online (Sandbox Code Playgroud)