当我执行“打印系统”时,如何获取GDB提供的地址?
据说,如果我启动程序然后立即暂停它,那么查看/ proc / $ pid / maps并获取库的基地址。然后我需要在libc.so.6中找到system()的偏移量并将这两者加在一起。但是,当我在实践中尝试这个时,我最终得到的地址不同于gdb给出的地址。
获取system()地址的最佳方法是什么?
请注意,我正在尝试获取另一个程序的地址,而不是我自己编译的程序。
答案 0 :(得分:0)
获取system()地址的最佳方式是什么?
#include <stdio.h> // printf()
#include <stdlib.h> // system()
...
...
{
int rCode=0;
int (*system_ptr)(const char *command) = system;
...
rCode=(*system_ptr)("echo \"hello\"");
...
printf("Address of system(): %p\n", system_ptr);
...
}
...
答案 1 :(得分:0)
没有尝试过,但只是一个想法。怎么样:
void* libc = dlopen("libc.so");
void* address = dlsym( libc, "system");