我是gdb的新手。我想在c程序的執行過程中打印與實際序列一起使用的內存地址。我們用一個例子來解釋我的問題。假設我們有以下兩個函數main()和test()。我知道,在gdb裏面,我可以使用「反彙編main」來反彙編main()函數,或者「反彙編測試」來分別反彙編test()函數。我的問題是,如何將這兩個函數作爲單個代碼進行反彙編;因此,我可以看到執行期間使用的所有內存地址及其訪問順序?具體來說,main()調用test()並且test()也會多次調用自己,所以我希望看到類似於示例2的內容。我也在漫遊,gdb反彙編中顯示的地址是虛擬還是物理內存地址?任何幫助或指導將不勝感激。在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);