本地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)
相关推荐
屁股割了还要学1 小时前
【C语言进阶】柔性数组
c语言·开发语言·数据结构·c++·学习·算法·柔性数组
oioihoii1 小时前
C++实战案例:从static成员到线程安全的单例模式
java·c++·单例模式
zzzzz_ccc2 小时前
AVL树和红黑树的特性以及模拟实现
c语言·数据结构·c++
liulilittle3 小时前
C++ Proactor 与 Reactor 网络编程模式
开发语言·网络·c++·reactor·proactor
天安彩4 小时前
mac下 vscode 运行 c++无法弹出窗口
c++·vscode·macos·clang
程序员编程指南4 小时前
Qt 网络编程进阶:WebSocket 通信
c语言·网络·c++·qt·websocket
regret~6 小时前
【记录】C++生产者 / 消费者 案例
开发语言·c++
尘似鹤6 小时前
c++注意点(12)----设计模式(生成器)
c++·设计模式
m0_687399847 小时前
Ubuntu22 上,用C++ gSoap 创建一个简单的webservice
开发语言·c++
屁股割了还要学7 小时前
【C语言进阶】一篇文章教会你文件的读写
c语言·开发语言·数据结构·c++·学习·青少年编程