我想了解程序集代碼如何佈局到內存空間。我寫了一個簡單的彙編代碼,其中只包含幾行指令和.data部分。當我用GDB檢查它時,我看到更多的東西超出了數據部分,這是我用objdump -section-header命令看不到的東西。以下是gdb的輸出。Assembly中的.data部分是什麼東西?
(gdb) x/100x &data
0x804909c <data>: 0x03020100 0x07060504 0x0b0a0908 0x050e0d0c
0x80490ac <other>: 0x00000000 0x6d79732e 0x00626174 0x7274732e
0x80490bc: 0x00626174 0x7368732e 0x61747274 0x742e0062
0x80490cc: 0x00747865 0x7461642e 0x00000061 0x00000000
0x80490dc: 0x00000000 0x00000000 0x00000000 0x00000000
0x80490ec: 0x00000000 0x00000000 0x00000000 0x00000000
0x80490fc: 0x00000000 0x0000001b 0x00000001 0x00000006
0x804910c: 0x08048074 0x00000074 0x00000027 0x00000000
0x804911c: 0x00000000 0x00000004 0x00000000 0x00000021
.data段的結尾是0x80490af,但你可以看到有更多的東西超出了.data段,我不知道任何責任。他們究竟是什麼?他們只是垃圾或其他東西?如果我嘗試訪問超出.data部分的內存,會發生什麼情況?
鏈接器映射文件怎麼樣?它會告訴你什麼是.data部分,例如從啓動代碼等變量。 –
我可以用objdump或類似工具驗證嗎? – REALFREE
也許你需要調試信息。您必須知道數據段中變量的名稱才能知道它們是什麼。 –