还可以这样利用x86的堆栈
原来还能这样“践踏”x86的堆栈,利用push后直接ret,很简单很直接!以前都是利用缓冲区溢出去覆盖~
我写的用户空间的一段示例代码(注:执行时的段错误是意料之中的):
include
void hello(void)
{
printf(“hello world!n”);
}
void pushcall(void *call)
{
asm _volatile(“pushl %%eaxnt”
“ret”
::”a” (call)
);
}
int main(void)
{
push_call(&hello);
return 0;
}