Shell代码:访问冲突异常没有明显原因

时间:2014-09-07 13:40:55

标签: c assembly

在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.

为什么?

1 个答案:

答案 0 :(得分:2)

谷歌点此处。

您可以在致电前使用VirtualProtect

DWORD oldProtection = 0;
VirtualProtect((void*)myshell, 3, PAGE_EXECUTE_READWRITE, &oldProtection);