问题标签 [object-files]

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 回答
3967 浏览

c - 反汇编 Microsoft Visual Studio 2003 编译器输出

我从 Microsoft Visual Studio 2003 工具输出的目标文件中看到了我认为奇怪的行为。该file实用程序告诉我:

对于汇编程序创建的对象,但对于来自 C 文件的对象,我得到的只是:

使用 Microsoft 的dumpbin实用程序和objdump我从 cygwin 获得的工具,我可以反汇编程序集构建的文件,但是对于 C 构建的文件,我从这两个实用程序都没有得到有用的结果。

我有几个与此差异相关的问题:

  1. MSVC2003 编译器生成的目标文件格式是什么?
  2. 如何反汇编该目标文件?

我对使用 AT&T 语法进行反汇编特别感兴趣 - 我正在移植一个大型源代码库以使其与 GCC 一起工作,我想将此方法用作一些内联汇编例程的快捷方式项目。

编辑:添加更多信息。

当我dumpbin在其中一个文件上运行时,没有结果:

随着objdump,它给出:

在从程序集构建的文件上,我得到了合理的结果。

再次编辑:添加命令行信息。

汇编文件是使用类似于以下内容的命令行构建的:

ml自行执行时说:

C 文件是使用以下命令构建的:

有一些-Iand-D选项传递给ml和 to cl,但为了简洁起见,我在这里省略了它们。此处描述了这些cl选项。

0 投票
3 回答
2782 浏览

c - Doubts in executable and relocatable object file

I have written a simple Hello World program.

I wanted to understand how the relocatable object file and executable file look like. The object file corresponding to the main function is

Here the function call for printf is callq 13. One thing i don't understand is why is it 13. That means call the function at adresss 13, right??. 13 has the next instruction, right?? Please explain me what does this mean??

The executable code corresponding to main is

Here it is callq 4003c0. But the binary instruction is e8 e1 fe ff ff. There is nothing that corresponds to 4003c0. What is that i am getting wrong?

Thanks. Bala

0 投票
2 回答
37735 浏览

c++ - 将 .o 文件转换为 .exe

是否可以将从 .c 源代码创建的目标文件 .o 转换为 .exe?如果可能的话,是否有使用 gcc 的直接命令?

0 投票
2 回答
58614 浏览

gcc - 将两个 GCC 编译的 .o 目标文件合并到第三个 .o 文件中

如何将两个 GCC 编译的 .o 目标文件合并到第三个 .o 文件中?

如果您有权访问源文件,-combineGCC 标志将在编译之前合并源文件:

然而,这只适用于源文件,并且 GCC 不接受.o文件作为该命令的输入。

通常,链接.o文件无法正常工作,因为您不能将链接器的输出用作它的输入。结果是一个共享库,并且没有静态链接到生成的可执行文件中。

0 投票
5 回答
479 浏览

c++ - 在理解 C++ 程序的编译方面需要帮助

我没有正确理解 C++ 程序的编译和链接。有没有办法,我可以查看通过编译 C++ 程序(以可理解的格式)生成的目标文件。这应该有助于我理解目标文件的格式、如何编译 C++ 类、编译器需要哪些信息来生成目标文件并帮助我理解以下语句:

如果一个类只用作输入参数和返回类型,我们不需要包含整个类头文件。前向声明就足够了,但是如果派生类从基类派生,我们需要包含包含基类定义的文件(取自“Exceptional C++”)。

我正在阅读“链接和加载”一书以了解目标文件的格式,但我更喜欢专门为 C++ 源代码量身定制的东西。

谢谢,

贾格拉蒂

编辑:

我知道使用 nm 我可以查看目标文件中存在的符号,但我有兴趣了解有关目标文件的更多信息。

0 投票
4 回答
164 浏览

c++ - 自动选择目标文件进行编译

我最近开始为 C++ 项目编写单元测试(使用GoogleTest )。构建主项目相当简单:我使用 GCC-MM-MD标志为我的目标文件自动生成依赖项,然后将所有目标文件链接在一起以输出可执行文件。没有惊喜。

但是当我正在编写单元测试时,有没有办法让 make 或 GCC 找出编译每个测试需要哪些目标文件?现在,我有一个相当幼稚的解决方案(如果你可以这样称呼它),它为每个单元测试编译所有可用的目标文件,这显然是浪费(在时间和空间方面)。有没有办法(使用 make、gcc、sed 或其他任何方法)以类似于为原始源文件生成依赖项的方式来判断给定单元测试需要哪些目标文件?

0 投票
2 回答
16298 浏览

qt - 使用 Qt/qmake 时如何将生成的文件(例如目标文件)放入单独的文件夹中?

我有一个使用 qmake 的 Qt 项目。为了提高清晰度和可读性,我想保留

  • 源文件
  • 构建系统
  • 生成的文件(例如目标文件)

分离。

所以我的第一步是将源文件放入 src/ 子目录:

这样,我将源文件与构建系统 (*.pro) 分开。但是,当我随后运行时qmakemake生成的文件(目标文件等)被放置到主项目文件夹中:

好吧,至少它们没有被放入src/文件夹中,但是我如何指定它们被放入另一个子文件夹中,例如build/

(顺便说一句,我不在乎目标二进制文件myproject放在哪里,但我想它应该直接放在项目文件夹而不是放在build/.)

0 投票
1 回答
454 浏览

assembly - 目标文件的结构

我在链接我的程序集时遇到了一些问题。我使用 NASM 进行组装,然后将其与 ld 链接。一个小问题是 GLOBAL 指令仅在我定义 .data 部分时才有效。我相信它背后有一些合理的东西,但对于导出符号来说这仍然很重要吗?(我决定使用 coff ,因为这是与带有 -c 选项的 g++ 最相似的格式)。主要问题是,即使在我设法链接它之后,调用也会导致某个地址并且该函数不存在。感谢您的阅读时间,如果您有一些建议或关键字,我应该在谷歌上搜索有关链接和符号的信息,那将非常棒。

0 投票
5 回答
73477 浏览

c++ - 静态库的内容

我有一个静态库,比如说mystaticlib.a. 我想看看它的内容,比如里面有多少个目标文件。

我怎样才能在 gcc 上做到这一点?

0 投票
1 回答
722 浏览

debugging - 如何读取 C++ CLI .obj 文件(单个文件的编译结果)

我在 Visual Studio 2010 的 C++ CLI 项目中有一个小的(<300 行)C++ 文件。我制作了一些宏,它们根据调试/发布配置执行不同的操作。

我希望能够查看生成的 .obj 文件(当我在 Debug 和 Release 中编译时)并能够比较两者。困难的部分是文件是二进制的,我不明白它们的格式。

我确信还有其他方法可以确保宏不具有破坏性 - 例如,在运行时在两种模式下都尝试一下,但这会耗费更多时间。另外,了解这些 .obj 中的内容会很酷。

谢谢,如果您有任何问题,请告诉我。