问题标签 [objdump]

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 投票
2 回答
2066 浏览

c - nm:如何在共享库中显示符号的目标文件?

我有 25 个目标文件,它们组合成一个共享库。我已经用 gcc 生成了共享库,当我用nm -D libmylib.so寻找暴露的符号时,我在 .bss 部分中发现了两个名为iy的不受欢迎的暴露符号。我试图在我的源文件中找到它们,但我找不到它们,所以如果有人能告诉我是否有某种方法可以找到哪个 .o 文件恰好具有这些不希望的暴露符号?我可以用 nm 做还是需要其他工具?

任何帮助,将不胜感激。

0 投票
1 回答
991 浏览

c++ - 用于 Visual Studio C++ ABI 和 VS 编译对象的 readelf 实用程序?

在使用 Visual Studio 编译 C++ 源代码和readelf调查,和.objdumplibobjdll

我知道 MinGW 提供了此工具的移植,但我正在寻找对 Microsoft C++ ABI 有官方支持的东西。

如果这很重要,我正在使用 Visual Studio 2012。

谢谢。

0 投票
1 回答
6583 浏览

arm - objdump 不会显示我的 ELF 部分

我有一个发射 ELF 的工具,据我所知,它符合规范。Readelf 输出看起来不错,但 objdump 拒绝反汇编任何东西。

我已将输入简化为单个全局变量,并使用“int main(void) { return 0;}”来帮助调试 - 小部分的大小是正确的。

特别是,objdump 似乎无法找到sections 表:

我还有另一个 ELF,由完全相同的对象构建,仅使用常规工具链生成:

即使我从“已知良好”的 kernel.elf 中删除了 .comment 和 .ARM.attributes 部分(以防 objdump 需要它们),它仍然很高兴地列出了那里的部分,但不在我工具的 davidm.elf 中。

我已经用 readelf -x 确认了这两个部分的内容是相同的。

我唯一能想到的是 ELF 文件布局不同并且打破了对 BFD 的一些期望,这可以解释为什么 readelf(和我的工具)可以很好地处理它但 objdump 有问题。

完整的自述:

磁盘布局的激进打包是否会造成麻烦?我是否违反了 BFD 期望的某些字节流对齐限制,记录在案或其他方面?

最后 - 这个文件不打算被映射到地址空间,加载程序会将段数据 memcpy 到所需的位置,因此不需要播放对 mmap 友好的文件对齐技巧。保持 ELF 小更重要。

干杯,大卫M

编辑:我被要求上传文件,和/或提供'objdump -x'。所以我两个都做了: davidm.elf

0 投票
2 回答
7419 浏览

debugging - Objdump/GCC - BFD:矮人错误:错位的行号部分

在尝试使用 objdump 生成汇编代码(与源代码混合)时,

我收到以下错误。

生成的输出程序集不与源代码混合。有人可以澄清这意味着什么吗?有没有什么办法解决这一问题 ?

0 投票
2 回答
340 浏览

assembly - “gcc -S”不同于“objdump -D”

我写了一小段代码并编译它gcc -S以查看 ASM 输出:

现在我希望在 Linux 上调用objdump -D(disassemble) 会导致一个等效的结构,但它看起来像:

为什么我得到mov/sub而不是movl/ subl

0 投票
5 回答
5188 浏览

c - 函数是如何存储在内存中的?

我一直在深入研究 Linux 和 C,我很好奇函数是如何存储在内存中的。我有以下功能:

很简单。当我在具有此功能的可执行文件上运行 objdump 时,我得到以下信息:

这一切看起来都不错。有趣的部分是当我运行以下代码时:

我得到以下信息(这是不正确的):

如果我选择省略 memset(data, 0, sizeof(data)); 行,则最右边的字节是正确的,但其中一些仍然具有前导 1。

有没有人解释为什么

A)使用 memset 清除我的数组会导致函数的不正确(编辑:不准确)表示,并且

解决方案:是由于使用了 memset(data, 0, sizeof(data)),而不是 memset(data, 0, 20 * sizeof(unsigned char))。内存没有完全设置,因为它只查看指针的大小而不是整个数组的大小。

B)这个字节存储在内存中是什么?整数?字符?我不太明白这里发生了什么。(澄清:我将使用什么类型的指针来遍历内存中的此类数据?)

解决方案:我很笨。我忘记了 unsigned 关键字,这就是整个问题的来源:(

任何帮助将不胜感激 - 我在四处搜索时找不到任何东西。

尼尔

PS:我的直接想法是,这是 x86 的指令不以字节或半字节边界结束的结果。但这并没有多大意义,也不应该引起任何问题。

感谢 Will 指出我的 char 类型错误。它应该是无符号字符。但是,我仍然对如何访问单个字节感到好奇。

0 投票
1 回答
3900 浏览

elf - 如何从已编译的 ELF 可执行文件(无反汇编)中提取一些函数?

我正在处理一个大型可执行文件,我没有源代码(长篇大论)。

我想从中提取几个函数的二进制代码——并尝试从我自己的程序中调用它们。如果重要的话,我正在寻找的函数都是从同一个源文件(在 Linux 上使用 gcc)编译的。

我可以使用 objdump 查看函数的二进制代码。有什么方法可以说服该工具转储函数的二进制代码——没有其他任何东西,也不需要反汇编?

基本上,如果定义函数的 C 文件被称为 foo.c,我想要获取 foo.o(我实际上更喜欢 foo.So,但这不会存在于可执行文件中)。可以用 objdump、readelf 或类似的东西来完成吗?

如果重要的话,这些功能是独立的。

谢谢!

0 投票
2 回答
66968 浏览

reverse-engineering - 使用 objdump 反汇编平面二进制文件

我可以使用 objdump 反汇编一个平面二进制文件吗?

我熟悉使用以下方法反汇编结构化二进制可执行文件,例如 ELF 文件:

但是如果我有一个我知道应该加载的平面二进制文件,例如地址 0xabcd1000,我可以要求 objdump 反汇编它吗?我尝试提供诸如 '--start-address=0xabcd1000' 之类的选项,但 objdump 只是声明它无法识别格式。

我对如何反汇编文件有其他想法,但我想知道 objdump 是否可以提供一个简单的解决方案。

0 投票
3 回答
1037 浏览

memory - 关于解码从 ARM 内存转储的数据的问题

现在我从 ARM 机器的内存中转储了一些内容。问题实际上是它们是 ARM 指令,但我不知道如何将这些十六进制数字转换为 ARM 指令。我现在拥有的是“arm-elf-objdump”可以读取.bin文件并反汇编.bin文件中的内容。但我只有与二进制文件不同的十六进制数字文本。我该怎么做这个解码?

例如

实际上“e3a00000”的意思是“mov r0,#0”。应该有一个工具来做到这一点。任何人都可以给我一些建议吗?

0 投票
1 回答
1407 浏览

c - 为什么公共部分变量只显示在目标文件而不是可执行文件中?

我试图更多地了解可执行文件的“公共”部分,我注意到在编译代码时,我可以看到仅在目标文件( )而不是可执行objdump文件上放置在公共代码中的变量。*.o

这是为什么?

构建命令:

objdump显示i在符号表的公共部分:

除非我在可执行文件上运行它:

如果我用标志重建目标文件,它会像在可执行文件上一样-fno-common显示在段中。.bss最终的可执行文件没有这个“COMMON”部分吗?