【发布时间】:2019-08-09 03:24:38
【问题描述】:
当使用 GNU GAS 手动编写程序集时,我想在一个函数中设置一个标签:
- GDB 不会将该标签视为函数名
- 我可以使用
b mylabel打破标签
nasm 的类似问题已在 Break at local label using GDB for NASM assembly 提出,但我想在这里更准确地说,我需要 GNU GAS 和 ELF 输出。
例如如果我定义了一个普通标签mylabel,如下所示:
main.S
.text
.global _start
_start:
/* exit */
mov $60, %rax
mylabel:
mov $0, %rdi
syscall
这并不让我满意,因为当 GDB 到达 mov $0, %rdi 时,bt 将 mylabel 显示为函数名称,而我希望它改为 _start。特别是,这可能会破坏回溯,因为 GDB 找不到堆栈帧:How gdb reconstructs stacktrace for C++?
但是,如果我将 mylabel 替换为 .Lmylabel,如下所述:Local labels in GNU assembler; gdb printing backtrace as though labels are functions 则 _start 是所需的函数名称,但 b .Lmylabel 失败。 nm 也根本不显示符号。
ELF / DWARF 格式是否支持任何可以使用的东西,有没有办法通过 GNU GAS 来公开它?
在 Ubuntu 18.10、GDB 8.2、GNU GAS 2.31.1 中测试。
【问题讨论】:
标签: gdb elf gnu-assembler dwarf