如何访问修改其他php 守护进程 实例的内存内容,求实例

& & 1. ORACLE实例的进程结构和内存结构 1) 进程结构 进程是操作系统中的一种机制,它可执行一系列的操作步。在有些操作系统中使用作业(JOB)或任务(TASK)的术语。一个进程通常有它自己的专用存储区。ORACLE进程的体系结构设计使 性能 最大。 ORACLE实例……
声明:该文章系网友上传分享,此内容仅代表网友个人经验或观点,不代表本网站立场和观点;若未进行原创声明,则表明该文章系转载自互联网;若该文章内容涉嫌侵权,请及时向
论文写作技巧
上一篇:下一篇:
相关经验教程2009年1月 C++ Builder大版内专家分月排行榜第一2008年12月 Delphi大版内专家分月排行榜第一2008年11月 Delphi大版内专家分月排行榜第一2008年10月 Delphi大版内专家分月排行榜第一2008年6月 Delphi大版内专家分月排行榜第一2008年1月 Delphi大版内专家分月排行榜第一2005年7月 C++ Builder大版内专家分月排行榜第一
2009年1月 Delphi大版内专家分月排行榜第二2008年12月 C++ Builder大版内专家分月排行榜第二2008年7月 Delphi大版内专家分月排行榜第二2005年7月 Delphi大版内专家分月排行榜第二
2009年1月 C++ Builder大版内专家分月排行榜第一2008年12月 Delphi大版内专家分月排行榜第一2008年11月 Delphi大版内专家分月排行榜第一2008年10月 Delphi大版内专家分月排行榜第一2008年6月 Delphi大版内专家分月排行榜第一2008年1月 Delphi大版内专家分月排行榜第一2005年7月 C++ Builder大版内专家分月排行榜第一
2009年1月 Delphi大版内专家分月排行榜第二2008年12月 C++ Builder大版内专家分月排行榜第二2008年7月 Delphi大版内专家分月排行榜第二2005年7月 Delphi大版内专家分月排行榜第二
2007年6月 总版技术专家分月排行榜第三
2007年6月 VC/MFC大版内专家分月排行榜第一
2005年4月 Delphi大版内专家分月排行榜第三
本帖子已过去太久远了,不再提供回复功能。如何访问一个进程的内存空间_Delphi教程_
如何访问一个进程的内存空间
来源:人气:8396
&& 在WIN32中,每个应用程序都可“看见”4GB的线性地址空间,其中最开始的4MB和最后的2GB由保留,剩下不足2GB的空间用于应用程序私有空间。具体分配如下:0xFFFFFFFF-0xCGB用于VxD、存储器管理和文件系统;0xBFFFFFFF-0xGB用于共享的WIN32 DLL、存储器映射文件和共享存储区;0x7FFFFFFF-0x为每个进程的WIN32专用地址;0x003FFFFF-0x为MS-DOS 和 WIN16应用程序;0x00000FFF-0x为防止使用空指针的4,096字节。以上都是指逻辑地址,也就是虚拟内存。&&& 虚拟内存通常是由固定大小的块来实现的,在WIN32中这些块称为“页”,每页大小为4,096字节。在Intel CPU结构中,通过在一个控制寄存器中设置一位来启用。启用分页时CPU并不能直接访问内存,对每个地址要经过一个映射进程,通过一系列称作“页表”的查找表把虚拟内存地址映射成实际内存地址。通过使用硬件地址映射和页表WIN32可使虚拟内存即有好的性能而且还提供保护。利用处理器的页映射能力,操作系统为每个进程提供独立的从逻辑地址到物理地址的映射,使每个进程的地址空间对另一个进程完全不可见。WIN32中也提供了一些访问进程内存空间的函数,但使用时要谨慎,一不小心就有可能破坏被访问的进程。本文介绍如何读另一个进程的内存,写内存与之相似,完善一下你也可以做个 FPE 之类的内存修改工具。好吧,先准备好编程利器Delphi 和 参考手册 MSDN ,开始了!& ReadocessMemory 读另一个进程的内存,原形如下:&&& BOOL ReadProcessMemory(&&& HANDLE hProcess,&&&&&&&& // 被读取进程的句柄;&&& LPCVOID lpBaseAddress,&&&&& // 读的起始地址;&&& LPVOID lpBuffer,&&&&&&&& // 存放读取数据缓冲区;&&& D nSize,&&&&&&&& // 一次读取的字节数;&&& LPDWORD lpNumberOfBytesRead // 实际读取的字节数;& );hProcess 进程句柄可由OpenProcess 函数得到,原形如下:& HANDLE OpenProcess(&&& DWORD dwDesired, // 访问标志;&&& 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 dwS&&&&&&&&&&&& // 结构大小;&&& DWORD cntU&&&&&&&&&& // 此进程的引用计数;&&& DWORD th32ProcessID;&&&&& // 进程ID;&&& DWORD th32DefaultHeapID;& // 进程默认堆ID;&&& DWORD th32ModuleID;&&&&&& // 进程模块ID;&&& DWORD cntT&&&&&&&& // 此进程开启的线程计数;&&& DWORD th32ParentProcessID;// 父进程ID;&&& LONG& pcPriClassB&&&& // 线程优先权;&&& DWORD dwF&&&&&&&&&&& // 保留; &&& char szExeFile[MAX_PATH]; // 进程全名;& } PROCESSENTRY32;至此,所用到的主要函数已介绍完,实现读内存只要从下到上依次调用上述函数即可,具体参见原代码:
procedure TForm1.Button1Click(Sender: TObject);var& FSnapshotHandle:TH& FProcessEntry32:TProcessEntry32;& Ret : BOOL;& ProcessID :& ProcessHndle : TH& lpBuffer:pB& nSize: DWORD;& lpNumberOfBytesRead: DWORD;& i:& s:begin& FSnapshotHandle:=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);&&& //创建系统快照& FProcessEntry32.dwSize:=Sizeof(FProcessEntry32);&&& //先初始化 FProcessEntry32 的大小& Ret:=Process32First(FSnapshotHandle,FProcessEntry32);& while Ret do& begin&&& s:=ExtractFileName(FProcessEntry32.szExeFile);&&& if s='KERNEL32.DLL' then&&& begin&&&&& ProcessID:=FProcessEntry32.th32ProcessID;&&&&& s:=';&&&&&&&&&&& Ret:=Process32Next(FSnapshotHandle,FProcessEntry32);&&& //循环枚举出系统开启的所有进程,找出“Kernel32.dll”& CloseHandle(FSnapshotHandle);& Memo1.Lines.C& memo1.lines.add('Process ID '+IntToHex(FProcessEntry32.th32ProcessID,8));& memo1.lines.Add('File name '+FProcessEntry32.szExeFile);&&& ////输出进程的一些信息 & nSize:=4;& lpBuffer:=AllocMem(nSize);& ProcessHndle:=OpenProcess(PROCESS_VM_READ,false,ProcessID);& memo1.Lines.Add ('Process Handle '+intTohex(ProcessHndle,8));& for i:=$ to $0080005f do& begin&&& ReadProcessMemory(&&&&&&&&&&&&&&&&&&&& ProcessHndle,&&&&&&&&&&&&&&&&&&&& Pointer(i),&&&&&&&&&&&&&&&&&&&& lpBuffer,&&&&&&&&&&&&&&&&&&&& nSize,&&&&&&&&&&&&&&&&&&&& lpNumberOfBytesRead&&&&&&&&&&&&&&&&&&&& );&&& s:=s+intTohex(lpBuffer^,2)+' ';&&&&& //读取内容&&& if (i mod 16) =0 then&&& begin&&&&& Memo1.Lines.Add(s);&&&&& s:=';&&&&&&&& //格式化输出&& FreeMem(lpBuffer,nSize);& CloseHandle(ProcessHndle);&& //关闭句柄,释放内存以上程序在 Delphi4 中文Win98 下调试通过。
优质网站模板如何访问一个进程的内存空间_delphi教程-虚拟主机资讯|虚拟主机动态
产品服务快速通道
----------------
==域名注册==
英文域名注册
中文域名注册
==网站推广==
==虚拟主机==
----------------
双线路虚拟主机
基本型虚拟主机
商用型虚拟主机
论坛型虚拟主机
功能型虚拟主机
Vip合租虚拟主机
虚拟主机性能对比
虚拟主机免费试用
机房速度测试
----------------
==租用托管==
服务器租用
----------------
==企业邮局==
购买企业邮局
----------------
==付款方式==
----------------
==联系我们==
您当前位置:->-> ->
如何访问一个进程的内存空间_delphi教程
作者:网友供稿
  西部数码-全国虚拟主机10强!20余项管理功能,全国领先!第6代双线路虚拟主机,南北访问畅通无阻!可在线rar解压,自动数据恢复设置虚拟目录等.免费赠送访问统计,企业邮局.Cn域名注册10元/年,480元起,免费试用7天,满意再付款!P4主机租用799元/月.月付免压金!
