请问如何做出象FPE那样可以改内存里的数值
具体要用到什么函数?
具体要用到什么函数?
解决方案 »
- delphi怎么导出到ecel2007
- 怎样修改窗体标题栏的颜色?
- TRMReport.PrintPreparedReport “aCollate: Boolean”参数的问题
- 采用THashedStringList,如何做模糊匹配?
- 如何把一个串“123456789.12”分割为‘123456789’和‘.12’?
- 几个小问题不过对我来说有点难
- delphi参数类型有哪些?
- 谁能给我一个最简单的打印的例子?
- 请教ListView中的Item排列问题?
- 我进了一家公司做Delphi程序,两个月了,老板说刚进来的时候是试用期,每个月300块钱,可是今天他炒了我,还说我没有为公司做什么事情,不给我工资,这合不合理呀。在公司里我差不多天天加班
- 简单问题,用什么语句来退出For循环体?
- 遇到一个Save方面的问题!
有问题请发信息到我的E-mail:[email protected]
procedure TForm1.Button1Click(Sender: TObject);
var
FSnapshotHandle:THandle;
FProcessEntry32:TProcessEntry32;
Ret : BOOL;
ProcessID : integer;
ProcessHndle : THandle;
lpBuffer:pByte;
nSize: DWORD;
lpNumberOfBytesRead: DWORD;
i:integer;
s:string;
begin
FSnapshotHandle:=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0); //创建系统快照
FProcessEntry32.dwSize:=Sizeof(FProcessEntry32); //先初始化 FProcessEntry32 的大小
Ret:=Process32First(FSnapshotHandle,FProcessEntry32);
ProcessID := 0;
while Ret do begin //循环枚举出系统开启的所有进程,找出"Kernel32.dll"
s:=ExtractFileName(FProcessEntry32.szExeFile);
if ansiuppercase(s)='TESTP.EXE' then begin
ProcessID:=FProcessEntry32.th32ProcessID;
s:='';
break;
end;
Ret:=Process32Next(FSnapshotHandle,FProcessEntry32);
end;
CloseHandle(FSnapshotHandle);
Memo1.Lines.Clear ;
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:=$00400000 to $00401000 do begin
for i:=$004419C0 to $00441A00 do begin
// 348A1C $0044D000
ReadProcessMemory(
ProcessHndle,
Pointer(i),
lpBuffer,
nSize,
lpNumberOfBytesRead
);
//读取内容
// filewrite(i,lpBuffer,1);// canvas.TextOut(10,10,inttostr(i));
if intTohex(lpBuffer^,2)<>'00' then
// s := s + chr(lpBuffer^);
s:=s+intTohex(lpBuffer^,2)+' ';
// if ((i mod 16) =0) and (s<>'') then begin
// Memo1.Lines.Add(s);
// s:='';
// end;
//格式化输出
end;
FreeMem(lpBuffer,nSize);
CloseHandle(ProcessHndle);
memo1.Text := s;
//关闭句柄,释放内存
end;
uses
tlhelp32;