【问题标题】:Can getauxval be wrapped and used with LD_PRELOAD?getauxval 可以与 LD_PRELOAD 一起包装和使用吗?
【发布时间】:2018-01-04 18:46:50
【问题描述】:

我有一个 C 文件,里面有两个非常小的 subs 来重新实现 getauxval,

unsigned long int __wrap_getauxval (unsigned long int __type) {
  printf("foobar");
  exit(5);
}

unsigned long int getauxval (unsigned long int __type) {
  printf("foobar");
  exit(5);
}

我正在编译这个

gcc -shared -fPIC -ldl -Wl,-wrap=getauxval hax.c -o hax.so

这样,我可以运行这个

LD_PRELOAD=/tmp/hax.so myExec

它会打印 foobar 并死掉,但是 如果我删除 getauxval 并仅依赖 LD -wrap'd 版本 __wrap_getauxval,我发现它不起作用.我在这里想念什么?为什么我可以重新实现getauxvalLD_PRELOAD,但是我不能包装它?我该怎么做才能包装像getauxval 这样的函数?

【问题讨论】:

    标签: gcc linker ld ld-preload


    【解决方案1】:

    我最终做的是存储一个函数指针

    static unsigned long int (*real_getauxval)(unsigned long int __type) = NULL;
    

    然后,使用dlsym 动态检索符号

    real_getauxval = dlsym(RTLD_NEXT, "getauxval");
    

    然后我可以轻松包装getauxval

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-05-17
      • 2015-10-30
      • 2016-07-15
      • 2011-03-24
      • 2016-01-26
      • 1970-01-01
      • 1970-01-01
      • 2012-05-13
      相关资源
      最近更新 更多