看流星社区

 找回密码
 注册账号
查看: 3759|回复: 4

[Delphi] WriteProcessMemory如何对内存地址写入字符串?

[复制链接]

该用户从未签到

发表于 2011-3-29 09:25:41 | 显示全部楼层 |阅读模式
例如:
指定的内存地址:  me : $04A66320;
要写入的字符串:  windows  (这个字串符有时候会长些,有时候会短些)

请问如何用“WriteProcessMemory”函数写入以上字符串到指定的内存地址?

在些先谢谢各位大大!

该用户从未签到

发表于 2011-3-29 09:25:52 | 显示全部楼层
字符串一般只保存个指针,而指针指向的内存才是字符串的内容
所以你可以先申请段内存,把字符内容保存到该内存中,然后再将内存地址写到$04A66320里

该用户从未签到

发表于 2011-3-29 09:26:13 | 显示全部楼层
1.字符串转二进制数组
2.长度设置得尽量大一些
3.超出长度的部分用\0,也就是字符串的结束符(ascii里的0)补整齐

最后,用WriteProcessMemory写入

调用时传二进制数组的首地址,和数组的实际长度

***********
注意,上面写的是假定已经在远程进程中分配好了内存的情况下写入的方法.

该用户从未签到

发表于 2011-3-29 09:27:07 | 显示全部楼层
dwSize = lstrlenA( lpszstr ) + 1;
LPVOID lpBuf = VirtualAllocEx( hProcess, NULL, dwSize, MEM_COMMIT, PAGE_READWRITE );
WriteProcessMemory( hProcess, lpBuf, (LPVOID)lpszstr, dwSize, &dwWritten );

该用户从未签到

发表于 2011-3-29 09:27:20 | 显示全部楼层
你可以用 virtualAllocEx这个api在指定的内存地址开辟空间的,问题的关键就是如果你要写入的地址:0x04A66320 很可能这个地址已经commit或reserve,这个时候你不可能分配到以这个地址为首的空间的。其余的如计算长度,写入等等的就很容易了!
点击按钮快速添加回复内容: 支持 高兴 激动 给力 加油 苦寻 生气 回帖 路过 感恩
您需要登录后才可以回帖 登录 | 注册账号

本版积分规则

小黑屋|手机版|Archiver|看流星社区 |网站地图

GMT+8, 2024-4-20 11:28

Powered by Kanliuxing X3.4

© 2010-2019 kanliuxing.com

快速回复 返回顶部 返回列表