Assembly GNU汇编程序中的本地标签;gdb打印回溯,就像标签是函数一样
两段示例代码;首先,一些C++代码调用到汇编: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
/* 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
起作用。我问是否有办法打破这些本地标签:我问是否有办法打破这些本地标签: