Assembly GNU汇编程序中的本地标签;gdb打印回溯,就像标签是函数一样

Assembly GNU汇编程序中的本地标签;gdb打印回溯,就像标签是函数一样,assembly,gdb,debug-symbols,gnu-assembler,backtrace,Assembly,Gdb,Debug Symbols,Gnu Assembler,Backtrace,两段示例代码;首先,一些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, st

两段示例代码;首先,一些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
在筛选了[edit a older copy of]GNU assembler文档之后,我尝试了以
L
为前缀的标签和以
$
为后缀的标签,以查看它是否会阻止标签被导出,但它不起作用

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

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

我找到了答案;引用该文件:

本地符号是以某些本地标签前缀开头的任何符号。默认情况下 对于ELF系统,本地标签前缀为“.L”,对于传统a.out系统,本地标签前缀为“L”,但每个目标 可能有自己的一组本地标签前缀

果然,我一把
.L
放在上面,它就起作用了

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

我找到了答案;引用该文件:

本地符号是以某些本地标签前缀开头的任何符号。默认情况下 对于ELF系统,本地标签前缀为“.L”,对于传统a.out系统,本地标签前缀为“L”,但每个目标 可能有自己的一组本地标签前缀

果然,我一把
.L
放在上面,它就起作用了


.L
标签在对象文件中不显示为符号。

本地标签应以
.L
开头(
点L
)。例如,
.Llabel1
有效。本地标签应以
.L
开头(
点L
)。例如,
.Llabel1
起作用。我问是否有办法打破这些本地标签:我问是否有办法打破这些本地标签: