读内存时候遇到的问题,请高手帮忙看一下 关于unicode的问题 -_- ( 积分: 100 )

  • 主题发起人 主题发起人 精灵猪
  • 开始时间 开始时间

精灵猪

Unregistered / Unconfirmed
GUEST, unregistred user!
小弟用ReadProcessMemory读程序固定的内存地址 可是内存地址为unicode的 比如123456在内存里就是 31 00 32 00 33 00 34 00 35 00 36 00 00 00 小弟用ReadProcessMemory每次只读到了第一位 后门的可能是由于00的问题都读不到了 请高手帮忙想象办法应该如何做 小弟感激不尽
 
也可能是我用了strpas(buff);导致的问题 具体还请高手指点一下
 
你使用WideString可以解决这个问题。
 
var<br>&nbsp;&nbsp;i:integer;<br>&nbsp;&nbsp;ds:WideString;<br>&nbsp;&nbsp;ps,pd:PByte;<br>...<br>&nbsp;&nbsp;ps:=xxxx;&nbsp;&nbsp;&nbsp;//&nbsp;假设xxxx是你要读的内存地址<br>&nbsp;&nbsp;SetLength(ds,256);<br>&nbsp;&nbsp;pd:=Pointer(ds);<br>&nbsp;&nbsp;While&nbsp;(ps^&lt;&gt;0)&nbsp;or&nbsp;(PByte(Integer(ps)+1)^&lt;&gt;0)&nbsp;do<br>&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;i:=1&nbsp;to&nbsp;2&nbsp;do<br>&nbsp;&nbsp;&nbsp;&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pd^:=ps^;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;inc(ps);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;inc(pd)<br>&nbsp;&nbsp;&nbsp;&nbsp;end;<br>&nbsp;&nbsp;pd^:=0;<br>&nbsp;&nbsp;PByte(Integer(pd)+1)^:=0;<br>&nbsp;&nbsp;MessageBoxW(Form1.Handle,Pointer(ds),'Demo',mb_ok);<br>...
 
感谢2位大哥的回答&nbsp;不过都不行依然是只读出一位&nbsp;其他的读不到啊
 
把你完整的代码贴上来
 
if&nbsp;ReadProcessMemory(hProcess,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Pointer($005a6768),<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@buff[0],<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sizeof(buff),<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dd)=false&nbsp;then&nbsp;&nbsp;exit;<br><br><br>&nbsp;&nbsp;str:=strpas(buff);<br><br>我是这样读的&nbsp;不过用韦剑老哥的代码依然只只读到一位
 
我的意思是把你用我的方法写的完整代码贴上来,方法是方法,代码是代码,怎可混为一谈
 
var<br>&nbsp;&nbsp;i:integer;<br>&nbsp;&nbsp;ds:WideString;<br>&nbsp;&nbsp;ps,pd:PByte;<br>&nbsp;&nbsp;d2:dword;<br>begin<br>d2:=$008da756;<br>ps:=pbyte(d2);&nbsp;&nbsp;&nbsp;//&nbsp;假设xxxx是你要读的内存地址<br>&nbsp;&nbsp;SetLength(ds,256);<br>&nbsp;&nbsp;pd:=Pointer(ds);<br>&nbsp;&nbsp;While&nbsp;(ps^&lt;&gt;0)&nbsp;or&nbsp;(PByte(Integer(ps)+1)^&lt;&gt;0)&nbsp;do<br>&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;i:=1&nbsp;to&nbsp;2&nbsp;do<br>&nbsp;&nbsp;&nbsp;&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pd^:=ps^;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;inc(ps);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;inc(pd)<br>&nbsp;&nbsp;&nbsp;&nbsp;end;<br>&nbsp;&nbsp;pd^:=0;<br>&nbsp;&nbsp;PByte(Integer(pd)+1)^:=0;<br>messagebox(0,'Pointer(ds)','',mb_ok);<br><br>我是这样写的&nbsp;不是读不到就是读一堆乱码<br>而且我发现我的代码<br>&nbsp;&nbsp;if&nbsp;ReadProcessMemory(hProcess,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Pointer($005a6768),<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@buff[0],<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sizeof(buff),<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dd)=false&nbsp;then&nbsp;&nbsp;exit;<br><br>已经读到了&nbsp;只是str:=strpas(buff);认为00是结束符&nbsp;接不读后面的了&nbsp;造成了只读一位的现象&nbsp;有没有可以读出unicode的函数替代strpas&nbsp;?<br>请指教
 
var<br>&nbsp;&nbsp;i:integer;<br>&nbsp;&nbsp;ds:WideString;<br>&nbsp;&nbsp;ps,pd:PByte;<br>&nbsp;&nbsp;d2:dword;<br>begin<br>d2:=$008da756;<br>ps:=pbyte(d2);&nbsp;&nbsp;&nbsp;//&nbsp;假设xxxx是你要读的内存地址<br>&nbsp;&nbsp;SetLength(ds,256);<br>&nbsp;&nbsp;pd:=Pointer(ds);<br>&nbsp;&nbsp;While&nbsp;(ps^&lt;&gt;0)&nbsp;or&nbsp;(PByte(Integer(ps)+1)^&lt;&gt;0)&nbsp;do<br>&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;i:=1&nbsp;to&nbsp;2&nbsp;do<br>&nbsp;&nbsp;&nbsp;&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pd^:=ps^;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;inc(ps);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;inc(pd)<br>&nbsp;&nbsp;&nbsp;&nbsp;end;<br>&nbsp;&nbsp;pd^:=0;<br>&nbsp;&nbsp;PByte(Integer(pd)+1)^:=0;<br>messagebox(0,'Pointer(ds)','',mb_ok);<br><br>最后一句错了,既然是Unicode字符串,用MessageBox函数来显示的话当然是乱码,你没看见我给的测试程序里面用的是MessageBoxW函数吗?<br>====================================<br>MessageBoxW(Form1.Handle,Pointer(ds),'Demo',mb_ok);<br>====================================
 
多谢韦剑大哥的热心提示&nbsp;小弟十分感谢&nbsp;谢谢你&nbsp;不知道可否和你交个朋友&nbsp;方便留个联系方式吗?
 
后退
顶部