关于内存读取后的问题[已给出程序,大家帮忙看一下] ( 积分: 20 )

  • 主题发起人 主题发起人 weserver
  • 开始时间 开始时间
W

weserver

Unregistered / Unconfirmed
GUEST, unregistred user!
关于内存读取后的问题,请高手帮忙<br><br><br>我读取某地址内存后,获得数据为D4,转化成Byte Type为212,而用其他软件测得实际数据为185300(Dword Type)<br>请问如何才能把D4转化为185300???<br><br>请高手帮忙,谢谢!
 
关于内存读取后的问题,请高手帮忙<br><br><br>我读取某地址内存后,获得数据为D4,转化成Byte Type为212,而用其他软件测得实际数据为185300(Dword Type)<br>请问如何才能把D4转化为185300???<br><br>请高手帮忙,谢谢!
 
Dword类型 读4个字节
 
什么意思??我是菜鸟,请高手说明白一点...
 
185300 是 的 16进制 &nbsp;2D3D4 &nbsp;<br>所以对应的 那个字节 D4 是正确的。
 
D4后面还有三个字节 D3 02 00 要读出来才构成185300<br>var<br> &nbsp;I:Integer;<br>begin<br> &nbsp;copymemory(@I,某地址内存的地址,4);<br> &nbsp;//结果在i中
 
为什么我用copymemory(@I,$013609A0,4);<br>提示错误<br>Incompatible types: 'Integer' and 'Pointer'
 
kinneng,非常感谢你的帮助,但我还是有点不大明白,你可以再说的清楚一点吗???
 
这不是明显的类型不匹配问题吗!!!<br><br>如:<br>copymemory(@name[1],pchar( 'hello'),5);
 
我读取内存s:=s+intTohex(lpBuffer^,2);获得s为D4 D3 02 00<br>请问如何通过copymemory把s转化为185300
 
lpBuffer^ := 185300;
 
copymemory(@I,Ptr($013609A0),4);
 
var<br> &nbsp;FSnapshotHandle:THandle;<br> &nbsp;FProcessEntry32:TProcessEntry32;<br> &nbsp;Ret : BOOL;<br> &nbsp;ProcessID : integer;<br> &nbsp;ProcessHndle : THandle;<br> &nbsp;lpBuffer:pByte;<br> &nbsp;nSize,Bytes: DWORD;<br> &nbsp;lpNumberOfBytesRead: DWORD;<br> &nbsp;i,u:integer;<br> &nbsp;s:string;<br>begin<br> &nbsp;FSnapshotHandle:=CreateToolhelp32Snapshot(<br>TH32CS_SNAPPROCESS,0);<br> &nbsp; &nbsp;//创建系统快照<br> &nbsp;FProcessEntry32.dwSize:=Sizeof(FProcessEntry32);<br> &nbsp; &nbsp;//先初始化 FProcessEntry32 的大小<br> &nbsp;Ret:=Process32First(FSnapshotHandle,FProcessEntry32);<br> &nbsp;while Ret do<br> &nbsp;begin<br> &nbsp; &nbsp;s:=ExtractFileName(FProcessEntry32.szExeFile);<br> &nbsp; &nbsp;if s='QQGame.exe' then<br> &nbsp; &nbsp;begin<br> &nbsp; &nbsp; &nbsp;ProcessID:=FProcessEntry32.th32ProcessID;<br> &nbsp; &nbsp; &nbsp;s:='';<br> &nbsp; &nbsp; &nbsp;break;<br> &nbsp; &nbsp;end;<br> &nbsp; &nbsp;Ret:=Process32Next(FSnapshotHandle,FProcessEntry32);<br> &nbsp;end;<br> &nbsp; //循环枚举出系统开启的所有进程,找出“QQGame.exe”<br> &nbsp;CloseHandle(FSnapshotHandle);<br> &nbsp;Memo1.Lines.Clear ;<br> &nbsp;memo1.lines.add('Process ID '+IntToHex(<br> &nbsp;FProcessEntry32.th32ProcessID,8));<br> &nbsp;memo1.lines.Add('File name '+FProcessEntry32.szExeFile);<br> &nbsp; &nbsp;////输出进程的一些信息 <br> &nbsp;nSize:=4;<br> &nbsp;lpBuffer:=AllocMem(nSize);<br> &nbsp;ProcessHndle:=OpenProcess(PROCESS_VM_READ,false,ProcessID);<br> &nbsp;memo1.Lines.Add ('Process Handle '+intTohex(ProcessHndle,8));<br> &nbsp;for i:=$013609A0 to $013609A0 do<br> &nbsp;begin<br> &nbsp; &nbsp;ReadProcessMemory(<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ProcessHndle,<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Pointer(i),<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; lpBuffer,<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; nSize,<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; lpNumberOfBytesRead<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;);<br><br> &nbsp; &nbsp;copymemory(@u,Ptr($013609A0),4);<br> &nbsp; &nbsp;Memo1.Lines.Add(inttostr(u));<br> &nbsp; &nbsp; &nbsp;//格式化输出<br> &nbsp;end;<br> &nbsp;FreeMem(lpBuffer,nSize);<br> &nbsp;CloseHandle(ProcessHndle);<br> &nbsp; //关闭句柄,释放内存<br>end;<br><br>还是有问题,请大家帮忙看一下程序<br><br>按刘兄的u:=lpBuffer^也不对啊,可能是我太菜了,请大家帮忙看一下程序
 
哗!这么多高手!我怕怕<br><br>copymemory(@I,某地址内存的地址,4)<br>是将后一个地址指针里面的数据复制到前一个指针@I所指的位置,复制长度等于4。<br><br>copymemory(@I,$013609A0,4)出错是因为$013609A0是integer,按appfirst给的答案<br>Ptr($013609A0)就变成地址指针了<br>copymemory(@I,Ptr($013609A0),4)<br><br>copymemory只是内存复制,不是转化,就是说不管I是什么类型,强行在内存修改它。<br><br>copymemory非常好用,就像我主页http://kinneng.icpcn.com那几个小程序,<br>因为要实时处理的大量的股票数据包,里面有文字、整数和浮点数、日期时间等,<br>使用copymemory可以整包地复制到映射内存,供其它软件共享,无须单独赋值和类型<br>转换,保证了处理速度,不致数据诸塞。<br><br>copymemory的孪生兄弟是movememory。
 
感谢kinneng的详细讲解,copymemory()的用法我基本明白了,但是我上述的程序就是按你这个写的啊,但运行就是有问题??可以帮我看一下吗??谢谢
 
顺便问一下,使用copymemory()不需要进程ID/句柄吗???
 
copymemory()跟进程ID/句柄没关系,它不就是一个copy,只不过是内存复制而已,只要你的内存地址正确,可以访问,就不会出错,至于你的程序为什么出错,详细列出来看看?
 
程序就在上面,请帮忙看一下,谢谢
 
读写其它进程的内存,不就是用来动态修改别人的程序,跳过注册检测,从而破解程序,这活我干过,可不是copymemory这么简单,要说就长篇大论的,我现在没空,网上有例子,搜索一下吧?
 
我只是想利用软件读取某些特定游戏的属性值,如QQ游戏的游戏币的数值(在内存中有显示的,地址是$013609A0),请kinneng及各位高手帮忙,谢谢
 

Similar threads

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