问题标签 [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.
symbols - 在未剥离库的 .init_array 部分中查找函数名称
是否可以在 elf 动态库中找出所有静态初始化实例。我可以像这样通过 objdump 命令在 .init_array 部分中转储函数指针数组。
有没有办法将这些函数指针映射回函数名。我有带有调试符号的未剥离库。我想尽可能地消除静态初始化以改善我的库加载时间。
regex - Linux readelf 显示具有不同数字系统(十六进制和十进制)的对象大小
我正在调查 ELF 文件中的一些对象,并为此目的使用 readelf。
这个 readelf 示例显示了第 3 列对象的大小(字节),
在大型对象上,readelf 以十六进制而不是十进制打印,
这打破了我的尺寸排序尝试。(排序忽略十六进制值)
我尝试将所有十六进制转换为十进制,如下所示:
并得到
大小列(3)翻译成dec,很好,
但是第 2 列也被翻译成 dec,这很糟糕。
我找到了这个:
从
但我似乎无法结合这两个命令。
如何仅将第 3 列翻译为 dec?
谢谢
c - readelf 'Align' 列单元
我有以下简单的“hello world”程序:
我将其编译为
现在,我想通过发出检查它的内存段readelf -l
并获得以下输出:
我对Align
列感到困惑:这些数字是字节还是千字节?我认为对齐应该等于页面大小。为什么我得到那些号码?
谢谢!
c - 读取 readelf -wi 的输出,为什么有的局部变量有 DW_AT_location 值,而有的没有?
我正在运行 readelf -wi file.elf,并查看输出。我正在查看局部变量的一些调试信息,我可以找到列出的所有变量(它们都有 DW_AT_name),但有些没有
为什么?
有没有办法获取没有这条线的局部变量的位置?不,我不能重新编译代码,我有源代码,但不能编辑它或用更多 gcc 标志或任何东西重新编译它。我有 dissasembly 和 elf 文件(显然)。
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 提供定义,但仍然链接正在传递。任何想法,如何?
gnu - 在检查节标题时,readelf 显示的列的含义是什么?
有人可以解释这些列的含义吗?
我使用 readelf 读取 ELF 文件,但找不到任何有关 Section Headers 列的相关信息(例如 objdump)。
例如什么是'ES'、'Lk'和'Info'?
'Flg' 中所有可用的标志是什么?
'Al' 表示对齐?
提前致谢,
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) 字节。
如何计算编译目标文件的大小?
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,这应该不是太多的黑魔法......
c - C 二进制文件中的整数:使用 readelf、objdump 或类似工具查看它
我有以下 C 源文件 hello.c,通过以下方式在 linux 上编译g++ -o hello hello.c
:
(是的,我知道我在 C 中使用 g++,但这不是这个问题的重点。)
我想使用readelf
或objdump
查看常量整数0xDEADBEEF
在二进制文件中的存储位置,但我不知道命令开关来促进这一点。我可以使用这些工具清楚地看到我的字符串,但看不到整数。我已经尝试了各种命令选项,我不打算在此处列出,因为它毫无意义,并且正在通过 grep 搜索 BEEF 管道输出。
请问我需要什么命令行?
assembly - 如何理解 .bss 段反汇编代码?
源 C 代码:
目标文件中对应的.bss段反汇编代码:
基于节标题的信息:
很明显,.bss 存在并占用了一定的空间(与 hex dump 匹配)!
我想问两件事,
1.当我使用 readelf 转储 .bss 部分时:
我只是不明白。它肯定有一些数据,对吧?
2.如何理解.bss部分的那些代码?我的意思是,我完全将它们单独理解为装配体,但我只是对它们为什么在这里感到有点困惑?
谢谢。
额外信息:MacOS 使用 Docker(Ubuntu)、AT&T 语法、x86_64 Arch(物理),但在编译和链接阶段使用 elf_i386(32 位)arch。