问题标签 [binutils]

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

c - 如何从 libopcodes 中获取指令信息?

我正在编写一个在 x86-32 和 x86-64 Linux 中使用libbfdlibopcodes执行反汇编的工具。问题是,虽然我能够让 libopcodes 反汇编,但我无法获得任何指令信息。为了演示的目的,我做了一个最小的例子来重现我的问题。程序应该从入口点反汇编到第一个RET/ RETQ

该代码有点被全局变量破坏,并且为了简洁起见省略了错误检查等,但应该清楚地说明问题。

可以使用以下内容构建此源makefile。要执行成功的链接,binutils-dev需要在本地机器上安装包:

运行时,输出是这样的:

我期望的是能够通过 、 等读取每条指令的指令信息dinfo->insn_typetarget这种行为在 x86-32 和 x86-64 上都有体现。如果我至少可以确认这在这两种架构上没有实现,那么我可以自己填写这些信息。

0 投票
1 回答
1826 浏览

osx-lion - Macports 安装 binutils

我正在尝试通过 macports 在 Lion 上安装 gnu ld。我已经从 macports 安装了 gcc 4.6。但是我需要从二进制文件中创建 elf 二进制文件,我将其作为单独的问题发布在这里

我从 macports 安装了 binutils,似乎一切正常,但最后我确实收到了以下消息:

这里查看binutils 包中应该包含的工具列表, 我很难在 /opt/local/bin 的正常 macports 安装位置找到它们中的任何一个

任何人都知道我做错了什么?

0 投票
2 回答
1783 浏览

gcc - 将 newlib 移植到交叉编译器中

我正在使用本教程创建一个交叉编译器。

我按照 gcc 交叉编译器教程进行了移植 newlib。一切正常,直到我尝试通过发布来编译它

make all install

当我收到以下错误时:

并且编译停止。

我正在使用 Ubuntu 11.10。

我努力了:

  • 使用不同的 gcc、binutils 和 newlib 版本(大约 5 种不同的组合)

  • 安装 Texinfo

  • 更正 makeinfo 路径

我的交叉编译器在没有 newlib 的情况下完美运行,只是它当然不能包含库。

0 投票
1 回答
7463 浏览

elf - 真的需要 ELF .notes 部分吗?

在 Linux 上,我试图将静态链接的 ELF 文件剥离为基本要素。当我运行时:

或者

生成的文件仍然有一个看起来充满时髦字符串的胖 .notes 部分。

.notes 部分是否真的需要,或者我可以用--remove-section 安全地强制它吗?

谢谢你的帮助。

0 投票
2 回答
682 浏览

c - 是否有工具可以获取 ELF .o 或可执行文件中特定符号的信息?

我正在寻找一种方便的方法(用于构建测试脚本)来查询目标文件中的单个符号。是否有工具可以回答问题(最好通过其退出状态)“文件 Y 中是否存在符号 X?” 还是我只需要解析输出nm(1),例如使用 grep 和适当的正则表达式?如果这样的工具可以提供有关符号的详细信息(大小、类型、值......),那就更好了。

0 投票
3 回答
3848 浏览

macos - 似乎无法让 gcc 或 binutils 构建新的链接器或汇编器

我正在尝试建立一个完全最新的 gcc 环境......基本上是 gcc 4.6.3 和 binutils 2.22。不是 Xcode 4.2.1 附带的相当老的 gcc 4.2.1 (llvm)。我的问题不在于编译(至少现在)。我可以完美地同时编译 binutils、gcc 和两者。但是,每次我尝试编译时,我都会发现类似这样的内容出现在配置输出的末尾

