我是 gdb 的新手。我想打印在执行 ac 程序期间与实际序列一起使用的内存地址。让我们用一个例子来解释我的问题。假设我们有以下带有两个函数 main() 和 test() 的 c 代码。我知道,在gdb里面,我可以使用“disassemble main”来反汇编main()函数,或者“disassemble test”来分别反汇编test()函数。我的问题是,如何将这两个函数分解为一个代码;这样,我就可以看到执行期间使用的所有内存地址及其访问顺序?具体来说,由于 main() 正在调用 test() 并且 test() 也在多次调用自身,所以我想看到类似示例 2 的内容。我也在徘徊,gdb 反汇编程序中显示的地址,它们是虚拟内存地址还是物理内存地址?任何帮助或指导将不胜感激。
示例 1:
#include "stdio.h"
int test(int q)
{
if(q<16)
test(q+5);
return q;
}
void main()
{
unsigned int a=5;
unsigned int b=5;
unsigned int c=5;
test(a);
}
示例 2:
<Memory Address> <assembly instruction> <c instructions>
0x12546a mov //for unsigned int a=5;
0x12546b mov //for unsigned int b=5;
0x12546c mov //for unsigned int c=5;
0x12546d jmp //for test(q=a=5);
0x12546e cmpl //for if(q<16)
0x12546f jmp //for test(q+5);
0x12546d jmp //for test(q=10);
0x12546e cmpl //for if(q<16)
0x12546f jmp //for test(q+5);
0x12547a jmp //for test(q=15);
0x12547b cmpl //for if(q<16)
0x12547c jmp //for test(q+5);
0x12547d jmp //for test(q=20);
0x12547e cmpl //for if(q<16)
0x12547f jmp //return q);
0x12548a jmp //return q);
0x12548b jmp //return q);
0x12548c jmp //return q);