Linux 回溯时我们如何确定有多少个参数?

Linux 回溯时我们如何确定有多少个参数?,linux,gcc,operating-system,Linux,Gcc,Operating System,我已经知道调用过程如上所述,并且希望编写一些代码来回溯调用的函数。保存的%ebp链没有问题 但是我怎么能仅仅从这个调用链中知道参数及其编号呢? 我发现gdb做得很好,它打印出如下内容: > #4 0xf0100069 in test_backtrace (x=3) at kern/init.c:16 > #5 0xf0100069 in test_backtrace (x=4) at kern/init.c:16 > #6 0xf0100069 in test_backt

我已经知道调用过程如上所述,并且希望编写一些代码来回溯调用的函数。保存的%ebp链没有问题

但是我怎么能仅仅从这个调用链中知道参数及其编号呢?
我发现gdb做得很好,它打印出如下内容:

> #4  0xf0100069 in test_backtrace (x=3) at kern/init.c:16
> #5  0xf0100069 in test_backtrace (x=4) at kern/init.c:16
> #6  0xf0100069 in test_backtrace (x=5) at kern/init.c:16
> #7  0xf01000ea in i386_init () at kern/init.c:39
这意味着它确切地知道每个函数参数是什么。它是如何做到这一点的


许多TK。

GDB是一个符号调试器。它知道只有在使用调试符号构建代码时才能这样做,因为它是通过查看C中的函数原型来完成的。尝试在没有调试符号的情况下编译代码(在CFLAGS中丢失了-g),您将看到gdb突然失去了这样做的能力