How to make local labels in GNU GAS ELF output that GDB can break on but not count as functions?

柔情痞子 提交于 2019-12-02 02:30:43

I'm not sure if this fits your needs, but you can do this (for a non-PIE binary, so link with -no-pie):

.text
.global _start
_start:
    /* exit */
    mov $60, %rax
.Lmylabel:
    mov $0, %rdi
    syscall
    .section .rodata
mylabel:
    .long .Lmylabel

Then, you can set a breakpoint using break *mylabel (note the *):

(gdb) break *mylabel
Breakpoint 2 at 0x401007: file t.S, line 7.

Since mylabel is more or less a function pointer, GDB does not know anything about it and will ignore it:

Breakpoint 1, _start () at t.S:5
5       mov $60, %rax
(gdb) si
7       mov $0, %rdi

With a linker script, it should be possible to put the mylabel symbol into a section which is not loaded, to reduce run-time overhead.

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!