标签: binutils

将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文件和库吗?为什么?

gcc pspsdk cross-compiling binutils

4
推荐指数
1
解决办法
453
查看次数

gnu ld/gdb:单独的调试文件.如果有太多的调试信息需要链接,如何生成调试文件?

现在有gdbbinutils要调试从二进制分离调试信息的支持.可以在以下位置找到描述此内容的文档:

经过一些实验,我能够gdb使用build-id和debug-link方法获得(7.6)查找调试信息.这里有两个gdb片段,分别使用build-id和debug-link方法显示调试器在非标准位置查找调试信息:

(gdb)  set debug-file-directory .
(gdb) file uWithBuildId
Reading symbols from /home/peeterj/build-id/uWithBuildId...Reading symbols from /home/peeterj/build-id/.build-id/2d/41caac1bcbeb65255abc3f35624cf9ed37791a.debug...done.


Reading symbols from /home/peeterj/build-id/uWithDebugLink...Reading symbols from /home/peeterj/build-id/uWithDebugLink.debug...done.
Run Code Online (Sandbox Code Playgroud)

要创建我用的调试信息的文件objcopystrip.我在下面列出了这些命令的详细信息以供参考.

但是,我正在考虑这个问题的原因是希望能够构建我们所有的产品代码-g.目前,如果我们尝试,这会破坏调试器,因为我们的shared-lib太大而且重定位被截断以适合以下消息:

