VC用指针修改另一程序内存数值提示内存提示不可写,该用什么代码实现?

我的DLL已注入到对象,用下面的代码提示出错,程序崩溃。求助!long*BuBu;BuBu=(long*)0x004508E4;*BuBu=158182075958831... 我的DLL已注入到对象,用下面的代码提示出错,程序崩溃。求助!
long *BuBu; BuBu=(long *)0x004508E4; *BuBu=15818207595883192297;

但是用OD或CE能直接修改!
展开
 我来答
Slayer_nux
2014-02-23
知道答主
回答量:0
采纳率:0%
帮助的人:0
展开全部
你修改的是代码段?有写保护?难不成这是想写ring3的hook。

//取消内存保护
_asm
{
Push eax
Mov eax,CR0
And eax,0FFFEFFFFh
Mov CR0,eax
Pop eax
}
//重新开启内存保护
_asm
{
Push eax
Mov eax,CR0
Or eax NOT 0FFFEFFFFh
Mov CR0,eax
Pop eax
}
改写cr0去掉页面写保护试试。
更多追问追答
追问
我用OD改或CE修改是没问题的,用OD查看了下改区段是不可写的。
用writeprocessmemoy这种形式也是能修改,但我DLL都注入了,不想用这种方法,想用指针赋值的形式,我回去试试你这种方法。
追答
OD和CE确实是能直接写没问题的,但是程序想写,就必须保证内存可写。至于更深层的原因,我也不清楚。
改CR0的WP位是驱动中用到的方式,我还真没在Ring3用过 ,应该有效吧 ·····Ring3是否有更安全的方式,不的而知。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
空雪梦见
2014-02-24
知道答主
回答量:0
采纳率:0%
帮助的人:0
展开全部
修改一个long类型么。
用VirtualProtect解除保护可破

DWORD nOldProt;
VirtualProtect((LPVOID)0x00450000, 4096, PAGE_EXECUTE_READWRITE, &nOldProt);
BuBu=(long *)0x004508E4;
*BuBu=15818207595883192297;
VirtualProtect((LPVOID)0x00450000, 4096, nOldProt, &nOldProt);

另:你那个常数超出long的范围了。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
?>

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式