我一直很好奇用於瞭解Windows中正在運行的進程的佈局(段)的任何工具?
- 過程如何在內存中查找?
- 它有哪些不同的細分(部分)?
- 程序(在磁盤上)&進程(在內存中)究竟有什麼關係?
我剛纔的問題:more info on Memory layout of an executable program (process)
在我的追求,我終於找到了答案。我發現,清除了絕大部分我查詢的這個優秀的文章:http://www.linuxforums.org/articles/understanding-elf-using-readelf-and-objdump_125.html
在上面的文章中,作者展示瞭如何獲取進程(LINUX)的不同區段&他與其對應的ELF文件進行比較。我在此處引用此部分:
Courious看到 過程段的真實佈局?我們可以使用 /proc // maps文件來揭示它。 是我們 想要觀察的過程的PID。在我們繼續前,我們 這裏有一個小問題。我們的測試 程序運行速度非常快,以至於在我們甚至可以轉儲相關的 /proc條目之前它會結束 。我使用gdb來解決這個問題。 在調用 return()之前,您可以使用另一個技巧,如 插入sleep()。
在一個控制檯(或終端仿真 如xterm)做:
$ gdb test
(gdb) b main
Breakpoint 1 at 0x8048376
(gdb) r
Breakpoint 1, 0x08048376 in main()
就在這裏舉行,打開另一個控制檯 並找出程序 「測試」 的PID。如果你想快速的方法, 類型:
$ cat /proc/`pgrep test`/maps
你會看到類似下面的輸出(你 可能會得到不同的輸出):
[1] 0039d000-003b2000 r-xp 00000000 16:41 1080084 /lib/ld-2.3.3.so
[2] 003b2000-003b3000 r--p 00014000 16:41 1080084 /lib/ld-2.3.3.so
[3] 003b3000-003b4000 rw-p 00015000 16:41 1080084 /lib/ld-2.3.3.so
[4] 003b6000-004cb000 r-xp 00000000 16:41 1080085 /lib/tls/libc-2.3.3.so
[5] 004cb000-004cd000 r--p 00115000 16:41 1080085 /lib/tls/libc-2.3.3.so
[6] 004cd000-004cf000 rw-p 00117000 16:41 1080085 /lib/tls/libc-2.3.3.so
[7] 004cf000-004d1000 rw-p 004cf000 00:00 0
[8] 08048000-08049000 r-xp 00000000 16:06 66970 /tmp/test
[9] 08049000-0804a000 rw-p 00000000 16:06 66970 /tmp/test
[10] b7fec000-b7fed000 rw-p b7fec000 00:00 0
[11] bffeb000-c0000000 rw-p bffeb000 00:00 0
[12] ffffe000-fffff000 ---p 00000000 00:00 0
注意:我在每行添加數字作爲參考。
回到GDB,類型:
(GDB)問
所以,在總,我們看到12段(也稱爲虛擬內存區域 - VMA)。
但我想知道關於Windows進程&的PE文件格式。
- 任何用於獲取Windows中運行進程的佈局(段)的工具?
- 其他有關此主題的更多優秀資源?
編輯:
有什麼好看的文章,顯示PE文件sections
& VA segments
之間的映射?
謝謝保羅,這比我預期的要多。我絕對喜歡它。 – claws 2010-01-26 04:15:04
是否有任何好的文章,你知道哪些文件顯示我在PE文件片段和VA片段之間進行映射? – claws 2010-01-26 04:15:20