为什么会导致执行错误?

时间:2014-04-21 03:10:47

标签: c assembly inline-assembly

我想知道为什么以下代码会导致执行错误?

#include <stdlib.h>
int main(void) {
    asm("pushf\norl $ 0x40000, (%esp)\npopf\n");
    *((int*) (((char*) malloc(5)) + 1)) = 23;
    return 0;
}

谢谢!

1 个答案:

答案 0 :(得分:0)

可能是因为您正在修改对齐检查标志,这是AFAIK保护的。或者因为malloc()返回一个对齐的区域,并且您的访问是未对齐的?不确定,但为什么你需要触摸这个标志呢?