Итак, у меня есть следующий сегмент кода в сборке 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 как ноль.Затем он вызывает sscanf и затем проверяет, равен ли% eax 5. Если он больше 5, он продолжит работу, иначе завершится.Итак, простой C-код, который я сделал:
eax = 0;
sscanf();
if (eax < 5) error_program();
return;
Это дамп объекта двоичного файла, поэтому я уверен, что он правильный.Тем не менее, eax всегда будет равен нулю, и ошибка сработает.Я прав на это?Или возможно, что sscanf будет манипулировать eax?
Спасибо