0

我偶然发现了一个汇编编程挑战,我需要找出为什么以下代码在尝试运行它时会出现总线错误。经过多次谷歌搜索,我仍然无法弄清楚为什么..我对汇编 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;
}
4

1 回答 1

1

本质上,您是在标志寄存器中设置标志。标志 0x40000,又名第 18 位,根据http://en.wikipedia.org/wiki/FLAGS_register_%28computing%29

18 AC 对齐检查(仅限 486SX+) X

如果您搜索“标志对齐检查”,您会发现:

http://forum.soft32.com/linux2/Turn-x86-Alignment-Check-ftopict12003.html

我希望这能让你走上正确的道路。但是你真的有 486SX 吗?

于 2012-04-25T19:41:54.537 回答