我正在尝试获取exit()
libc 中提供的函数的地址(十六进制),但我不确定在哪里以及如何找到它。
任何人都知道找到它的方法,请分享一些想法。谢谢!
问问题
8995 次
5 回答
9
如果您需要exit
进程中已经存在的函数地址,请参阅 Grijesh 和其他人的回答。但是,如果您需要通过 nameexit
解析 libc函数,例如因为 libc已被另一个库隐藏,您可以通过以下方式获取它:exit
dlsym
#define _GNU_SOURCE /* for RTLD_NEXT */
#include <dlfcn.h>
/* ... */
void (*exit_addr)(int) = dlsym(RTLD_NEXT, "exit");
要dlsym
解决,您需要链接-ldl
.
于 2013-03-08T19:45:32.597 回答
6
我认为这会起作用:
printf("%p", (void*)exit);
"%p"
参数应是指向 的指针void
。指针的值以实现定义的方式转换为可打印字符序列。
于 2013-03-08T19:39:08.433 回答
5
任何函数的地址就是它的名字(没有括号)。你#include <stdlib.h>
也需要。设置一个初始化的指针:
void (*p)(int) = exit;
于 2013-03-08T19:44:18.667 回答
3
您可以按如下方式使用 gdb:
gdb ./yourprogram
break main
run
print exit
$1 = {<text variable, no debug info>} 0xb7e4b7f0 <exit>
here is exit() address----------------^
于 2014-05-14T17:57:33.237 回答
1
printf("%p", exit);
您必须包含用于 printf 的 stdio.h 和用于退出的 stdlib.h。这将创建一个函数指针以退出并打印它。
于 2013-03-08T19:42:53.350 回答