ここには、VC++プロジェクトに挿入した単純なasmコードがあります。 addr_curr_ebpは、EBPポインタの現在のアドレスです。これは、スタックフレーム内の古いEBP値を指しています。 4バイト後に、アプリケーション関数内の戻りアドレスが入ります。コードセクションから1バイトを抽出します。 gtalk、vlcなどの他のアプリケーションと一緒に自分のコードを実行します。私のコードにProbStat 1と2を含めると、アプリケーションが常にクラッシュします。これらのステートメントを削除すると、すべて正常に動作します。これは何だと思いますか?Help:ソースコードにアクセスするとアプリケーションがクラッシュする
__asm{
push eax
push ebx
push cx
mov ebx, addr_curr_ebp
mov eax, [ebx + 4]
mov cl, BYTE PTR [eax - 5] //ProbStat 1
mov ret_5, cl // ProbStat 2
pop cx
pop ebx
pop eax
}
クラッシュまたは例外はありますか?これはどこで発生しますか?デバッガを設定して、すべての例外タイプを破りましたか? –
'CX'を押すだけで何も保存しません。また、MSはC++の 'this'ポインタに' ECX'レジスタを使います。それ以外の場合は、あなたの質問に答えるための十分な情報がありません。 – JimR
@JimR: 'push cx'はcxレジスタを保存し、 'pop cx'はそれを復元します。その間に、clだけが変更されます。だからecxは保存されています。 – TonyK