我可能在這裏有一個更根本的誤解,所以我會概括一切:有什麼方法可以檢查GDB中的內核空間嗎?
我想更好地瞭解程序如何在內存中佈局。從here開始,我去了,做了一些簡單的程序,把包裹打開了GDB的,看看那裏的東西更實際的意義被解僱:
0x0 - 0x08048000 = ??
0x08048000 = Start .text section
0x08048000 = PLT
0x08048300 = _start
0x08048400 = main
0x08048480 = other functions
0x0804a000 = GOT
0x0804a020 = Start .data section
0x0804a028 = Start .bss section
(random offset)
0x0804b008 = Start heap
...
0xf7?????? = Start memory mapping section
0xf7e50000 = #included library function definitions
0xf7ff0000 = Linux dynamic loader
(random offset)
0xffffd010 = Top of stack (grows negatively)
(random offset)
據我所知,很多這些地址如有變更,但它通過給事物分配數字幫助我想象它。
無論如何,在上面的源給出的下面的圖片,有一個專用的內核空間中的程序地址空間的頂部塊:
但是整體千兆字節被允許用於它!我檢查的程序中堆棧的頂端是0xffffd010,之後爲與內核相關的東西留下了很小的空間。它真的在那裏嗎?它是否增長,將其餘的程序段在虛擬地址空間中靠得更近?更重要的是,我該如何檢查並使用它?
你的第一個猜測是完全正確的。我在使用-m32標誌編譯的64位Ubuntu上運行一個程序。謝謝! – Rstevoa 2014-10-06 16:09:31