我尝试在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) 你知道为什么吗?
答案 0 :(得分:3)
通常的原因是堆栈(存储buffer
的地方)不可执行。主要有两种方法:
gcc -z execstack
)mprotect
来标记代码可执行的页面