检查在哪里找到目标 ar...刚刚编译
检查在哪里找到目标 as...主机工具
检查在哪里找到目标 cc...刚刚编译
检查在哪里找到目标 c++...刚刚编译
检查在哪里为 libstdc++ 找到目标 c++...刚刚编译
检查在哪里找到目标 dlltool...刚刚编译
检查在哪里找到目标 gcc...刚刚编译
检查在哪里找到目标 gcj...刚刚编译
检查在哪里找到目标gfortran...刚刚编译
检查在哪里找到目标gccgo...主机工具
检查在哪里找到目标ld...主机工具
检查在哪里找到目标lipo...主机工具
检查在哪里找到目标 nm...刚刚编译
检查在哪里找到目标 objdump...刚刚编译
检查在哪里找到目标 ranlib...刚刚编译
检查在哪里找到目标条...刚刚编译
检查在哪里找到目标windres...刚刚编译
检查在哪里可以找到目标windmc...刚刚编译

我在 gcc 源文件夹中为 ld、opcodes、bfd、gas、gprof 和 binutils 创建了符号链接,以获取此输出...(如果有帮助)

正如你所看到的,我可以得到大多数软件的“刚刚编译”的版本,只是我不知道如何编译 as 和 ld。我已经阅读了 ld 文件夹(在 binutils 包中)中的 README 文件,它说要执行:

做所有的ld

我做了并且我已经“制作”了源代码,它告诉我没有什么可做的......

我现在唯一能想到的就是暂时修改我的路径以不包含 ld。这会很容易...

又名快速检查

在哪里

无论如何,在想到这一点后,我立即意识到这将是愚蠢的,因为现在我没有任何东西可以链接 gcc(甚至是新版本的 ld(如果我要工作的话))

因此,总而言之,我正在尝试编译 ld 的新副本并作为... 事实:

  • 我正在运行 Mac OS X Lion。
  • 我正在尝试使用 Mac OS X Lion (gcc 4.2.1) 附带的默认 gcc 编译 gcc 4.6.3。
  • 配置脚本似乎认为我不想编译新的链接器和汇编器。
  • 我已经成功构建了一个可以工作的 gcc 和 binutils,但没有新的链接器和汇编器。
  • 我尝试使用 --with-ld=yes 和 --with-gold=no 选项编译 binutilsgcc,它们似乎没有做任何事情。
  • 我使用 gcc v4.2.1 构建了 gmp v5.0.4、mpfr v3.1.0 和 mpc v0.9,并将它们安装在与 gcc 和 binutils 配置中使用的相同前缀中。
  • 对于每个配置,我都明确说明了 gmp、mpfr 和 mpc 的位置。
  • 我与 gcc 分开构建了 gmp、mpfr 和 mpc(这样做会导致一些构建错误)。
  • gcc、binutils、gmp、mpfr 和 mpc 都构建在一个单独的目录中,该目录不是源目录的子目录(按照 gcc 安装说明的建议)。
  • 我正在使用以下选项编译 gcc:
    ../gcc-4.6.3/configure --prefix=$PREFIX --with-gmp=$PREFIX --with-mpfr=$PREFIX --with-mpc=$PREFIX - -enable-checking=release --program-suffix=-4.6.3 --enable-ld=yes --enable-gold=no
  • 我主要遵循本教程
  • 因为我的计算机上没有其他编译器,所以我被迫使用我在这里读到的 mac os x 默认 llvm 编译器(我之前描述为 gcc 4.2.1)不起作用,但是我没有 gcc-4.2在我的电脑上。
  • 使用我刚刚编译的新版本 gcc (gcc-4.6.3) 编译 gcc-4.7.0(最近的快照)会导致编译器错误(我设置了环境变量 CC 和 CXX)。
  • 我尝试先编译 gcc,而不是 binutils,反之,最终我决定用 binutils 构建 gcc 是可行的方法。您上面的输出是同时编译的
  • 我阅读了关于黄金的这篇小文章,并尝试添加--enable-gold--enable-ld。他们什么都没改变
  • 我做事的顺序:
    1. 编译 gmp。
    2. 安装它。
    3. 编译mpfr。
    4. 安装它。
    5. 编译mpc。
    6. 安装它。
    7. 为 ld、gas、binutils、opcodes、gprof、bfd 建立到 gcc src 主目录的符号链接。
    8. 配置 gcc。
    9. 找到那个“状态报告”。
    10. 考虑另一种可能构建 ld 和 as 的方法。
    11. 失败了。
    12. 继续堆栈溢出。

