1. ホーム
  2. assembly

[解決済み] 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つの項目を見つけることを確認しているのではないでしょうか?