用于了解Windows中正在运行的进程的布局(段)的任何工具?

cla*_*aws 2 windows linker operating-system process loader

我一直很好奇

  1. 过程在内存中的确切程度如何?
  2. 它中有哪些不同的部分(部分)?
  3. 程序(在磁盘上)和进程(在内存中)究竟是如何相关的?

我之前的问题:关于可执行程序的内存布局的更多信息(进程)

在我的追求中,我终于找到了答案.我发现这篇优秀文章清除了我的大部分疑问:http://www.linuxforums.org/articles/understanding-elf-using-readelf-and-objdump_125.html

在上面的文章中,作者展示了如何获取进程的不同部分(LINUX)并将其与相应的ELF文件进行比较.我在这里引用这一节:

很有可能看到流程细分的真实布局?我们可以使用/ proc // maps文件来显示它.是我们想要观察的过程的PID.在我们继续之前,我们在这里遇到一个小问题.我们的测试程序运行得如此之快,以至于我们甚至可以转储相关的/ proc条目.我用gdb来解决这个问题.您可以使用另一个技巧,例如在调用return()之前插入sleep().

在控制台(或xterm等终端模拟器)中执行:

$ gdb test
(gdb) b main
Breakpoint 1 at 0x8048376
(gdb) r
Breakpoint 1, 0x08048376 in main ()
Run Code Online (Sandbox Code Playgroud)

按住这里,打开另一个控制台,找出程序"测试"的PID.如果您想要快速方式,请键入:

$ cat /proc/`pgrep test`/maps
Run Code Online (Sandbox Code Playgroud)

你会看到如下的输出(你可能得到不同的输出):

[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
Run Code Online (Sandbox Code Playgroud)

注意:我在每行添加数字作为参考.

回到gdb,输入:

(gdb)q

因此,总的来说,我们看到12段(也称为虚拟内存区 - VMA).

但我想了解Windows Process和PE文件格式.

  1. 用于获取Windows中正在运行的进程的布局(段)的任何工具?
  2. 还有什么其他好的资源来学习这个主题吗?

编辑:

是否有任何好的文章显示PE文件sections和VA 之间的映射segments

Ana*_*tts 5

Sysinternals VMMap也是一个可视化过程VA空间的出色工具:

VMMap截图http://i.technet.microsoft.com/dd535533.vmmapScreen(en-us,MSDN.10).jpg