正如“fazo”所说,我并没有真正告诉任何人我是如何编译 binutils 的......所以在这里......

我尝试首先编译 gcc,而不是使用 gcc 构建 binutils,编译得很好,但没有 ld、as 甚至是 gold。然后我尝试使用 llvm 编译器构建 binutils 然后 gcc。它也工作得很好,但仍然没有 ld、as 或 gold。最后,我在这里读到我可以对 binutils 中的某些项目进行符号链接,而 gcc 会检测并构建它们……我做到了。并且 gcc 找到了其中的大部分(如前所述,我将符号链接放在 gcc 目录中的 ld、操作码、bfd、gas、gprof 和 binutils)我这里的实际问题是告诉配置脚本编译一个新的汇编器和链接器。此外,让我感到困惑的是,在 binutils README 文件夹中,它说仅 ./configure make make install 将构建和安装所有工具,我试图弄清楚为什么不是这种情况。

最后的命令是:../binutils-2.22/configure --prefix=$PREFIX --with-gmp=$PREFIX --with-mpfr=$PREFIX --with-mpc=$PREFIX --program-后缀=-4.6.3 --enable-ld --with-gnu-as --with-gnu-ld

但我仍然没有 ld 也没有汽油。

任何帮助是极大的赞赏!(如果你想要一些我没有提供的信息,请问)

谢谢... :)

0 投票
1 回答
2718 浏览

c-preprocessor - 如何使用 autoconf 为#define 指定一个值?

我正在尝试通过定义宏SYSV386_COMPAT 0来改变它生成一些 FPU 操作码的方式来构建具有解锁行为的 Gnu binutils。

我可以轻松地进入头文件并手动设置值,但我将如何调用配置脚本以#define SYSV386_COMPAT 0在命令行上指定等效项?如果可能的话,我宁愿在命令行上指定一些东西(只是因为该功能是可传递的,我认为我不应该破解源代码)。话虽如此,我已经尝试阅读至少一些 FM,但没有AC_DEFINE(SYSV386_COMPAT, 0)在其中一个binutils/configure.inor中插入一个运气gas/configure.in

0 投票
2 回答
5262 浏览

c - 即使我使用的是初始化 RAM,为什么 arm-none-eabi-size 报告 .data 部分为 0?

我对使用工具链(Yagarto 和 codesourcery)大小实用程序时得到的结果感到有些困惑。它报告我在数据部分中使用了 0 个字节。见下文

我知道我的代码正在使用静态 RAM 变量并将其初始化为 0 以外的值。

有趣的是,当我直接通过大小工具时,一些正在链接的目标文件我看到 .data 部分被报告

例子:

为什么当生成它的目标文件报告非零值时,elf 文件会为 .data 部分报告 0?

仅供参考,我正在为 AT91SAM7x256 Micro 开发嵌入式软件

编辑:

添加 CFLAGS 和 LDFLAGS

编辑#2:从对象转储中,我们可以清楚地看到 .data 部分分配了数据,但由于某种原因,size 实用程序没有拾取它 objdump 链接

我所寻找的只是准确地使用我的 RAM 我并不是想弄清楚我的一个变量是否被优化了。

编辑 3:更多信息显示 size 实用程序确实在 .data 部分中看到了一些东西

0 投票
1 回答
319 浏览

ruby - Ruby grep 二进制文件?

到目前为止我一直在使用这个

有没有更“像红宝石”的东西?

0 投票
8 回答
77986 浏览

linux - 如何列出非本机二进制文件的库依赖项?

在为本机平台开发时,我可以使用 ldd 列出所有共享库(.so 文件),我构建的二进制可执行文件将在启动时尝试加载。但是在交叉编译时,我不知道如何获得相同的信息。这ldd不是一个普通的 binutils 实用程序,如stripor ar,可以与gcc交叉编译一起构建,而是一个神秘的 shell 脚本,显然只能在本机平台上运行。

那么,使用跨目标 binutils 工具,有没有办法获取外部二进制文件的动态链接依赖项列表?