【问题标题】:Why it causes an execution error?为什么会导致执行错误?
【发布时间】: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


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-07-05
    • 2012-05-04
    • 2020-07-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多