gpt4 book ai didi

c - 破解库中的标准函数,然后调用 native 库函数

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:59:33 27 4
gpt4 key购买 nike

我试图破解 malloc 函数以首先调用我的 malloc 函数。一旦我的 malloc 函数在其中执行,我想调用标准 malloc。但是,我得到了一个递归,因为它只是加载我定义的 malloc。我该如何修复以下代码?

#include <dlfcn.h>
#include "stdio.h"
//#include "stdlib.h"


void *handle;

void *handle_malloc;

int (*loadprg)(void);

void * (*malloc_sysm)(size_t);


void init()
{
handle = dlopen ("/export/home/joshis1/Foxtel/temp/libloadmap.so", RTLD_LAZY);
if( handle == NULL)
{
puts(dlerror());
}


handle_malloc = dlopen ("/lib/libc.so.6", RTLD_LAZY);
if( handle_malloc == NULL)
{
puts("handle malloc error\r\n");
puts(dlerror());
}


}


#include "stdio.h"


void *malloc(int size)
{
printf("called..my malloc\r\n");

malloc_sysm = dlsym(handle_malloc,"malloc");

if ( dlerror() != NULL)
{
puts("malloc symbol not found..");
exit(1);
}


printf("This should call actual malloc now..\r\n");
return malloc_sysm(size);




}


int main()
{
int *t;
init();
printf("call load program now\r\n");

loadprg = dlsym(handle, "loadprg");

if( dlerror()!= NULL)
{
puts("Symbol load errror");
}

(*loadprg)();

printf("Close the handle now..\r\n");

dlclose(handle);


t = (int *) malloc (100);

dlclose(handle_malloc);



return 0;

}

输出是对我定义的 malloc() 的递归。如何解决这个问题?

最佳答案

要覆盖共享函数,您需要编译自己的共享库并通过 LD_PRELOAD 环境变量预加载它。

#define _GNU_SOURCE

#include <stdlib.h>
#include <stdio.h>
#include <dlfcn.h>

void *malloc(size_t size) {
printf("called..my malloc\r\n");

void *(*original_malloc)(size_t size);
// Find original malloc function
original_malloc = dlsym(RTLD_NEXT, "malloc");

if ( dlerror() != NULL)
{
puts("malloc symbol not found..");
exit(1);
}

printf("This should call actual malloc now..\r\n");
return (*original_malloc)(size);
}

$ gcc -Wall -fPIC -shared -o mymalloc.so mymalloc.c -ldl
$ LD_PRELOAD=./mymalloc.so ./prog

现在您的程序将使用预加载库中的 malloc。

关于c - 破解库中的标准函数,然后调用 native 库函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18827371/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com