linux 链接器 库打桩

本文介绍了Linux链接器的库打桩技术,包括编译时、链接时和运行时三种打桩方法,以malloc和free为例,展示了如何在调用这些库函数时插入调试信息。通过这种方法,可以方便地进行程序调试。文章提供了实现打桩的代码示例和makefile配置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

@(linux 编程)

翻看 CSAPP 看到库函数打桩,记录下。

linux 链接器支持库打桩(library interpositioning), 允许我们截获共享库的调用,执行自己的代码,通过这个机制,可以给程序调试带来很多便利。

库打桩实现有三种:
- 编译时打桩
- 链接时打桩
- 运行时打桩

以下,参照书中例子,以 malloc 和 free 两个库函数的调用作为例子, 添加调用该函数时打印调试信息,以上述提到的三种方式实现打桩
ubuntu下测试代码

测试目标代码, 申请内存,赋值后答应,释放内存

#include<stdio.h>
#include"malloc.h"
int main()
{
    int *p = malloc(sizeof(int));
    *p = 12;
    printf("p = %d\n", *p);
    free(p);
    return 0;
}

编译时打桩

编译时打桩通过在编译时指定 include 路径,告诉C预处理器在搜索系统目录前,先查看当前目录,由于当前目录有malloc.h, 停止继续搜索

实现桩代码:

malloc.h

#ifndef _MALLOC_H
#define _MALLOC_H

#define malloc(size) mymalloc(size)
#define free(ptr) myfree(ptr)
void *mymalloc(size_t size);
void my
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值