问题标签 [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.
c - 如何从 libopcodes 中获取指令信息?
我正在编写一个在 x86-32 和 x86-64 Linux 中使用libbfd
和libopcodes
执行反汇编的工具。问题是,虽然我能够让 libopcodes 反汇编,但我无法获得任何指令信息。为了演示的目的,我做了一个最小的例子来重现我的问题。程序应该从入口点反汇编到第一个RET
/ RETQ
。
该代码有点被全局变量破坏,并且为了简洁起见省略了错误检查等,但应该清楚地说明问题。
可以使用以下内容构建此源makefile
。要执行成功的链接,binutils-dev
需要在本地机器上安装包:
运行时,输出是这样的:
我期望的是能够通过 、 等读取每条指令的指令信息dinfo->insn_type
。target
这种行为在 x86-32 和 x86-64 上都有体现。如果我至少可以确认这在这两种架构上没有实现,那么我可以自己填写这些信息。
elf - 真的需要 ELF .notes 部分吗?
在 Linux 上,我试图将静态链接的 ELF 文件剥离为基本要素。当我运行时:
或者
生成的文件仍然有一个看起来充满时髦字符串的胖 .notes 部分。
.notes 部分是否真的需要,或者我可以用--remove-section 安全地强制它吗?
谢谢你的帮助。
c - 是否有工具可以获取 ELF .o 或可执行文件中特定符号的信息?
我正在寻找一种方便的方法(用于构建测试脚本)来查询目标文件中的单个符号。是否有工具可以回答问题(最好通过其退出状态)“文件 Y 中是否存在符号 X?” 还是我只需要解析输出nm(1)
,例如使用 grep 和适当的正则表达式?如果这样的工具可以提供有关符号的详细信息(大小、类型、值......),那就更好了。
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 选项编译 binutils和gcc,它们似乎没有做任何事情。
- 我使用 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。他们什么都没改变
-
我做事的顺序:
- 编译 gmp。
- 安装它。
- 编译mpfr。
- 安装它。
- 编译mpc。
- 安装它。
- 为 ld、gas、binutils、opcodes、gprof、bfd 建立到 gcc src 主目录的符号链接。
- 配置 gcc。
- 找到那个“状态报告”。
- 考虑另一种可能构建 ld 和 as 的方法。
- 失败了。
- 继续堆栈溢出。
正如“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 也没有汽油。
任何帮助是极大的赞赏!(如果你想要一些我没有提供的信息,请问)
谢谢... :)
c-preprocessor - 如何使用 autoconf 为#define 指定一个值?
我正在尝试通过定义宏SYSV386_COMPAT 0
来改变它生成一些 FPU 操作码的方式来构建具有解锁行为的 Gnu binutils。
我可以轻松地进入头文件并手动设置值,但我将如何调用配置脚本以#define SYSV386_COMPAT 0
在命令行上指定等效项?如果可能的话,我宁愿在命令行上指定一些东西(只是因为该功能是可传递的,我认为我不应该破解源代码)。话虽如此,我已经尝试阅读至少一些 FM,但没有AC_DEFINE(SYSV386_COMPAT, 0)
在其中一个binutils/configure.in
or中插入一个运气gas/configure.in
。
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 部分中看到了一些东西
ruby - Ruby grep 二进制文件?
到目前为止我一直在使用这个
有没有更“像红宝石”的东西?
linux - 如何列出非本机二进制文件的库依赖项?
在为本机平台开发时,我可以使用 ldd 列出所有共享库(.so 文件),我构建的二进制可执行文件将在启动时尝试加载。但是在交叉编译时,我不知道如何获得相同的信息。这ldd
不是一个普通的 binutils 实用程序,如strip
or ar
,可以与gcc
交叉编译一起构建,而是一个神秘的 shell 脚本,显然只能在本机平台上运行。
那么,使用跨目标 binutils 工具,有没有办法获取外部二进制文件的动态链接依赖项列表?