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

我一直好奇

  1. 究竟这个过程看起来在内存中?
  2. 有哪些不同的段(部分)的呢?
  3. 究竟如何将程序(在磁盘上)(在内存)相关的过程?

我刚才的问题: http://stackoverflow.com/questions/1966920/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 //映射文件,以显示它。 是我们要观察的过程中的PID。 在我们继续之前,我们有一个小问题就在这里。 我们的测试程序运行如此之快,它结束之前,我们甚至可以转储相关的/ proc入口。 我用gdb来解决这个问题。 您可以使用一个技巧,比如插入睡眠()调用返回之前()。

在控制台(或终端仿真器,如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文件格式。

  1. 为获得在Windows中运行的进程的布局(段)的任何工具(S)?
  2. 任何其他好的资源,更多的关于这个问题的学习?

编辑:

有什么好看的文章,显示PE文件的映射sections和弗吉尼亚州segments

--------------解决方案-------------

Sysinternals公司的VMMap也是一个很好的工具,可视化进程的VA空间:

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

运行“!地址”WinDbg中,在运行的过程。 你会看到在这个过程中每个虚拟内存段与一些分类 - 图像,内存映射文件,堆栈,PEB,TEB等。

Windows内部始终是这样的事情一个很好的参考。

下面是记事本的前几个项目:

BaseAddress EndAddress+1 RegionSize Type State Protect Usage
----------------------------------------------------------------------------------------------------------------------
* 0`00000000 0`00be0000 0`00be0000 MEM_FREE PAGE_NOACCESS Free
* 0`00be0000 0`00bf0000 0`00010000 MEM_MAPPED MEM_COMMIT PAGE_READWRITE MemoryMappedFile "PageFile"
* 0`00bf0000 0`00bf7000 0`00007000 MEM_MAPPED MEM_COMMIT PAGE_READONLY MemoryMappedFile "PageFile"
* 0`00bf7000 0`00c00000 0`00009000 MEM_FREE PAGE_NOACCESS Free
* 0`00c00000 0`00c03000 0`00003000 MEM_MAPPED MEM_COMMIT PAGE_READONLY MemoryMappedFile "PageFile"
* 0`00c03000 0`00c10000 0`0000d000 MEM_FREE PAGE_NOACCESS Free
* 0`00c10000 0`00c12000 0`00002000 MEM_MAPPED MEM_COMMIT PAGE_READONLY MemoryMappedFile "PageFile"
* 0`00c12000 0`00c20000 0`0000e000 MEM_FREE PAGE_NOACCESS Free
* 0`00c20000 0`00c21000 0`00001000 MEM_PRIVATE MEM_COMMIT PAGE_READWRITE <unclassified>
* 0`00c21000 0`00c30000 0`0000f000 MEM_FREE PAGE_NOACCESS Free
* 0`00c30000 0`00c97000 0`00067000 MEM_MAPPED MEM_COMMIT PAGE_READONLY MemoryMappedFile "\Device\HarddiskVolume2\Windows\System32\locale.nls"

另一个虚拟内存观众是VMValidator。 内存布局可视化的数据,加上内存页和内存段的数据。

至于PE文件的布局,我推荐这本书的专家。NET 2.0 IL汇编,第4章。它的主要目的是在管理的(.NET)PE文件,而不是本地的,但它确实描述了如何将其​​所有的布局。

然后,如果你想看到一些源代码(C ++),读取PE文件,你应该看看PE文件格式的DLL。 还有一个图形用户界面,展示了如何使用DLL。 为源的许可证是开源的,而不是受限于GPL。

编辑:另一本书的建议是里面的Microsoft Windows 2000(第3版)由大卫所罗门和电子邮件标记Russinovitch(即写的VMMap在一个不同的答案中提到的家伙)。 这本书有从页表布局内存管理权的部分,通过更宏观的内存管理和其他所有关于各种问题做流程,线程和相关的数据结构章节。

对于PE的布局和虚拟地址布局,一个DLL被加载到()的内存区域是在一个段落边界(64K在x86),由VirtualAlloc的分配。 不同的页面(在x86,8K在x64 4K)的内存保护这里面是按照了每个部分在PE文件中描述的设置(只读,读/执行,读/写),等等。因此知道了PE文件格式是有用的,这就是为什么我提到它。

如果您计划与修改DLL或执行仪器,有一个工具,让您可以轻松地查看DLL试验的内容是非常有用的。 因此,链接到PE文件格式的DLL。 它也是一个很好的基础,从你自己的具体要求启动。

分类:视窗 时间:2012-01-01 人气:0
分享到:

相关文章

  • Vista Home Premium操作系统重新安装过程中的软件移植 2015-01-08

    我需要知道如何我安装的程序移动到备份,然后重新安装它们后,我重新安装Vista家庭高级版32位. 我不具有什么重新加载它们关闭源磁盘(在某些情况下,他们分别从供应商直接下载). 有没有办法做到这一点?

  • 窗户简历装载机期间使用按键板的问题 2014-04-19

    你好 我有Windows 7和以某种方式得到了一个窗户的简历装载机问题上来了. 唯一的问题是,我不能使用键盘(没有按键的工作),选择任何选项,所以不能再往前走. 打开和关闭计算机也没有帮助. 1件事,我没有任何的PS / 2端口. --------------解决方案------------- 嗨纳曼, 1.您是否知道之前对这一问题的计算机所做的任何更改? 2.什么是计算机的品牌和型号? 3.什么是键盘的品牌和型号(如果外部)? 4.你有Windows 7安装/维修CD / DVD? 简历装载程

  • 可以在编译器不断生成的代码执行过程中卸载的代码段的部分? 2012-06-22

    除了DLL的概念,它提供了在运行时装载/卸载方式,或功能的能力,我想知道如果一个编译器可能会永远这样说,确定为代码的这一特定部分以代码段相当大的空间,绝不会在程序执行过程中这点后,再次使用时,它会是不错的生成一些代码来卸载代码段的那部分达到程序执行过程中特定的点之后,使整体空间了通过代码段变小. 有什么事情只是虚构的或可能发生的呢? --------------解决方案------------- 编译器可以做任何它想要的,只要不违反标准. 如果可以找出这些代码是永远不会再次调用,它可以完全抛弃它

  • 在Zune软件诺基亚Lumia 900断开连接错误 2013-03-18

    我有一个诺基亚Lumia 900和我一直在尝试同步到Zune,随后所有的"修复"的方向并重新启动一切,它仍然给我一个改正错误. 任何人能解释这是怎么回事? 给我如何解决它的方向? 所有的窗户修复不工作. --------------解决方案------------- 布鲁克的问候! 欢迎到Windows Phone论坛! 能否请您提供错误使用的verbage? 此外,发布您的问题时/有关Windows Phone的问题,请包括以下基本资料. 1.手机制造商(检查!) 2.手机型号(检查

  • 单在DLL的破坏 2012-07-02

    我试图创建一个简单的Win32 DLL. 由于DLL和EXE之间的界面我用C函数,但DLL里面我用C ++单对象. 以下是我的DLL实现的例子: // MyDLLInterface.cpp文件-------------------- #include "stdafx.h" #include <memory> #include "MyDLLInterface.h" class MySingleton { friend class std::auto_ptr

  • “不可能更新到Windows 8.1”错误代码0xC1900101 - 0x4000D 2013-02-02

    您好, 尝试更新到Windows 8.1我收到上述错误之后:"无法更新到Windows 8.1"错误代码0xC1900101 - 0x4000D. 看来的安装,然后将其引导到Windows 8.1中的"应用PC设置"发生后,然后进入黑屏之前的任何更多的OS仍在继续. 这会不会更新任何驱动程序后? 不用说,这是非常令人沮丧,我采取了以下措施: 除了断开连接键盘和鼠标的所有外接USB设备 目前所有的更新驱动程序的安装之前 禁用防病毒 所有Windows更新的更新 更新B

  • 在一个可执行程序的内存布局的详细信息(进程) 2013-02-18

    我参加面试的三星. 他们问很多问题上的程序的内存布局. 我几乎不知道这事. 我GOOGLE了它的"Memory一个可执行程序的布局". "记忆过程的布局". 我很惊讶地看到,没有关于这些主题的很多信息. 大多数的结果是论坛的查询. 我只是想知道为什么? 这些都是一些链接,我发现: 运行时间存贮组织 运行时内存组织 ^ ^ PDF 我想从一个适当的书,而不是一些网页链接了解这一点.(兰迪·海德的也是一本书,但一些其他的书). 在这本书中,我可以找到关于此主题的明确和详

  • 计算机从休眠状态返回后冻结在登录屏幕。 2013-07-30

    原标题:WINDOWS简历加载程序的帮助 我最近有一个诺顿高科技远程删除病毒. 我的电脑即将冬眠出来后冻结在登录屏幕. 我打开电脑,然后再打开,然后将Windows重新加载上来. 我选择删除恢复文件,并着手启动管理器. 电脑开机罚款,但我不想去经历这个过程的每一天. 我打电话给东芝公司,他们走到我通过电脑恢复到出厂默认设置,并重新安装Windows. 我仍然有窗户的简历装载机上来. --------------解决方案------------- 嗨阿什利, 感谢您对微软社区发布您的问题. 从您的

  • retsoring一个Lumia 800的英国变种 2014-08-12

    我使用Mac OSX上的Windows Phone连接器,而不是在Windows机器. 它不是我想要做它的一个还原到以前的点更新. 感谢你在你的帮助. 诺基亚Lumia 800 载体tmobile的英国v227.10 WP7软件7.5 操作系统版本7.10.8773.98 固件175.0805.8773.1220 硬件版本112.1402.2.3 电台版1.7.50.08 无线电硬件版本7.41.0.0 SoC芯片版本0.74.2.1 的Mac OSX 10.6.8 窗户手机连接器最新版本 --

  • 使用键盘使用Windows恢复加载程序问题 2014-12-28

    你好 我有Windows 7和以某种方式得到了一个窗户的简历装载机问题上来了. 唯一的问题是,我不能使用键盘(没有按键的工作),选择任何选项,所以不能再往前走. 打开和关闭计算机也没有帮助. 已经尝试无线和有线键盘,以及拔出所有其他设备美元. --------------解决方案------------- 由于阿贾伊 以上都不是工作. 我thyen去和买了一个PS / 2键盘,并且使我能够选择的"窗口重新加载程序"选项之一. 从那里,这很容易. 嗨nigelian, 1)当您启动计算机

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 0.612 (s). 10 q(s)