我偶然发现了一个汇编编程挑战,我需要找出为什么下面的代码在试图运行它时会给出总线错误。在谷歌了很多次之后,我仍然不明白为什么..我对汇编x86的理解不是很好,任何找到解决方案的技巧都会非常感谢。
代码如下:
#include <stdlib.h>
int main(void) {
asm("pushf\n"
"orl $ 0x40000, (%esp)\n"
"popf\n");
*((int*) (((char*) malloc(5)) + 1)) = 23; // This line causes the Bus Error
return 0;
}发布于 2012-04-26 03:41:55
从本质上讲,您是在标志寄存器中设置标志。标志0x40000,也称为位18,根据http://en.wikipedia.org/wiki/FLAGS_register_%28computing%29,它是
18交流对齐检查(仅限486SX+)X
如果你搜索"flag alignment“,你会发现:
http://forum.soft32.com/linux2/Turn-x86-Alignment-Check-ftopict12003.html
我希望这能让你走上正轨。但你真的有486SX吗?
https://stackoverflow.com/questions/10322394
复制相似问题