gpt4 book ai didi

c - 在 C 中读取 ELF 头文件

转载 作者:太空狗 更新时间:2023-10-29 17:12:01 27 4
gpt4 key购买 nike

目前我正在编写一个小程序来读取 elf 文件头并打印一些信息

我有一个名为 buf 的无符号字符指针,它指向 elf 文件在内存中的位置(我使用 mmap 将其映射到内存),然后我将其类型转换为适当的 elf 头指针

Elf32_Ehdr *ehdr = (Elf32_Ehdr *)buf;

在这之后我想得到一个程序头表的地址,我是这样做的

Elf32_Phdr *ptbl = (Elf32_Phdr *) (buf + ehdr->e_phoff)

当我尝试像这样打印 e_phoff 成员的值时,我注意到 ptbl 指针的值没有改变

fprintf( stdout , "Offset of program headers : %d\n", ehdr->e_phoff);

我得到零当我尝试打印程序标题的数量和节标题的数量时,同样的事情发生了——总是得到零如果我使用 linux readelf,它会打印正确的值有没有人遇到过同样的问题?

最佳答案

解析 ELF 对象时,您需要记住:

  1. 文件内结构(例如 ELF 可执行文件头)的大小、文件对齐方式和内部布局取决于 ELF 对象的字长。
  2. ELF 对象的字节序可能不同于读取该对象的程序的“ native ”字节序。
  3. 包含大量节或程序段的 ELF 对象可以使用替代的“扩展编号”方案。

与其手动处理这些情况,不如使用 ELF(3) 访问 API 的实现来解析 ELF 对象(请参阅:BSD libelfGNU libelf)。

教程`` libelf by Example '' 包含对 ELF(3) API 的可读介绍。

关于c - 在 C 中读取 ELF 头文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10352768/

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