/usr/lib64/gcc/x86_64-suse-linux/4.1.2/../../../../lib64/crtn.o:(.debug_aranges+0x6):     relocation truncated to fit: R_X86_64_32 against `.debug_info'
Run Code Online (Sandbox Code Playgroud)

(以及随后的链接失败)

有没有人知道如何做到以下之一:

  1. 生成一个独立文件,其中包含有助于二进制文件的所有调试信息(即ld生成二进制文件的命令中最终的.o和.a ).
  2. 或者,指示ld链接而不在二进制本身中包含此调试信息,并生成可以使用build-id或debug-link标识的独立调试文件?我没有在文档中看到任何单一传递方法来执行此操作ld,但ld文档很大,也许我错过了它.
  3. 处理上面的截断错误的一些方法(这样的方法将允许build-id或debug-link方法工作).

sample命令为可执行文件生成单独的调试文件

这是使用--build-id--add-gnu-debuglink方法的示例命令行序列:

g++ -g   -c -o …
Run Code Online (Sandbox Code Playgroud)

debugging gdb binutils

4
推荐指数
1
解决办法
5623
查看次数

如何设置2字节的wchar_t输出?

GCC默认使用4字节的wchar_t.我可以设置选项wchar_t,在每个wchar_t中获取2个字节-fshort-wchar.但是当我将编译器选项设置为我的源文件时,我得到了着名的警告消息

foo.o使用2字节的wchar_t但输出是使用4字节的wchar_t; 跨对象使用wchar_t值可能会失败

因为我真的想要2字节的wchar_t,我也希望输出使用这个变种.是否有任何链接器选项告诉它我想要什么?

编辑

此警告不会禁止链接器生成有效输出.但是,数十个虚假警告涵盖了其他信息.

gcc ld binutils eabi

4
推荐指数
1
解决办法
1万
查看次数

我的C代码如何在运行时找到与地址对应的符号(在Linux中)?

给定函数或变量运行时地址,我的代码需要找出名称,如果是变量,则键入符号的信息.或至少提供足够的信息,以便以后离线提取名称(和类型信息).

这是Linux代码,假设调试信息可用.

我试着研究ELF文件格式,binutils以及除了主题之外的所有内容都是巨大的,所以我希望有人可以帮我缩小范围.

我可以看到以下类型的解决方案:

  • 找到当前加载到内存中的模块的代码/数据段的范围 - 怎么做?将地址的模块和段名称和偏移量保存在其段中.离线然后使用binutils在模块的调试信息中找到符号 - 再次,如何做?

  • 使用一些我不知道的API /系统服务在运行时找到符号和信息 - 如何?

先感谢您.

c linux elf debug-symbols binutils

4
推荐指数
2
解决办法
2234
查看次数

ld中-Bstatic标志的各种表示

ld(来自binutils)的manpage ,有关于-Bstatic标志的变化的这个部分:

-Bstatic
-dn
-non_shared
-static
不要链接共享库.这仅对支持共享库的平台有意义. 此选项的不同变体是为了与各种系统兼容. 您可以在命令行上多次使用此选项:它会影响库搜索后面的-l选项.此选项也意味着--unresolved-symbols=report-all.此选项可与-shared一起使用.这样做意味着正在创建共享库,但必须通过从静态库中提取条目来解析所有库的外部引用.

我的问题是粗体句:这些变体试图与哪些系统兼容?我已经看过两个-Bstatic-static各个项目,但到目前为止还没有看到任何人使用剩下的两个变种.为了获得最大的兼容性(在跨平台方面),哪一个最好使用?

linker binutils

4
推荐指数
1
解决办法
3870
查看次数

如何查看 ELF 文件的 GNU 调试链接值?

所以我可以像这样添加一个指向调试符号文件的链接objcopy --add-gnu-debuglink=$name.dbg $name,但是我以后如何再次检索该值?

我检查readelf -a并grepped\.dbg没有任何运气。同样,我检查了 with objdump -sj .gnu_debuglink( .gnu_debuglinkis the section) 并且可以看到那里的值:

$ objdump -sj .gnu_debuglink helloworld|grep \.dbg
0000 68656c6c 6f776f72 6c642e64 62670000  helloworld.dbg..
Run Code Online (Sandbox Code Playgroud)

但是,是否有一个命令允许我再次提取检索确切值(即helloworld.dbg在上面的示例中)?这是文件名...

我意识到我可以在这里使用一些 shell foo,但似乎很奇怪存在一个选项来设置这个值,但没有一个选项来检索它。所以我可能只是错过了。

binutils

4
推荐指数
1
解决办法
1570
查看次数

在 macOS 上检查 ELF 文件并获取二进制文件

我有一个 ELF 文件,我想从中获取我的代码的hex或文件。bin在终端中,如果 a do a file main,这是我的文件,它会显示:

main: ELF 32-bit LSB executable, UCB RISC-V, version 1 (SYSV), statically linked, not stripped
Run Code Online (Sandbox Code Playgroud)

据我所知,objdump在 macOS 上不起作用,并且otool -l main出现以下错误:

llvm-objdump: 'main': Object is not a Mach-O file type.
Run Code Online (Sandbox Code Playgroud)

ELF 文件是使用以下命令创建的:

riscv-none-gcc/8.2.0-2.1-20190425-1021/bin/riscv-none-embed-gcc --specs=nosys.specs main.c -o main
Run Code Online (Sandbox Code Playgroud)

那么有没有办法做到呢?

多谢

binary macos elf otool binutils

4
推荐指数
1
解决办法
6989
查看次数

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

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

c linux elf binutils

3
推荐指数
1
解决办法
247
查看次数

我已经在osx 10.11中安装了binutils,但是objdump仍然无法正常工作

我已经努力将带有HomeBrew的binutil安装到osx 10.11上,最终成功,但是objdump仍然无效.终端给出的响应如下:

MacBook-Pro:~ Mars$ brew install binutils
==> Downloading https://homebrew.bintray.com/bottles/binutils-2.26.el_capitan.bo
Already downloaded: /Library/Caches/Homebrew/binutils-2.26.el_capitan.bottle.tar.gz
==> Pouring binutils-2.26.el_capitan.bottle.tar.gz
  /usr/local/Cellar/binutils/2.26: 109 files, 140.3M
MacBook-Pro:~ Mars$ objdump
-bash: objdump: command not found
Run Code Online (Sandbox Code Playgroud)

有人可以帮忙吗?

homebrew binutils osx-elcapitan

3
推荐指数
2
解决办法
3420
查看次数

如何确定架构以构建 GCC 交叉编译器?

我正在尝试在 Linux 上设置一个构建服务器,我将用它来构建适用于 Windows 和 Mac 的 C/C++ 应用程序。我知道 GCC 支持多种不同的体系结构,但我不知道如何确定构建 GCC 交叉编译器所需的目标。

有人可以向我解释一下吗?

提前致谢。

PS 我知道预编译的解决方案已经存在,但我只想通过深入了解来详细了解这一点。

c++ gcc gnu cross-compiling binutils

3
推荐指数
1
解决办法
722
查看次数

标签 统计

binutils ×10

elf ×3

gcc ×3

c ×2

cross-compiling ×2

linux ×2

binary ×1

c++ ×1

debug-symbols ×1

debugging ×1

eabi ×1

gdb ×1

gnu ×1

homebrew ×1

ld ×1

linker ×1

macos ×1

osx-elcapitan ×1

otool ×1

pspsdk ×1