问题标签 [readelf]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
489 浏览

c - 如何获取 shstrtab 的字符串?

我正在编写 Linux 的 readelf 的简化版本。

我想打印部分信息,所以我需要部分的名称。在 Elf64_Shdr 结构中,sh_name 变量仅将我指向 shstrtab 中的索引。但这似乎不是 shstrtab 标头中的索引。它是其相关数据的索引。我想知道如何到达那里,因为 ELF 标头仅将我指向 shstrtab 部分标头,而不指向其相关数据。从我在文件的 hexdump 中可以看到,文件的结构如下:

我想错了吗?任何人都可以指导我获取部分名称吗?

0 投票
1 回答
143 浏览

linker - ELFIO 正在创建全零 ELF 部分,无论设置数据如何。如何将数据放入 .text 部分?

我正在尝试使用 ELFIO 创建一个 ELF 对象。

解决方法:线路section_text->set_flags(SHT_PROGBITS);应该是section_text->set_type(SHT_PROGBITS);

生成的对象是错误的(如下所述),因此:
如何创建一个包含实际数据的 elf 部分?

该程序如下:

当我使用 .text 部分转储该部分时,该部分readelf的大小和标志(AX,16 字节)是正确的,但数据全为零

readelf -x .text -aW sample.elf输出:

十六进制转储是:

当预期是:

0 投票
1 回答
74 浏览

android - 使用 STABS 从共享库 (.SO) 中获取帧

我有一个带有 STABS 调试信息的 Android SO 库,而不是 DWARF。我想从中获取调用帧信息,类似于...-readelf --debug-dump=frames-interp输出。

对于大多数 NDK 构建的库,readelf可以做到这一点,但不是这个。

STABS 是否支持框架信息?如果是这样,什么样的可执行文件解析器可以把它弄出来?

Addr2line该文件没有问题。

0 投票
0 回答
59 浏览

c++ - 在应用程序中集成共享对象,ldd 和 readelf 显示不同的输出

我正在尝试将 OpenCV 集成到应用程序中并面临以下一些问题。

但是,当我检查lddreadelf的输出时,以下是差异。

如上所示,readelf输出中缺少libopencv_imgproc。有人可以指出导致这种行为的原因吗?

0 投票
1 回答
271 浏览

linux - 如何提取obj文件中的所有部分

我正在使用 X86_64 Ubuntu 机器。我知道我们可以使用该命令从 obj 文件中提取某些部分。

假设我有一个名为 obj 的文件main.o,现在我可以执行以下操作:

然后我可以在命令的帮助下提取一些部分objdump,例如,

正如我们所看到的,我在.data此处提取了该部分。

但是,如果我尝试提取另一个部分,它似乎无法按预期工作。

为什么无法.strtab提取部分?如何提取此部分?

0 投票
1 回答
1016 浏览

c - 入口点地址和__executable_start有什么区别

我正在学习链接器如何在 Linux 上工作。有人告诉我,链接器将为可执行文件生成一些符号,例如__executable_start,这是程序启动的地址。

另外,我知道 ELF 文件中有一个“入口点地址”。

所以我不知道他们之间有什么区别。

我在下面写了一个简单的代码:

我用 GCC 编译它并得到一个名为a.out.

当我执行它时,它给了我Executable Start 4CEDA000.

然后我执行命令readelf -h a.out,关于入口点的输出是Entry point address: 0x540

嗯,很明显,0x540而且4CEDA000完全不同。

0 投票
1 回答
723 浏览

c++ - “ld:警告:找不到条目符号_start;默认为 0000000000401000”,带有自定义 *.o 文件

我编译了一个简单的目标文件文件并尝试与 链接ld,但它给出了警告。但是,文件有_start符号,这是readelf对象的。

这里可能是什么问题

0 投票
1 回答
946 浏览

c++ - 为什么我的简单“主”程序的 ELF 标头说它是“DYN(共享对象文件)”而不是可执行文件?

这是一个非常简单的 C++ 程序:

Makefile生成以下命令来编译程序。

我用命令检查file它是一个 ELF 可执行文件:

在我尝试检查 ELF 标头之前,一切似乎都很好:

从这里的维基百科,似乎有不同类型的文件,例如EXEC. 为什么它说我的简单主程序是共享对象而不是 ELF 标头上的可执行文件?

从我对.so's 的有限知识范围来看,我认为它们是链接但直到运行时才加载的库。在这种情况下,这有什么意义?

额外的信息:

0 投票
2 回答
917 浏览

c++ - 是否可以跳过/删除 ELF 文件中的“PHDR”程序头以执行可执行文件?如果是这样,为什么?

我正在对这个简单的 C++ 程序的二进制文件进行一些修改,以了解 ELF 的程序头:

编译:

我曾经readelf -l main得到以下内容:

我在本文档中看到:http ://man7.org/linux/man-pages/man5/elf.5.html for PHDR:

数组元素(如果存在)指定程序头表本身在文件和程序内存映像中的位置和大小。这种段类型在一个文件中不能出现多次。此外,只有当程序头表是程序内存映像的一部分时,才会出现这种情况。如果它存在,它必须在任何可加载的段条目之前。

引用中的出现if present让我想知道如果我跳过 PHDR 标题会发生什么。我使用vim的十六进制编辑器来更改使用的二进制布局main:%!xxd一定要:%!xxd -r在保存之前运行,否则它不再是二进制文件)从:

至:

(仅更改第 20 个字节),跳过 PHDR 标头的长度。我readelf再次运行以验证它仍然是有效的 ELF 文件:

令人惊讶的是,该程序仍然执行得非常好。为什么我们甚至需要 PHDR 标头?它对链接和/或其他情况有用吗?似乎它在运行时根本没有使用,那么为什么我们会有这个?

0 投票
1 回答
148 浏览

linux - 为什么符号大小的总和远小于“.text”部分的大小?

我在 linux 中调试一个动态共享库,库的名字是libMNN.so.

这是libMNN.sogot by所有部分的大小size -A ./libMNN.so

我们可以看到“.text”的大小是804416,“.rodata”的大小是17772。

这是命令获得的符号大小的总和readelf -D -sW ./libMNN.so | awk '{print $4}' | awk '{s+=$1} END {print s}'

符号大小的总和远小于“.text”和“.rodata”,为什么?

libMNN.so 可以从https://github.com/alibaba/MNN/releases/download/1.0.0/Android.zip下载