gpt4 book ai didi

assembly - GNU 汇编器中的本地标签; gdb 打印回溯,就好像标签是函数一样

转载 作者:行者123 更新时间:2023-12-02 21:47:13 25 4
gpt4 key购买 nike

两段示例代码;首先是一些调用汇编的 C++ 代码:

/* test1.cc */
#include <stdio.h>

extern "C" void blah();
extern "C" void stuff() {
printf( "This is a test\n" );
}

int main( int argc, char *argv[] ) {
blah();

return 0;
}

...然后是程序集:

.file "test2.s"
.text
.globl blah, stuff
.type blah,@function
.type stuff,@function
.align 16

blah:
/* normal function preamble */
pushl %ebp
movl %esp, %ebp

label1:
call stuff

leave
retn

构建:

as -g --32 test2.s -o test2.o
clang++ -m32 -g test1.cc -c
clang++ -m32 -g test*.o -o test

在gdb下运行它,在stuff()上设置断点,然后查看回溯:

gdb test
(gdb) break stuff
(gdb) run
(gdb) back
#0 stuff () at test1.cc:5
---> #1 0x08048458 in label1 () at test2.s:12
---> #2 0xffffc998 in ?? ()
#3 0x0804843e in main (argc=1, argv=0xffffca44) at test1.cc:9

在筛选[编辑旧版本的]GNU 汇编器文档后,我尝试使用以 L 为前缀并以 $ 为后缀的标签来看看它是否会阻止标签导出,但它不起作用。

如果我将标签设置为数字,则回溯看起来很正常,但我不太喜欢使用数字标签的概念。

有人能给我指出正确的方向吗?

最佳答案

我找到了答案in the GNU assembler manual ;引用该文档:

A local symbol is any symbol beginning with certain local label prefixes. By default, the local label prefix is ‘.L’ for ELF systems or ‘L’ for traditional a.out systems, but each target may have its own set of local label prefixes.

果然,只要我把 .L 放在那里,它就起作用了。

.L 标签不会在目标文件中显示为符号。

关于assembly - GNU 汇编器中的本地标签; gdb 打印回溯,就好像标签是函数一样,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26065107/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com