在VS2012中,我写道:
int main(){
char *myshell =
"\x50" // push eax
"\x58" // pop eax
"\xC3"; //ret
__asm call myshell
return 0;
}
我逐行跟踪调试器,当CPU尝试执行“push eax”或其他任何我决定将其更改为此事时,它会触发一个失败的异常,说:
Unhandled exception at 0x00265858 in ConsoleApplication8.exe: 0xC0000005: Access violation executing location 0x00265858.
为什么?
答案 0 :(得分:2)
您可以在致电前使用VirtualProtect。
DWORD oldProtection = 0;
VirtualProtect((void*)myshell, 3, PAGE_EXECUTE_READWRITE, &oldProtection);