Exception 导致堆栈异常(x86)
我正试图编写汇编代码以引起堆栈异常,但到目前为止我没有运气。根据AT&T编程器手册,堆栈异常由以下原因之一引起: •堆栈地址不是标准形式的隐含堆栈引用。隐含堆栈 参考包括所有推送和弹出指令,以及任何以RSP或RBP为基础的指令 登记 •尝试加载堆栈段选择器,该选择器引用包含清除字符的段描述符 当前位(描述符P=0)。 •未通过堆栈限制检查的任何堆栈访问 我选择了第一种方法;我正在尝试用非规范形式加载rsp,代码如下:Exception 导致堆栈异常(x86),exception,x86,stack,Exception,X86,Stack,我正试图编写汇编代码以引起堆栈异常,但到目前为止我没有运气。根据AT&T编程器手册,堆栈异常由以下原因之一引起: •堆栈地址不是标准形式的隐含堆栈引用。隐含堆栈 参考包括所有推送和弹出指令,以及任何以RSP或RBP为基础的指令 登记 •尝试加载堆栈段选择器,该选择器引用包含清除字符的段描述符 当前位(描述符P=0)。 •未通过堆栈限制检查的任何堆栈访问 我选择了第一种方法;我正在尝试用非规范形式加载rsp,代码如下: asm volatile("mov $0xAAAAAAAA00000000,
asm volatile("mov $0xAAAAAAAA00000000, %%rax;"
"orq %%rax, %%rsp;"
"push %%rax;" : : : );
GDB只是说不能寻址内存,一切都会中断,而不是异常。有人有什么想法吗?如果没有人知道我如何使用第三个条件导致异常?我不知道“堆栈限制检查失败”是什么意思。谢谢
asm(
"\n"
"MYLOOP:\n\t"
"pushq %rbp\n\t"
//"popq %rbp\n\t"
"jmp MYLOOP\n\t"
);
简单的堆栈溢出。取消对popq指令的注释,使无限堆栈推送/弹出循环消耗100%的cpu内核。最简单的方法可能是反复调用自己,直到堆栈溢出。看见