lizhen 发表于 2011-3-29 09:25:41

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

例如:
指定的内存地址:me : $04A66320;
要写入的字符串:windows(这个字串符有时候会长些,有时候会短些)

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

在些先谢谢各位大大!

chc2203 发表于 2011-3-29 09:25:52

字符串一般只保存个指针,而指针指向的内存才是字符串的内容
所以你可以先申请段内存,把字符内容保存到该内存中,然后再将内存地址写到$04A66320里

wajdm2000 发表于 2011-3-29 09:26:13

1.字符串转二进制数组
2.长度设置得尽量大一些
3.超出长度的部分用\0,也就是字符串的结束符(ascii里的0)补整齐

最后,用WriteProcessMemory写入

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

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

ytn2001 发表于 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 );

ldnhhy 发表于 2011-3-29 09:27:20

你可以用 virtualAllocEx这个api在指定的内存地址开辟空间的,问题的关键就是如果你要写入的地址:0x04A66320 很可能这个地址已经commit或reserve,这个时候你不可能分配到以这个地址为首的空间的。其余的如计算长度,写入等等的就很容易了!
页: [1]
查看完整版本: WriteProcessMemory如何对内存地址写入字符串?