【发布时间】:2014-06-05 02:16:51
【问题描述】:
我想知道为什么下面的代码会导致执行错误?
#include <stdlib.h>
int main(void) {
asm("pushf\norl $ 0x40000, (%esp)\npopf\n");
*((int*) (((char*) malloc(5)) + 1)) = 23;
return 0;
}
谢谢!
【问题讨论】:
-
问:您在调试器下单步执行时发现了什么?问:你们的平台是什么?编译器?我猜是 Linux 和 GCC,但我不知道......你到底想用这段代码完成什么?
-
您在 EFLAGS (More) 中设置对齐检查位,并将 32 位值写入未对齐的地址。顺便说一句,“执行错误”非常模糊。实际的错误会更有用。
-
如果
sizeof(int)更大,比如 8,则分配的内存不足。
标签: c assembly inline-assembly