當我在做「學習C硬路」的例子時,我心想:如何在內存hexdump中找到變量的地址?
我設置int a = 10;但是實際上這個值是10呢?我可以在程序運行時從外部手動訪問它嗎?
這裏是爲了演示一個小的C代碼片段:
int main (int argc, char const* argv[]) {
int a = 10;
int b = 5;
int c = a + b;
return 0;
}
我打開了The GNU Project Debugger(GDB),並進入:
break main
run
next 2
從我的理解0x7fff5bffb04是內存地址的int c
。然後我用hexdump -C/dev/mem系統調用將整個內存轉儲到終端。
現在的問題是我在哪裏尋找變量c在這個巨大的十六進制轉儲?我的希望是,鑑於地址0x7fff5bffb04
我可以找到它的價值,這是15
。另外,獎勵問題,hexdump -C中的每一列代表什麼? (我知道,最後一列是ASCII表示)
的'0x7f的...'地址是虛擬的。除非您知道虛擬 - >物理映射,否則不能使用它來查找物理內存轉儲中的內容。 (第一列是「地址」(自文件開始以來的字節數),最後是ascii表示,中間是數據。) – Mat
@Mat:謝謝。我可以打印物理內存地址,還是可以用十六進制轉儲虛擬內存而不是物理內存?什麼是可能的解決方案? –
爲什麼你將'argv'定義爲'char const * []'? – oldrinb