ASM的shellcode在C缓冲区 - 序幕
问题描述:
我尝试建立在C. 用gdb一个缓冲的功能,我可以翻译ASM的shellcode在C缓冲区 - 序幕
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();
}
但我的计划似乎在按照压(在缓冲区0x55的)“推RBP” 你千牛崩溃为什么?
答
通常的原因是堆栈(您的buffer
的存储位置)不可执行。有主要围绕两个方面:
- 编译/链接使得堆栈被标记为可执行文件(即
gcc -z execstack
) - 使用
mprotect
在运行时在您的代码是可执行的,以纪念页面
+0
现在它的作品谢谢你。 – user2199104
碰撞怎么样?..... –
你需要提供**很多**更多信息。什么是架构和操作系统?数据空间是否可执行?你需要做什么特别的事情来保证缓存一致性吗? –