- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在开发一个项目,我们的验证测试脚本需要在正在测试的软件版本中定位符号地址。这可用于设置断点或从内存中读取静态数据。我想要创建一个包含符号名称、内存中基地址和大小的映射文件。我们的构建输出一个 ELF 文件,其中包含我想要的信息。我一直在尝试使用 readelf、nm 和 objdump 工具来尝试获取我需要的符号地址。
我最初尝试了readelf -s file.elf
,它似乎访问了一些符号,特别是那些用汇编程序编写的符号。然而,我想要的许多符号并不在那里——特别是那些源 self 们的 Ada 代码的符号。
我使用readelf --debug-dump file.elf
转储所有调试信息。从那里我确实看到了所有符号,包括 Ada 代码中的符号。不过格式好像是DWARF格式。有谁知道为什么当我要求 readelf 列出符号信息时这些符号不会被 readelf 输出?也许我只是缺少一个选项。
现在我可以不厌其烦地编写一个自定义的 DWARF 解析器来获取信息,但如果我可以使用 Binutils(nm、readelf、objdump)之一来获取它,那么我真的更喜欢标准解决方案。
最佳答案
DWARF是调试信息,试图反射(reflect)原始源代码的关系。以下面代码为例
static int one() {
// something
return 1;
}
int main(int ac, char **av) {
return one();
}
使用gcc -O3 -g
编译后,静态函数one
将内联到main
中。因此,当您使用readelf -s
时,您将永远不会看到符号one
。但是,当您使用 readelf --debug-dump
时,您可以看到 one
是一个内联函数。
因此,在这个示例中,编译器不会禁止您使用 -g
进行优化,因此您仍然可以调试可执行文件。在该示例中,即使函数被优化和内联,gdb 仍然可以使用 DWARF 信息从内联函数内的当前代码块中了解函数和源代码/行。
以上只是编译器优化的一个案例。可能有很多原因可能导致 readelf -s
和 DWARF 之间的符号地址不匹配。
关于elf - 使用 binutils/readelf 确定符号地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30925557/
我正在关注一个网站 ( http://wiki.osdev.org/GCC_Cross-Compiler ) 来学习如何为不同的架构交叉编译一些代码。因此,第一步是为特定目标下载和编译 Binutil
按照本网站的说明进行操作:http://llvm.org/docs/GoldPlugin.html 从命令: ../binutils/configure --enable-gold --enable-
当我命令“make”时,我收到如下错误: /usr/bin/ld: ../../../lib//liblmi.a(LMInterface.o): unrecognized relocation (0x
我正在尝试按照发现here的说明安装交叉编译器。我正在使用64位版本的Ubuntu 13.10。输入命令配置binutils后,我将得到: Configuring for a x86_64-unkno
我正在尝试从头开始构建 Linux,现在我在 chapter 5.4 ,它告诉我如何构建 Binutils。我有 binutils 2.20 的源代码,但是当我尝试构建它时: time { ./bin
我正在尝试创建尽可能小的 ELF。我创建了一个这样的测试文件(NASM 语法): SECTION .text dd 0xdeadbeef 使用此链接描述文件: SECTIONS { .text
我正在将现有系统从 Windows 移植到 Linux。构建由多个静态库构成。我遇到了链接错误,在 libB 的对象中找不到符号(在 libA 中定义)。链接器行看起来像 g++ test_obj.o
我需要在我的项目中包含一个二进制程序。我使用 objcopy 从二进制文件创建对象文件。目标文件可以在我的程序中链接。 objcopy 创建适当的符号来访问二进制数据。 例子 objcopy -I b
我正在尝试构建 binutils 2.21 源代码并启用调试。我的主要目标是实际调试 objdump。但为了构建它,我想我必须构建整个包。 不幸的是,配置文件上没有调试选项。在配置 CFLAGS 之前
我正在尝试在 Cygwin 环境中安装 binutils。 我的路径一团糟(例如,一行配置的输出是: "checking for ld... (cached) c:/dev/perl/c/bin/..
我有一个由某人编译的 binutils 版本。我需要使用相同的选项重新编译一个新的 binutils。 我知道 gcc -v 打印出配置选项。那么也许有什么方法可以读取 binutils 的构建选项?
看说明书,objdump和 nm具有重叠特征。 你什么时候使用每一个?每个命令的最初目的是什么? 最佳答案 它们没有类似的参数。nm列出文件符号,而 objdump可以显示很多关于文件的不同信息。 o
LLVM 编译器工具链有一个与普通 gcc 兼容的 gcc。使用 llvm-gcc 的优点是可以访问任意目标,这意味着当您尝试编译为随机架构时,正常的 gcc 会说没有这样的目标,比如 mips-ap
我正在开发一个项目,我们的验证测试脚本需要在正在测试的软件版本中定位符号地址。这可用于设置断点或从内存中读取静态数据。我想要创建一个包含符号名称、内存中基地址和大小的映射文件。我们的构建输出一个 EL
我正在尝试通过 macports 在 Lion 上安装 gnu ld。我已经从 macports 安装了 gcc 4.6。但是我需要创建 elf 二进制形式的二进制文件,我将其作为单独的问题发布 he
我在脚本中使用 stat 两次,一次是为了查找文件权限,一次是为了查找文件的大小。 `stat -c %A "$directory/$file"` `stat -c %s "$directory/
TLDR:在 gcc 的跨 native 构建中出现 fatal error “无法获得处理时间”。我可以从 gcc.c 中删除 report_times 代码还是使用 gcc 命令行选项禁用 rep
我正在致力于优化单个 C 目标文件的占用空间。我使用编译器 arm-elf-gcc,因为目标平台适用于 ARM-926EJ 处理器。 我想记录当前大小,然后在优化后进行比较,我想知道为什么arm-el
当我运行 make binutils/readelf 时,出现以下错误: In file included from readelf.c:43:0: sysdep.h:23:25: fatal err
我正在编写一个脚本,使 uClibc 可用于现有的以 glibc 为目标的 gcc/binutils 工具链,而我留下的一个问题是 pthread_cancel 需要 dlopen libgcc_s.
我是一名优秀的程序员,十分优秀!