本地preload hook案例

目的

实现通过LD_PRELOAD 对运行程序的malloc,free进行hook

hook代码实现

hook.c

arduino 复制代码
#define _GNU_SOURCE
#include <stdio.h>
#include <dlfcn.h>

static void* (*real_malloc)(size_t size);
static void  (*real_free)(void *ptr);

__attribute__((constructor))
static void init()
{
    real_malloc = dlsym(RTLD_NEXT, "malloc");
    real_free   = dlsym(RTLD_NEXT, "free");
}

void *malloc(size_t size)
{
    void *ptr = real_malloc(size);
    fprintf(stderr, "malloc(%zd) = %p\n", size, ptr);
    return ptr;
}

void free(void *ptr)
{
    real_free(ptr);
    fprintf(stderr, "free(%p)\n", ptr);
}

编译为so

vbnet 复制代码
clang hook.c -shared -fPIC -ldl -o hook.so

测试代码

main.c

c 复制代码
#include <stdio.h>
#include <stdlib.h>

int main()
{
	char* a = (char*)malloc(sizeof(char)*5);

	free(a);
}

编译为可执行文件

css 复制代码
clang main.c -o main 

hook结果

运行

bash 复制代码
LD_PRELOAD=$PWD/hook.so ./main

结果

scss 复制代码
malloc(5) = 0x559d34500260
free(0x559d34500260)
相关推荐
别动我齐刘海9 小时前
Linux 系统调试学习1
linux·运维·服务器·c++·学习·机器学习·机器人
jimy113 小时前
C++ 虚函数表:基类和派生类共用一张 vtable 吗?
开发语言·c++
爱吃提升13 小时前
Dev-C++ 5.11 C++断点调试完整教程
开发语言·c++
xlq2232214 小时前
全面复习7
c++
geats人山人海14 小时前
现代c++2.4 虚继承
java·开发语言·c++
csuzhucong15 小时前
天元一号、二号、三号
c++
灯澜忆梦15 小时前
【面向对象编程c++】| 数组与函数
java·数据结构·c++
起个名字费劲死了15 小时前
VisionMaster 十二点标定+单点抓取
c++·visionmaster
Lzg_na17 小时前
僵尸进程、孤儿进程、守护进程:含义、区别与生命周期详解
c++
zhanghaha131417 小时前
C++ 的类是什么(新手保姆讲解,配合 Qt 对照理解)
c++