能力值:
( LV4,RANK:50 )
|
-
-
2 楼
因为新分配的内存没有执行权限,调用VirtualProtect设置新申请的内存PAGE_EXECUTE_READWRITE权限
|
能力值:
( LV3,RANK:20 )
|
-
-
3 楼
m_newFuncEntry = (unsigned char*)VirtualAlloc(0, m_ndLen + 32, MEM_COMMIT, PAGE_EXECUTE_READWRITE);
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
DWORD dw;
printf("%s", VirtualProtect(pv, addFunctionSize, PAGE_EXECUTE_READWRITE, &dw) ? "成功" : "失败");
大神帮我看下, 我这样写对吗?加上了这两句还是执行的时候报0x96错误
|
能力值:
( LV2,RANK:10 )
|
-
-
5 楼
我把分配内存的代码换成了这句, PVOID pv = (unsigned char*)VirtualAlloc(0, addFunctionSize, MEM_COMMIT, PAGE_EXECUTE_READWRITE);
执行的时候还是报0x96错误, 大神有没有见过类似的例子啊?就是在程序执行的时候分配一块内存, 然后写入汇编, 然后执行的例子, 可以给我个例子的超链接吗? 我翻遍了十几本书都没有找到类似的例子。
|
能力值:
( LV2,RANK:10 )
|
-
-
6 楼
#include "stdafx.h"
#include <Windows.h>
#include <queue>
#include <map>
#include <string>
#include <string.h>
#include <math.h>
int add(int a, int b){
return a + b;
}
void end(){}
int _tmain(int argc, _TCHAR* argv[])
{
UINT nNewSize = (UINT) ceil(1500 / 1024.0) * 1024;
PBYTE pNewBuffer = (PBYTE) VirtualAlloc(NULL,nNewSize,MEM_COMMIT,PAGE_EXECUTE_READWRITE);
//int length = abs((int)((unsigned int) end - (unsigned int) add));
if (pNewBuffer)
{
memcpy(pNewBuffer, add, 1000);
int result = 0;
_asm{
push 1
push 2
call pNewBuffer
add esp, 8
mov result, eax
}
printf("0x%x", result);
VirtualFree(pNewBuffer,0,MEM_RELEASE);
}
getchar();
return 0;
}
可以执行了, 谢谢大家
|
|
|