[解決済み] x86 - C言語のsscanf関数
2022-02-09 19:03:31
質問
そこで、x86アセンブリで次のようなコードセグメントがあります。
mov $0x0, %eax
callq 400ac8 <__isoc99_sscanf@plt>
cmp $0x5,%eax
jg 40152d <this_function+0x3d> -----> jumps to add two lines down
callq 4014b a <error_program>
add $0x18,%rsp
retq
さて、最初の行では、%eaxを0として設定しています。そして、sscanfを呼び出して、%eaxが5であるかどうかをチェックし、5より大きければ処理を続行し、そうでなければ終了します。というわけで、簡単なC言語のコードを作ってみた。
eax = 0;
sscanf();
if (eax < 5) error_program();
return;
これはバイナリファイルのオブジェクトダンプなので、間違いないでしょう。しかし、eaxは常に0になり、エラーが発射されます。これは正しいのでしょうか?それともsscanfがeaxを操作する可能性があるのでしょうか?
ありがとうございます
解決方法は?
関数が戻り値をeaxで返すことはよくあることです。少なくとも、戻り値が保存されることは保証されていません。 つまり、このコードはsscanfが少なくとも5つの項目を見つけることを確認しているのではないでしょうか?
関連
-
[解決済み] NASMでscanfを使うには?
-
[解決済み] エラーです。操作サイズが指定されていません - NASm
-
[解決済み] 018Hと0cHは、アセンブリでは何の略ですか?具体的には「cH」と「0」「h」のプリフィックス/ポストフィックス
-
[解決済み] .quadディレクティブはアセンブリでどのように機能するのですか?
-
[解決済み] ARMアセンブリのstrの説明
-
[解決済み] アセンブリで命令セテは何をするのですか?
-
[解決済み] エラー: `push' の命令サフィックスが無効です [重複].
-
[解決済み] x86アセンブリでレジスタに使用されるpush/pop命令の機能は何ですか?
-
[解決済み] .NETアセンブリがx86またはx64用にビルドされたかどうかを判断するにはどうすればよいですか?
-
[解決済み] x86における「非一時的」メモリアクセスの意味
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン