任务: 读取符号表中的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