Memory 在GDB中打印内存访问
我是gdb的新手。我想打印在c程序执行期间与实际序列一起使用的内存地址。让我们用一个例子来解释我的问题。假设下面的c代码有两个函数main()和test()。我知道,在gdb内部,我可以使用“反汇编main”来反汇编main()函数,或者使用“反汇编test”来分别反汇编test()函数。我的问题是,如何将这两个函数分解为一个代码;因此,我可以看到执行期间使用的所有内存地址及其访问顺序?具体来说,由于main()正在调用test(),test()也在多次调用自身,所以我希望看到类似于示例2的内容。我也在漫游,gdb反汇编程序中显示的地址,它们是虚拟内存地址还是物理内存地址?任何帮助或指导都将不胜感激 例1:Memory 在GDB中打印内存访问,memory,gcc,gdb,trace,Memory,Gcc,Gdb,Trace,我是gdb的新手。我想打印在c程序执行期间与实际序列一起使用的内存地址。让我们用一个例子来解释我的问题。假设下面的c代码有两个函数main()和test()。我知道,在gdb内部,我可以使用“反汇编main”来反汇编main()函数,或者使用“反汇编test”来分别反汇编test()函数。我的问题是,如何将这两个函数分解为一个代码;因此,我可以看到执行期间使用的所有内存地址及其访问顺序?具体来说,由于main()正在调用test(),test()也在多次调用自身,所以我希望看到类似于示例2的内容
#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);
}
#包括“stdio.h”
整数测试(整数q)
{
如果(q真的没有很好的方法可以做到这一点。你只需要一步一步地完成代码:
(gdb) stepi
(gdb) x/i $pc
(gdb) info registers
(gdb) stepi
(gdb) x/i $pc
(gdb) info registers
.....
您可以编写脚本,使其快速执行并将数据转储到文件中,但仅此而已。我想您可能会更幸运地使用valgrind。如果没有现有的工具来执行此操作,则可以添加您自己的工具来报告内存访问(不仅如此),或者更改现有的工具
例如,见
--跟踪内存=[默认值:否]
启用时,Lackey打印程序进行的几乎每次内存访问的大小和地址
(gdb) stepi
(gdb) x/i $pc
(gdb) info registers
(gdb) stepi
(gdb) x/i $pc
(gdb) info registers
.....