问题标签 [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.
gcc - 将 Binutils 从 2.16.1 升级到 2.19 有优势吗?为什么?
在 PSPSDK (Homebrew) 中,我们使用 Binutils 2.16.1 来组装和链接 PlayStation Portable 的代码,但是该版本已经过时了(3 个版本已取代它)。社区和我一直在将 GCC 和 newlib 更新到最新的稳定版本,一切似乎都可以使用旧的 binutils。
GCC 会用 binutils 2.19 生成更好的代码吗?为什么?binutils 2.19 会产生比 2.16.1 更好的 elf 文件和库吗?为什么?
assembly - 是否可以将 MIPS 寄存器名称与 GAS(GNU 汇编器)一起使用?
如果我使用寄存器名称,我会得到:
如果我使用注册号($8
而不是$t0
和$0
而不是$zero
)它可以工作。(我使用的是 binutils 2.17)。
gcc - 试图不操作指令
是否可以使用 GNU 工具(gcc、binutils 等)将所有出现的汇编指令修改为无操作?具体来说,带有 -pg 选项的 gcc 会生成以下程序集 (ARM):
我想记录最后一条指令的地址,然后将其更改为 nop,如下面的代码所示
Linux 内核可以在运行时执行与此类似的操作,但我正在寻找构建时解决方案。
gcc - 帮助链接器失败:.gnu.linkonce.t
我在使用 gcc 3.2.3 与 binutils 2.18 链接共享库时遇到问题。当我尝试链接库时,出现以下错误:
.gnu.linkonce.t_...在.rodata节中引用:在丢弃的.gnu.linkonce.t节中定义...
我已经对此进行了大量的谷歌搜索,大多数地方似乎表明这是在 binutils 2.17 中引入的回归,后来在 2.18.50 中修复,但我很好奇是否有人知道是否有任何特定的解决方法来解决这个问题不得不接触 binutils 和 gcc。
谢谢。
macos - 如何在 mac os x 10.6 上安装 gnu ld?
我在我的 macbook pro(使用 mac os x 10.6)上编译其他出色的Contiki OS时遇到了很多麻烦。Contiki 实际上使用了 GCC、AR、LD 等许多 GNU 特定的特性和选项。所以我通过 macports 安装了这些实用程序,但看起来“port install binutils”没有安装 GNU ld,是吗?
所以,问题是,我如何在我的 mac 上获得 GNU ld ?有没有简单的替代方法(即wget, configure, make, make install
方法)?
gcc - 一起编译 binutils 和 gcc 的配方?
根据gcc 构建说明,您可以在构建 gcc(以及 gmp、mpc 等)的同时构建 binutils。
这是该页面的内容:
如果您还打算构建 binutils(升级现有安装或用于代替操作系统的相应工具),请将 binutils 分发包解压缩到同一目录或单独的目录中。在后一种情况下,将符号链接添加到您打算与编译器一起构建的 binutils 的任何组件(bfd、binutils、gas、gprof、ld、opcodes ......)到包含 GCC 源代码的目录。
同样,GMP、MPFR 和 MPC 库可以与 GCC 一起自动构建。在包含 GCC 源的目录中解压缩 GMP、MPFR 和/或 MPC 源分发,并将它们的目录分别重命名为 gmp、mpfr 和 mpc(或使用具有相同名称的符号链接)。
这适用于 gmp、mpc、mpfr,但我似乎无法让它构建所有的 binutils。我也不知道如何让它从 binutils 构建新的黄金链接器。有问题的版本是 gcc-4.4.2 和 binutils-2.20。
一步一步的指导会很棒(对我和其他遇到这个问题的人来说)。
linux - solaris elfedit:linux 有类似的东西吗?(共享库编辑器)?
Linux:有没有办法编辑已编译的共享库?
具体来说,我正在搜索如何DT_SYMBOLIC flag
在已编译的二进制共享库上添加?
这就是我问这个的原因:
我们的应用程序由
- 我们自己的库(静态libXXX.a)
- 一些第 3 方库(仅二进制共享库 libYYY.so)
到目前为止,该应用程序一切正常。
现在我用共享库版本 (libXXX.so)替换了我们自己的静态* libXXX.a 库。
一切编译和链接都很好。
但是,当我现在运行应用程序时,它会启动并执行大量预期的处理 - 然后它在中途某处崩溃。gdb 回溯显示崩溃发生在某些第 3 方共享库中。
我在 SOF 上四处搜索,发现这里有一篇有趣的文章。
我指的提示是
尽管我怀疑它是否真的有帮助,但我认为它可能值得一试。
有什么想法可以DT_SYMBOLIC flag
在已编译/链接的共享库上添加吗?
环境:debian lenny 64bit,带有 g++ v4.2.4 和 binutils v20。
编辑:在 solaris 上有一个名为elfedit
. linux有类似的东西吗?
gcc - ELF 共享库:重定位偏移超出范围
有一个软件包elfutils
,其中包含一个名为eu-elflint
检查 ELF 二进制文件的程序(就像lint
C 一样——因此得名)。
出于好奇,我用这个工具检查了我们自己的共享库,发现了很多问题,例如:
作为交叉检查,我从下面的源代码构建了一个非常简单的共享库
并再次尝试...
正如您所看到的,即使是微不足道的示例也显示出很多问题。
顺便说一句:我在 Ubuntu-Karmic-32bit 上使用 gcc v4.4.1
顺便说一句:......在 Debian-Lenny-64bit 和 gcc v4.2.4 上也会发生同样的情况
这是我应该关心的事情吗?
global-variables - 如何从目标文件中获取全局变量的初始化值?
如果您有一个目标文件,您如何获得该目标文件数据段中全局变量的初始化值?例如,假设我做了以下事情:
这告诉我foo
在大小为 4 的数据段中的偏移量 0x48 处,但是我如何获得它在加载时获得的实际初始化值?
strip - 如何使用 only-keep-debug 反转 objcopy 的条带?
在现代 linux 中,几乎所有对象都被剥离并分成两部分(两个文件)。首先是可执行文件本身,其次是调试符号,从原始 ELF 中剥离出来。这样的文件是用
如何将调试信息合并binary
到binary.dbg
ELF 文件中?我想重新创建未剥离的原始二进制文件。它不能逐字节地等于原来的,但它必须有一个调试符号在里面。
PS 是的,我知道gnu.debuglink
部分,但它不适用于某些调试器(etnus)和反汇编器(objdump 无法恢复符号信息)