gpt4 book ai didi

c - 使用 C 程序获取程序标志

转载 作者:行者123 更新时间:2023-11-30 14:20:32 25 4
gpt4 key购买 nike

我实际上正在尝试通过 C 程序获取 objdump -s 命令给出的标志。但我不知道去哪里寻找它们。例如这里:

./my_objdump:     file format elf64-x86-64
architecture: i386:x86-64, flags 0x00000112:
EXEC_P, HAS_SYMS, D_PAGED
start address 0x00000000004006f0

我想知道如何获得:标志 0x00000112:EXEC_P、HAS_SYMS、D_PAGED在C.谢谢

最佳答案

I would like to know how to get: flags 0x00000112: EXEC_P, HAS_SYMS, D_PAGED in C.

从您的问题中不清楚您是否不知道如何获取数字0x112,或者如何将该数字转换为EXEC_P等。[1]

前者是Elf64_Ehdr中e_flags的值,位于文件的开头。也就是说,您将文件中偏移量 0 处的 sizeof(struct Elf64_Ehdr) 字节读入缓冲区 [2],然后:

printf("flags: 0x%x\n", ((struct Elf64_Ehdr *)buf)->e_flags);

后者:EXEC_PHAS_SYMS等表示libbfd内部使用的标志,与实际关系不大>ELF 文件。它们是内部抽象,并且(或应该)任何人都没有什么兴趣。

但如果您真的关心的话,如果文件有 e_phnum != 0,则设置 D_PAGED 标志,即

if (((struct Elf64_Ehdr *)buf)->e_phnum != 0) {
printf("D_PAGED\n");
}

如果存在 .symtab.dynsym 部分等,我确信已设置 HAS_SYMS

[1] 注意:与人们的想法相反,EXEC_P 等标志不能flags派生。

[2] 如果您的文件是 32 位 ELF,则需要进行明显的调整。它还假设您正在查看 native ELF 文件。在小端机器上检查大端 ELF 文件(反之亦然)需要额外的工作。

关于c - 使用 C 程序获取程序标志,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15373315/

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