gpt4 book ai didi

c - 如何打印交易品种的表格,交易品种名称

转载 作者:太空宇宙 更新时间:2023-11-04 03:11:01 26 4
gpt4 key购买 nike

我想在符号表中打印符号的名称。我正在将 elf 映射到虚拟内存(使用 mmap),我成功地访问了符号表,但是当尝试打印符号名称时它失败了(显示一个奇怪的字符串,将其与 elf 文件结果进行比较)。

我的代码:

void printSymboles() {
Elf32_Sym* symtab;
Elf32_Shdr * sh_strtab_p ;
char *sh_strtab;
int symbol_num=-1;
if(currentFd==-1){
printf("not legal file set\n");
} else {

sectionHeader=(Elf32_Shdr*)(map_start+header->e_shoff);
int section_num=header->e_shnum;

int numSectionsFound=0;
for(int i=0;i<section_num &&numSectionsFound<2;i++){
if(sectionHeader[i].sh_type==SHT_SYMTAB) {
symtab=(Elf32_Sym *) (map_start+sectionHeader[i].sh_offset);
symbol_num= sectionHeader[i].sh_size/sectionHeader[i].sh_entsize; // symobl tbl size/ entrysize
numSectionsFound++;
}
if(sectionHeader[i].sh_type==SHT_STRTAB) {
sh_strtab_p=&sectionHeader[i];
sh_strtab=(char*) map_start+sh_strtab_p->sh_offset;
numSectionsFound++;

}
}

if(symbol_num==-1) {
printf("symbol table doesn't exist");
} else {
printf("symbol table : \n");
for(int i=0;i<symbol_num;i++) {
printf("name : %s\n",sh_strtab+symtab[i].st_name);
}
}

最佳答案

问题几乎可以肯定是您正在查找错误的 SHT_STRTAB 部分——您扫描标题以查找 SHT_STRTAB 部分,无论最后找到哪个部分,您都记得在 sh_strtab_p 中。如果您的 ELF 文件与大多数 elf 文件一样,那可能是节头字符串表(包含节头名称)而不是带有符号名称的字符串表。

要找到包含您的符号名称的字符串表,您需要查看符号表节标题的 sh_link 字段——它告诉您节号(节标题中的索引)包含该符号部分中符号名称的字符串表部分。文件中可以有任意多个 SYMTAB 部分,每个部分都有自己的 STRTAB 部分。

将所有这些放在一起,您想要的东西更像:

Elf32_Shdr *section = (Elf32_Shdr*)(map_start+header->e_shoff);
char *section_names = (char *)(map_start + section[header->e_shstrndx].sh_offset);

for(int i=0; i<header->e_shnum; i++) {
if(section[i].sh_type==SHT_SYMTAB) {
printf("Symobl table %s:\n", section_names + section[i].sh_name);
Elf32_Sym *symtab = (Elf32_Sym *)(map_start+section[i].sh_offset);
int symbol_num = section[i].sh_size/section[i].sh_entsize;
char *symbol_names = (char *)(map_start + section[section[i].sh_link].sh_offset);
for (int j=0; j<symbol_num; j++) {
printf("name : %s\n", symbol_names + symtab[j].st_name);
}
}
}

当然,最好进行健全性检查以确保没有索引超出它们正在索引的部分的范围,并且 sh_entsize 和 e_shentsize 与您正在使用的结构的大小相匹配,以防万一 ELF 文件已损坏。

关于c - 如何打印交易品种的表格,交易品种名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56400713/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com