能力值:
( LV3,RANK:30 )
|
-
-
2 楼
程序不是我自己写的 想做内存补丁 该怎么办?
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
WriteProcessMemory()
|
能力值:
( LV4,RANK:50 )
|
-
-
4 楼
0x500000存在么?
|
能力值:
( LV4,RANK:50 )
|
-
-
5 楼
一般用VirtualProtectEx
|
能力值:
( LV3,RANK:30 )
|
-
-
6 楼
0x500000是肯定存在的 可读但是不可写
VirtualProtect在本进程内使用是肯定没问题的 没必要用VirtualProtectEx 但是最后导致内存不可写 这是为什么?
我尝试使用ntdll导出的ZwProtectVirtualMemory 返回成功 但内存的属性还是只读
用ZwProtectVirtualMemory 修改
ZwProtectVirtualMemory(GetCurrentProcess(),&dwAddrT,&dwSize,PAGE_READWRITE,&dwOld)
然后 使用VirtualQueryEx查询内存 获得的内存属性(mbi)是
Type=MEM_MAPPED
State=MEM_COMMIT
AllocationProtect=PAGE_EXECUTE_READ
为什么是这样?难道这个内存无敌了?不能写?
|
能力值:
( LV2,RANK:10 )
在线值:
|
-
-
7 楼
问题解决了么?
|
能力值:
( LV2,RANK:10 )
|
-
-
8 楼
给一段刚写的DEMO,我学DELPHI的,勉强翻译成C
LPVOID lpAddress = ::VirtualAlloc(NULL, 1024, MEM_COMMIT, PAGE_NOACCESS);
if (lpAddress != NULL)
{
DWORD lpflOldProtect;
BOOL bRet = ::VirtualProtect(lpAddress, 1024, PAGE_EXECUTE_READWRITE, &lpflOldProtect);
if (bRet)
{
::MessageBox(NULL,"修改成功!","提示",MB_OK);
}
else
{
::MessageBox(NULL,"修改失败!","提示",MB_ICONERROR);
}
::VirtualFree(lpAddress,1024,MEM_DECOMMIT);
}
else
{
::MessageBox(NULL,"分配内存失败!","提示",MB_ICONERROR);
}
|
|
|