关于内存的读写操作,如FPE(50分)

  • 主题发起人 主题发起人 MicroZeng
  • 开始时间 开始时间
M

MicroZeng

Unregistered / Unconfirmed
GUEST, unregistred user!
我要做一个如FPE类的东西,请问怎么做?有谁作过类似的东西?

ReadProcessMemory,WriteProcessMemory两个怎么用?
下面程序错在那里,Windows98平台;

procedure TForm1.Button1Click(Sender: TObject);
var i : Cardinal;
Address : ^Cardinal;
Buffer : ^String;
NumRead : Cardinal;
begin
New(Address);
New(Buffer);

for i := StrToInt(Edit1.Text) to StrToInt(Edit2.Text) do
begin

if not DebugActiveProcess(DEBUG_ONLY_THIS_PROCESS) then
begin
ShowMessage('Can not DEBUG_ONLY_THIS_PROCESS');
Exit;
end;

Address^ := i;

if not ReadProcessMemory(PROCESS_VM_READ, Address, Buffer, 20, NumRead ) then Break;

RichEdit1.Lines.Add(Buffer^ + '---'+ IntToStr(i)+'---'+ IntToStr(NumREad));
end;
End;
 
</font color="Red"> Who Can Help Me? .... </font>
 
还是没有人帮忙 !@#$.......
-----------------------------------
可能是我写的不清除.
简单一些说:
如何浏览将内存浏览一遍,
如何把数值写到内存中去?

请大虾们帮忙!
 
您看这里吧:<a href="http://www.gislab.ecnu.edu.cn/delphibbs/DispQ.asp?LID=93966">怎样读取一个应用程序区的内容</a>
 
> if not DebugActiveProcess(DEBUG_ONLY_THIS_PROCESS) then
你这是在干吗?这里的参数应该是应该进程的ID号,而不是DEBUG_ONLY_THIS_PROCESS.
进程的ID号就是NT下的任务管理器的"进程"页(第二页)里的那个号码.
95/98上要取得这个号码可能困难一些.最好的办法是由你的程序启动
要读的程序,就象BCB/SoftICE那样.用CreateProcess,它可以返回那
个进程的ID号.

> if not ReadProcessMemory(PROCESS_VM_READ, Address, Buffer, 20, NumRead ) then Break;
这里PROCESS_VM_READ是进程的句柄吗?进程的句柄可以在CreateProcess
的返回值中取得,也可以用进程ID好,用OpenProcess取得.
 
不知谁有这样的例子!

FPE, 金山游侠等软件在内存写操作时也不一定行。
普通的都能编辑,但是相MS出的帝国时代和红色警戒等缺无法修改。
是不是它们对内存有“写保护”?

那位有妙招?
 
MicroZeng:

这个问题已经很长时间没有人参加讨论,为保持版面
整洁,节约网友时间,请提问者采取必要处理措施。
关于本版管理细则,请参见<a href="http://www.gislab.ecnu.edu.cn/delphibbs/DispQ.asp?LID=111927">这个</a>问题。如两天
内提问者没有响应,我将采取强制措施。

如有管理建议,请到<a href="http://www.gislab.ecnu.edu.cn/delphibbs/DispQ.asp?LID=111927">这里</a>提出。谢谢!
 
接受答案了.
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
452
import
I
后退
顶部