[问题] dlsym hook function crash

楼主: gigigigi (gigigigi)   2017-07-11 15:44:55
#include <stdio.h>
#include <string.h>
#include <stddef.h>
#include <unistd.h>
#include <dlfcn.h>
void* malloc(size_t size)
{
char buf[32];
static void* (*real_malloc)(size_t) = NULL;
printf("ggggggggggg");
if (real_malloc == NULL) {
*(void**)(&real_malloc) = dlsym(RTLD_NEXT, "malloc");
}
sprintf(buf, "malloc called, size = %zu\n", size);
write(2, buf, strlen(buf));
return real_malloc(size);
}
void free(void* ptr)
{
char buf[32];
static void* (*real_free)(void* ptr) = NULL;
if (real_free == NULL) {
*(void**)(&real_free) = dlsym(RTLD_NEXT, "free");
}
sprintf(buf, "free called, ptr address = %p\n", ptr);
write(2, buf, strlen(buf));
real_free(ptr);
}
gcc -D_GNU_SOURCE -shared -fPIC -o libmcount.so malloc_count.c -ldl
LD_PRELOAD=./libmcount.so ls
那闷在malloc函数里面 p
rintf 函数会造成 crash ? 看网络上dlsym hook一些例子只用 write 而不用 printf
作者: Bencrie   2017-07-12 01:13:00
你先把 sprintf 改成 snprintf 再说 XD
楼主: gigigigi (gigigigi)   2017-07-12 14:16:00
coredump gdb ls core 结果看起来是死在printf 里面http://0rz.tw/t54mf
作者: Bencrie   2017-07-13 00:26:00
还是挂个 strace / ltrace 跑看看堆叠是不是坏了
作者: CP64 (( ̄▽ ̄#)﹏﹏)   2017-07-13 01:14:00
这 trace 结果 一脸堆叠过深的样子
作者: x000032001 (版废了该走了)   2017-07-13 07:38:00
printf 又呼叫malloc 造成无限循环
楼主: gigigigi (gigigigi)   2017-07-13 16:47:00
目前结论也是递回无限循环造成!

Links booklink

Contact Us: admin [ a t ] ucptt.com