C缓冲区中的asm shellcode - 序言

时间:2014-04-30 22:11:36

标签: c assembly shellcode

我尝试在C中的缓冲区中构建一个函数。 与gdb我可以翻译

push   rbp
mov    rbp,rsp
(...)
leave
ret

0x55
0x48 0x89 0xe5
(...)
0xc9
0xc3

所以我写了一个C代码:

int main()
{
   char buffer[]={0x55,0x48,0x89,0xe5,0xc9,0xc3};
   void (*j)(void)=buffer;
   j();
}

但是我的程序似乎在故障中崩溃了" push rbp" (缓冲区中的0x55) 你知道为什么吗?

1 个答案:

答案 0 :(得分:3)

通常的原因是堆栈(存储buffer的地方)不可执行。主要有两种方法:

  1. 编译/链接,使堆栈标记为可执行(即gcc -z execstack
  2. 在运行时使用mprotect来标记代码可执行的页面
相关问题