问题标签 [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 投票
3 回答
6805 浏览

c - 从 ELF 二进制文件中仅提取我的函数名称

我正在编写一个脚本来提取二进制文件中的所有函数(由用户编写)。

以下 shell 脚本提取了我的函数名称以及一些以 __ 开头的库函数

function_names 文件的输出:

我只想提取我的功能。那么如何检查函数名称是否以 __ 开头,或者任何其他替代方法也非常受欢迎。

更新::
@djf 解决方案工作正常。如果.c编译的文件也可能包含以 开头的函数__怎么办?那么,如何区分呢?

0 投票
1 回答
1803 浏览

executable - windows如何显示进程的内存段?

我们有objdumpreadelfdubin等工具来显示可执行文件的内容。

但是当一个可执行文件被加载到内存中(创建一个进程)时,内存中的通常与可执行文件中不同。例如,在加载时,分配了两个额外的段,即堆栈(我们在这里忽略了页面映射的细节)。

是否有工具可以帮助显示进程的实时内存段/状态?

0 投票
1 回答
1908 浏览

gcc - ELF 修改节标志

我使用 gcc 编译了一个 C 代码,当我使用 readelf 检查 ELF 的部分时,我可以看到 .data 部分的标志设置为 WA(可写和可分配)。

是否可以修改这些标志?我可以使这个部分可执行吗?

我正在使用 gdb 来调试这个二进制文件,并且我想在某个点将 .data 部分的标志设置为 Executable。那么,这可以使用 gdb 或 gcc 来完成吗?

0 投票
1 回答
10533 浏览

elf - 了解 readelf 的重定位表输出

例如,运行命令:

我得到以下输出:

我不明白这个输出,想澄清一下。

第 1 列 offset 是否指示这些符号引用在 .text 段中的位置?Info 和 Type 列是什么意思,我认为重定位只是将符号引用映射到定义,所以我不明白怎么会有不同的类型?为什么某些符号名称将 0 作为其值的地址...我无法想象它们都映射到文本段中的同一位置?最后,为什么重定位表甚至存在于最终的可执行文件中?它不会占用额外的空间,并且所有引用都已经为生成可执行文件的最后一个链接命令解析了吗?

0 投票
1 回答
1652 浏览

linux-kernel - “size”与“readelf -t”命令给出不同的段长度

size my_obj.otext, .data segments,以字节为单位列出大小。

readelf -t my_obj.o给出不同大小(小得多)的文本和数据段。

对象转储也给出了类似的结果。

0 投票
1 回答
3193 浏览

c - 比较目标文件以查找变量更改

因此,在 32 位环境中,我编译了一个“.c”文件。

我救了敖。

假设 Ac 有一个变量,如

更改后我编译并获得另一个 Ao

现在,当我执行“cmp Ao Ao”时,我可以看到这些文件有所不同。现在我的问题是我可以通过比较“.o”文件找出究竟发生了什么变化。

我正在获取汇编代码并进行比较,但我无法对其进行正面和反面。有人可以建议一个更聪明的方法。

0 投票
2 回答
6305 浏览

assembly - 在 GNU Assembler 中,名称开头的点表示什么?

以下是微处理器启动文件中的一行,用于输入到 GNU 汇编器

名字开头的点有.isr_vector什么特别的意思吗?PS:此名称由 GNU 链接器ld引用。

编辑:

此名称也作为Section Header显示在 readelf 输出中:

0 投票
1 回答
26150 浏览

elf - readelf:错误:不是 ELF 文件 - 它在开始时有错误的魔术字节

我构建了一个程序,它运行良好(我的意思是我可以运行这个程序)。但是当我使用“readelf”检查是否有调试信息时,错误来了:

我的 Linux 发行版是 Ubuntu-12。有人可以帮助我吗?

0 投票
1 回答
4456 浏览

linux - 列出 ld 链接器可用的所有符号

我有一个由 (linux) gcc 4.8.2 编译的带有 -fvisibility=hidden 的小型静态库,它链接到一个共享库(我有两个版本,一个带有 C 代码的 gcc 和一个带有 Fortran 代码的 ifort)。静态库由一些内部函数组成,所有函数都以“ST_LIB_”为前缀。

我想确保在静态库中声明的函数不能被链接到共享库的任何可执行文件/库使用。在 Linux 上检查具有某些前缀的函数不能被任何外部库使用的最佳命令是什么?

我努力了:

nm --dynamic shared_lib | grep -i "ST_LIB_" | wc -l(输出 0)

readelf -d shared_lib | grep -i "ST_LIB_" | wc -l(输出 0)

nm -g shared_lib | grep -i "ST_LIB_" | wc -l(输出 26 或 0 取决于共享库)

readelf -s shared_lib | grep -i "ST_LIB_" | wc -l(输出 26 或 0 取决于共享库)

readelf -Ws shared_lib | grep -i "ST_LIB_" | grep -i "HIDDEN" | wc -l(输出 26 或 0 取决于共享库)

0 投票
1 回答
3757 浏览

gdb - 如何从elf文件中提取函数原型?

我没有成功找到这个问题的答案。

使用 GDB,我可以使用命令“调用”来获取函数的原型。例子:

因此,GDB 只能从 elf 文件中找出 fn() 返回 void 并将两个整数作为参数。

但是,我需要使用其他工具从 elf 文件中提取函数原型。最好,我想使用 objdump / readelf。

有谁知道这是否可能?如果不可能,GDB是如何做到的?函数原型存储在 elf 文件的哪个部分?