首页 文章

C缓冲区中的asm shellcode - 序言

提问于
浏览
1

我尝试在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 回答

  • 3

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

    • compile / link这样堆栈被标记为可执行文件(即 gcc -z execstack

    • 在运行时使用 mprotect 来标记代码可执行的页面

相关问题