还可以这样利用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;
}