0
我正在尝试编写汇编代码来导致堆栈异常,但到目前为止我还没有运气。根据AT编程手册,堆栈异常是由下列之一引起的:导致堆栈异常(x86)
•隐含的堆栈引用,其中堆栈地址不是规范形式。隐含堆栈 引用包括所有推入和弹出指令,以及任何使用RSP或RBP作为基址的指令寄存器 。 •尝试加载引用段描述符的堆栈段选择器,该段描述符包含当前位(描述符.P = 0)的明确 。 •堆栈限制检查失败的任何堆栈访问。
我去了第一种方法;我试图用非规范的形式用下面的代码加载RSP:
asm volatile("mov $0xAAAAAAAA00000000, %%rax;"
"orq %%rax, %%rsp;"
"push %%rax;" : : :);
GDB只是说一些关于不能够解决内存和一切休息,而不是例外。有没有人有任何想法?如果没有人知道我可以如何使用第三个条件导致异常?我不知道“堆栈限制检查失败”是什么意思。谢谢!
最简单的方法可能会一直调用自己,直到你溢出堆栈。请参阅[一些不涉及递归的替代方法](http://stackoverflow.com/questions/1583490/without-using-recursion-how-can-a-stack-overflow-exception-be- thrown)。 – DCoder