cla*_*aws 2 windows linker operating-system process loader
我一直很好奇
我之前的问题:关于可执行程序的内存布局的更多信息(进程)
在我的追求中,我终于找到了答案.我发现这篇优秀文章清除了我的大部分疑问: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文件格式.
编辑:
是否有任何好的文章显示PE文件sections
和VA 之间的映射segments
?
Sysinternals VMMap也是一个可视化过程VA空间的出色工具:
VMMap截图http://i.technet.microsoft.com/dd535533.vmmapScreen(en-us,MSDN.10).jpg