手动获取系统功能的地址?

时间:2014-04-21 19:31:23

标签: c gdb system

当我执行“打印系统”时,如何获取GDB提供的地址?

据说,如果我启动程序然后立即暂停它,那么查看/ proc / $ pid / maps并获取库的基地址。然后我需要在libc.so.6中找到system()的偏移量并将这两者加在一起。但是,当我在实践中尝试这个时,我最终得到的地址不同于gdb给出的地址。

获取system()地址的最佳方法是什么?

请注意,我正在尝试获取另一个程序的地址,而不是我自己编译的程序。

2 个答案:

答案 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");