C语言实现读取elf文件的字符串表,符号表

文章讲述了如何使用C语言的fread和fseek函数,配合Elf32_Ehdr和Elf32_Sym结构,从ELF文件中读取符号表,包括函数名、地址和大小,以解析程序的函数信息。

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

任务: 读取符号表中的func,并将其函数名、函数首地址、函数大小(函数地址范围)保存起来。

两个c语言相关函数:
fread:

int fread(void *buffer,int size,int count,FILE *fp);

fread()──从fp所指向文件的当前位置开始,一次读入size个字节,重复count次,并将读入的数据存放到从buffer开始的内存中; buffer是存放读入数据的起始地址(即存放何处)。

fseek:

int fseek(FILE *stream, long offset, int fromwhere);

第一个参数file指针 第二个参数移动的偏移量 第三个参数移动到哪里 分别用3个宏

SEEK_SET 即0 文件开头
SEEK_CUR 即1 文件当前位置
SEEK_END 即2 文件结尾
fseek(fp,100L,SEEK_SET);把fp指针移动到离文件开头100字节处;
fseek(fp,100L,SEEK_CUR);把fp指针移动到离文件当前位置100字节处;
fseek(fp,100L,SEEK_END);把fp指针退回到离文件结尾100字节处。

#include <elf.h>

typedef struct {
   
   
    char name[64];
    paddr_t addr;      //the function head address
    Elf32_Xword size;
} Symbol;

Symbol *symbol = NULL;  //dynamic allocate memory  or direct allocate memory (Symbol symbol[NUM])

void parse_elf(const char *elf_file)
{
   
   
    
    if(elf_file == NULL) return;
    
    FILE *fp;
    fp = fopen(elf_file, "rb");
    
    if(fp == NULL)
    {
   
   
        printf("failed to open the elf file!\n");
        exit(0);
    }
	
    Elf32_Ehdr edhr;
	//读取elf头
    if(fread
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值