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 に答える