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

问题描述 投票:5回答:1

两个示例代码;首先将一些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为前缀并以$为后缀的标签,以查看是否可以防止标签被导出,但是没有不起作用。如果我将标签设为数字,则回溯看起来很正常,但是我不太喜欢使用数字标签的概念。

有人可以指出正确的方向吗?

两个示例代码;首先,一些C ++代码调用程序集:/ * test1.cc * / #include

extern“ C” void blah(); extern“ C” void stuff(){printf(“这是一个测试\ n”); } ...

assembly gdb debug-symbols gas backtrace
1个回答
6
投票
我找到了答案in the GNU assembler manual;引用该文档:
© www.soinside.com 2019 - 2024. All rights reserved.