《如何访问一个进程的内存空间.docVIP

  1. 1、本文档共5页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
《如何访问一个进程的内存空间

访问一个进程的内存空间 引言 每个进程都有各自互不干涉的进程地址空间。在WIN32中,每个应用程序都可“看见”4GB的线性地址空间,其中最开始的4MB和最后的2GB由操作系统保留,剩下不足2GB的空间用于应用程序私有空间。具体分配如下:0xFFFFFFFF-0xC0000000的1GB用于VxD、存储器管理和文件系统; 0xBFFFFFFF-01GB用于共享的WIN32 DLL、存储器映射文件和共享存储区; 0x7FFFFFFF-0每个进程的WIN32专用地址; 0x003FFFFF-0MS-DOS 和 WIN16应用程序; 0x00000FFF-0防止使用空指针的4,096字节。 以上都是指逻辑地址,也就是虚拟内存。 在WIN32中每页大小为4,096字节。通过使用硬件地址映射和页表,WIN32可使虚拟内存即有好的性能而且还提供保护。操作系统为每个进程提供独立的从逻辑地址到物理地址的映射,使每个进程的地址空间对另一个进程完全不可见。WIN32中也提供了一些访问进程内存空间的函数,但使用时要谨慎,一不小心就有可能破坏被访问的进程。 2.提出问题 2.1如何了解windows环境下内存的使用情况。 2.2怎么使用win32下API函数编写系统程序。 3.解决方案 ReadProcessMemory 读另一个进程的内存,原形如下: BOOL ReadProcessMemory( ??? HANDLE hProcess,???????? // 被读取进程的句柄; LPCVOID lpBaseAddress,????? // 读的起始地址; LPVOID lpBuffer,???????? // 存放读取数据缓冲区; DWORD nSize,???????? // 一次读取的字节数; ? LPDWORD lpNumberOfBytesRead // 实际读取的字节数; ? ); hProcess 进程句柄可由OpenProcess 函数得到,原形如下: ? HANDLE OpenProcess( ??? DWORD dwDesiredAccess, // 访问标志; ??? BOOL bInheritHandle,?? // 继承标志; ??? DWORD dwProcessId????? // 进程ID; ? ); 用完后使用 CloseHandle 关闭打开的句柄。 读另一个进程的内存 dwDesiredAccess 须指定为 PROCESS_VM_READ , 写另一个进程的内存 dwDesiredAccess 须指定为 PROCESS_VM_WRITE , 继承标志无所谓,进程ID可由 Process32First 和 Process32Next 得到,这两个函数可以枚举出所有开启的进程,这样进程的信息也就得到了。Process32First 和 Process32Next是由 TLHelp32 单元提供的,需在 uses 里加上TLHelp32。ToolsHelp32 封装了一些访问堆、线程、进程等的函数,只适用于Win9x,原形如下: ? BOOL WINAPI Process32First( ??? HANDLE hSnapshot????? // 由 CreateToolhelp32Snapshot 返回的系统快照句柄; ??? LPPROCESSENTRY32 lppe // 指向一个 PROCESSENTRY32 结构; ? ); ? BOOL WINAPI Process32Next( ??? HANDLE hSnapshot????? // 由 CreateToolhelp32Snapshot 返回的系统快照句柄; ??? LPPROCESSENTRY32 lppe // 指向一个 PROCESSENTRY32 结构; ? ); hSnapshot 由 CreateToolhelp32Snapshot 返回的系统快照句柄; CreateToolhelp32Snapshot 原形如下: ? HANDLE WINAPI CreateToolhelp32Snapshot( ??? DWORD dwFlags,????? // 快照标志; ??? DWORD th32ProcessID // 进程ID; ? ); 现在需要的是进程的信息,所以将 dwFlags 指定为 TH32CS_SNAPPROCESS, th32ProcessID 忽略;PROCESSENTRY32 结构如下: ? typedef struct tagPROCESSENTRY32 { ??? DWORD dwSize;???????????? // 结构大小;

文档评论(0)

34shart09 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档