0

スタック例外を発生させるアセンブリコードを書き込もうとしていますが、今のところ運がありません。AT&Tプログラマーのマニュアルによると、スタック例外は次のいずれかによって発生します。

•スタックアドレスが標準形式ではない暗黙のスタック参照。暗黙のスタック参照には、すべてのプッシュ命令とポップ命令、およびベースレジスタとしてRSPまたはRBPを使用するすべての命令が含まれます。•クリアな現在のビット(descriptor.P = 0)を含むセグメント記述子を参照するスタックセグメントセレクターをロードしようとしています。•スタック制限チェックに失敗したスタックアクセス。

私は最初の方法を選びました。次のコードを使用して、非標準形式でrspをロードしようとしています。

asm volatile("mov $0xAAAAAAAA00000000, %%rax;"
                    "orq %%rax, %%rsp;"
                    "push %%rax;" : : : );

GDBは、メモリに対処できないことについて何かを言っているだけで、例外ではなくすべてが壊れています。誰かアイデアはありますか?そうでない場合は、3番目の条件を使用して例外を発生させる方法を誰かが知っていますか?「スタック制限チェックに失敗する」とはどういう意味かわかりません。ありがとう!

4

1 に答える 1

1
 asm(
    "\n"
    "MYLOOP:\n\t"
    "pushq %rbp\n\t"
    //"popq %rbp\n\t"
    "jmp MYLOOP\n\t"
    );

単純なスタックオーバーフロー。popq命令のコメントを外して、1つのCPUコアの100%を消費する無限スタックプッシュ/ポップループを作成します。

于 2012-05-29T20:05:31.687 に答える