【问题标题】:asm shellcode in C buffer - prologueC 缓冲区中的 asm shellcode - 序言
【发布时间】:2014-04-30 22:11:36
【问题描述】:

我尝试在 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)处崩溃 你知道为什么吗?

【问题讨论】:

  • 您需要提供很多更多信息。架构和操作系统是什么?数据空间是否可执行?你需要做一些特别的事情来确保缓存的一致性吗?

标签: c assembly shellcode


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2018-04-19
    • 1970-01-01
    • 1970-01-01
    • 2021-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-21
    • 1970-01-01
    相关资源
    最近更新 更多