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

symbols - 在未剥离库的 .init_array 部分中查找函数名称

是否可以在 elf 动态库中找出所有静态初始化实例。我可以像这样通过 objdump 命令在 .init_array 部分中转储函数指针数组。

有没有办法将这些函数指针映射回函数名。我有带有调试符号的未剥离库。我想尽可能地消除静态初始化以改善我的库加载时间。

0 投票
2 回答
295 浏览

regex - Linux readelf 显示具有不同数字系统(十六进制和十进制)的对象大小

我正在调查 ELF 文件中的一些对象,并为此目的使用 readelf。

这个 readelf 示例显示了第 3 列对象的大小(字节),

在大型对象上,readelf 以十六进制而不是十进制打印,

这打破了我的尺寸排序尝试。(排序忽略十六进制值)

我尝试将所有十六进制转换为十进制,如下所示:

并得到

大小列(3)翻译成dec,很好,

但是第 2 列也被翻译成 dec,这很糟糕。

我找到了这个:

查找并替换受限于特定列的单行

但我似乎无法结合这两个命令。

如何仅将第 3 列翻译为 dec?

谢谢

0 投票
1 回答
334 浏览

c - readelf 'Align' 列单元

我有以下简单的“hello world”程序:

我将其编译为

现在,我想通过发出检查它的内存段readelf -l并获得以下输出:

我对Align列感到困惑:这些数字是字节还是千字节?我认为对齐应该等于页面大小。为什么我得到那些号码?

谢谢!

0 投票
0 回答
144 浏览

c - 读取 readelf -wi 的输出,为什么有的局部变量有 DW_AT_location 值,而有的没有?

我正在运行 readelf -wi file.elf,并查看输出。我正在查看局部变量的一些调试信息,我可以找到列出的所有变量(它们都有 DW_AT_name),但有些没有

为什么?

有没有办法获取没有这条线的局部变量的位置?不,我不能重新编译代码,我有源代码,但不能编辑它或用更多 gcc 标志或任何东西重新编译它。我有 dissasembly 和 elf 文件(显然)。

0 投票
0 回答
89 浏览

compilation - 如果在 symtab 中提到符号但在 readelf 输出的 dynsym 中没有提到符号,这意味着什么?

我有一个名为 libtest.so 的共享库。我正在分析这个 .so 的 readelf 输出来解决undefined reference to _invalid_parameter()。readelf 输出在 .symtab 部分显示 _invalid_parameter UND,但在 .dynsym 部分没有提及。

有人可以解释一下在 .symtab 部分中提到符号但在 .dynsym 部分中没有提到的符号是什么意思吗?

libtest.so 动态链接到其他几个共享库,但它们都没有为 _invalid_parameter 提供定义,但仍然链接正在传递。任何想法,如何

0 投票
1 回答
886 浏览

gnu - 在检查节标题时,readelf 显示的列的含义是什么?

有人可以解释这些列的含义吗?
我使用 readelf 读取 ELF 文件,但找不到任何有关 Section Headers 列的相关信息(例如 objdump)。

例如什么是'ES'、'Lk'和'Info'?
'Flg' 中所有可用的标志是什么?
'Al' 表示对齐?

提前致谢,

0 投票
1 回答
494 浏览

gcc - RISC-V:未链接的目标文件中的代码大小

我有一个已编译但未使用 SiFive risc-v 编译器链接的 .i 文件,如下所示:

../riscv64-unknown-elf-gcc-8.2.0-2019.05.3-x86_64-linux-ubuntu14/bin/riscv64-unknown-elf-gcc clock.i

但是,当我对编译的目标文件执行 readelf -S 时, .text 部分为 0 字节:

如果我在编译的目标文件上做一个大小,我得到一个 264 字节的大小:

如果我执行 nm --print-size 我会得到以下信息:

对我来说,大小是 0x38 + 0x38 + 0x3A + 0x2E = 0xD8 (216) 字节。

如何计算编译目标文件的大小?

0 投票
1 回答
284 浏览

assembly - 注入段后的分段错误

我目前正在关注 Dennis Andriesse 的一本关于二进制反汇编和检测的书。

在后面的章节中,我们为 ELF 类型的文件编写了一个注入器。注入器将代码段放置在位置 0x80000 [+offset %16] 处,覆盖 .note.ABI-tag 段(其中仅包含与执行无关的信息,因此覆盖它是安全的)。

我正在修改的程序是一个简单的 hello_username 程序,如下所示:

我放在那里的代码如下所示:

虽然我相信我们不需要推送 rcx 和 r11,代码简单直接,我编译它

之后,我将它注入我们编写的程序中,除了注入该部分之外,我还覆盖了入口点。这是操作前的readelf输出:

您可以看到入口点是 0x1080,这是 .text 部分的开始位置。(_start函数在这个地方,用objdump查了一下)

现在,在注入发生后,同样的输出:

您可以看到新部分在那里,从 0x80370 开始,并且 ELF 标头中的新入口点指向该部分(使用十六进制编辑器仔细检查)。

所以,现在问题开始了:

如果我尝试执行该程序,它会正确打印出“Yikes!你被恶作剧了!\”紧随其后的是 SEGMENTATION FAULT。

这让我发疯了,因为我已经玩了一个多星期了!不幸的是,gdb 在这里没有多大帮助,但至少我可以在 SIGSEV 之前获取堆栈帧:

这就是我卡住的地方。为什么说是1080??()。我猜我对切入点的计算也应该是正确的。rip 也指向 _start 函数....

我怎样才能让它再次跳转到正确的入口点?我只是想为一个hello world程序写一个mod,这应该不是太多的黑魔法......

0 投票
1 回答
296 浏览

c - C 二进制文件中的整数:使用 readelf、objdump 或类似工具查看它

我有以下 C 源文件 hello.c,通过以下方式在 linux 上编译g++ -o hello hello.c

(是的,我知道我在 C 中使用 g++,但这不是这个问题的重点。)

我想使用readelfobjdump查看常量整数0xDEADBEEF在二进制文件中的存储位置,但我不知道命令开关来促进这一点。我可以使用这些工具清楚地看到我的字符串,但看不到整数。我已经尝试了各种命令选项,我不打算在此处列出,因为它毫无意义,并且正在通过 grep 搜索 BEEF 管道输出。

请问我需要什么命令行?

0 投票
0 回答
936 浏览

assembly - 如何理解 .bss 段反汇编代码?

源 C 代码:

目标文件中对应的.bss段反汇编代码:

基于节标题的信息:

很明显,.bss 存在并占用了一定的空间(与 hex dump 匹配)!

我想问两件事,

1.当我使用 readelf 转储 .bss 部分时:

我只是不明白。它肯定有一些数据,对吧?

2.如何理解.bss部分的那些代码?我的意思是,我完全将它们单独理解为装配体,但我只是对它们为什么在这里感到有点困惑?

谢谢。

额外信息:MacOS 使用 Docker(Ubuntu)、AT&T 语法、x86_64 Arch(物理),但在编译和链接阶段使用 elf_i386(32 位)arch。