文章页数:&
&& 在WIN32中,每个应用程序都可“看见”4GB的线性地址空间,其中最开始的4MB和最后的2GB由操作系统保留,剩下不足2GB的空间用于应用程序私有空间。具体分配如下:0xFFFFFFFF-0xCGB用于VxD、存储器管理和文件系统;0xBFFFFFFF-0xGB用于共享的WIN32 DLL、存储器映射文件和共享存储区;0x7FFFFFFF-0x为每个进程的WIN32专用地址;0x003FFFFF-0x为MS-DOS 和 WIN16应用程序;0x00000FFF-0x为防止使用空指针的4,096字节。以上都是指逻辑地址,也就是虚拟内存。&&& 虚拟内存通常是由固定大小的块来实现的,在WIN32中这些块称为“页”,每页大小为4,096字节。在Intel CPU结构中,通过在一个控制寄存器中设置一位来启用分页。启用分页时CPU并不能直接访问内存,对每个地址要经过一个映射进程,通过一系列称作“页表”的查找表把虚拟内存地址映射成实际内存地址。通过使用硬件地址映射和页表WIN32可使虚拟内存即有好的性能而且还提供保护。利用处理器的页映射能力,操作系统为每个进程提供独立的从逻辑地址到物理地址的映射,使每个进程的地址空间对另一个进程完全不可见。WIN32中也提供了一些访问进程内存空间的函数,但使用时要谨慎,一不小心就有可能破坏被访问的进程。本文介绍如何读另一个进程的内存,写内存与之相似,完善一下你也可以做个 FPE 之类的内存修改工具。好吧,先准备好编程利器Delphi 和 参考手册 MSDN ,开始了!& 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 dwS&&&&&&&&&&&& // 结构大小;&&& DWORD cntU&&&&&&&&&& // 此进程的引用计数;&&& DWORD th32ProcessID;&&&&& // 进程ID;&&& DWORD th32DefaultHeapID;& // 进程默认堆ID;&&& DWORD th32ModuleID;&&&&&& // 进程模块ID;&&& DWORD cntT&&&&&&&& // 此进程开启的线程计数;&&& DWORD th32ParentProcessID;// 父进程ID;&&& LONG& pcPriClassB&&&& // 线程优先权;&&& DWORD dwF&&&&&&&&&&& // 保留; &&& char szExeFile[MAX_PATH]; // 进程全名;& } PROCESSENTRY32;至此,所用到的主要函数已介绍完,实现读内存只要从下到上依次调用上述函数即可,具体参见原代码:
procedure TForm1.Button1Click(Sender: TObject);var& FSnapshotHandle:TH& FProcessEntry32:TProcessEntry32;& Ret : BOOL;& ProcessID :& ProcessHndle : TH& lpBuffer:pB& nSize: DWORD;& lpNumberOfBytesRead: DWORD;& i:& s:begin& FSnapshotHandle:=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);&&& //创建系统快照& FProcessEntry32.dwSize:=Sizeof(FProcessEntry32);&&& //先初始化 FProcessEntry32 的大小& Ret:=Process32First(FSnapshotHandle,FProcessEntry32);& while Ret do& begin&&& s:=ExtractFileName(FProcessEntry32.szExeFile);&&& if s=KERNEL32.DLL then&&& begin&&&&& ProcessID:=FProcessEntry32.th32ProcessID;&&&&& s:=;&&&&&&&&&&& Ret:=Process32Next(FSnapshotHandle,FProcessEntry32);&&& //循环枚举出系统开启的所有进程,找出“Kernel32.dll”& CloseHandle(FSnapshotHandle);& Memo1.Lines.C& memo1.lines.add(Process ID +IntToHex(FProcessEntry32.th32ProcessID,8));& memo1.lines.Add(File name +FProcessEntry32.szExeFile);&&& ////输出进程的一些信息 & nSize:=4;& lpBuffer:=AllocMem(nSize);& ProcessHndle:=OpenProcess(PROCESS_VM_READ,false,ProcessID);& memo1.Lines.Add (Process Handle +intTohex(ProcessHndle,8));& for i:=$ to $0080005f do& begin&&& ReadProcessMemory(&&&&&&&&&&&&&&&&&&&& ProcessHndle,&&&&&&&&&&&&&&&&&&&& Pointer(i),&&&&&&&&&&&&&&&&&&&& lpBuffer,&&&&&&&&&&&&&&&&&&&& nSize,&&&&&&&&&&&&&&&&&&&& lpNumberOfBytesRead&&&&&&&&&&&&&&&&&&&& );&&& s:=s+intTohex(lpBuffer^,2)+ ;&&&&& //读取内容&&& if (i mod 16) =0 then&&& begin&&&&& Memo1.Lines.Add(s);&&&&& s:=;&&&&&&&& //格式化输出&& FreeMem(lpBuffer,nSize);& CloseHandle(ProcessHndle);&& //关闭句柄,释放内存以上程序在 Delphi4 中文Win98 下调试通过。
文章整理:西部数码--专业提供、服务
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!
文章页数:&
??????????
??????????
版权申明:本站文章均来自网络,如有侵权,请联系我们,我们收到后立即删除,谢谢!
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有。
版权所有 西部数码()
CopyRight (c) 2002~ all right reserved.
公司地址:四川省成都市金牛区一环路北一段99号环球广场24楼 邮编:610031
电话总机:028-08 38
售前咨询:总机转201 202 203 204 206 208
售后服务:总机转211 212 213 214
财务咨询:总机转224 223 传真:028- 财务QQ:
售前咨询QQ:2182518
售后服务QQ:}

我要回帖

更多关于 linux多进程编程实例 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信