x86 - функция sscanf в C - PullRequest
       13

x86 - функция sscanf в C

3 голосов
/ 23 января 2012

Итак, у меня есть следующий сегмент кода в сборке 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?

Спасибо

Ответы [ 2 ]

4 голосов
/ 23 января 2012

Обычно функции передают возвращаемое значение обратно в eax;по крайней мере, оно не гарантировано сохранено.Итак, возможно, этот код проверяет, чтобы убедиться, что sscanf находит как минимум 5 элементов?

3 голосов
/ 22 сентября 2015

Короткий ответ: да, sscanf определенно изменит% eax.% rax - это регистр по умолчанию, в котором функции возвращают возвращаемое значение, всегда.

Я провел некоторое исследование, и оно говорит следующее:

В случае успеха функция возвращает количество элементов всписок аргументов успешно заполнен.Это количество может соответствовать ожидаемому количеству элементов или быть меньше (даже нулю) в случае сбоя сопоставления.В случае сбоя ввода до того, как какие-либо данные могут быть успешно интерпретированы, возвращается EOF.

см. Дополнительную информацию здесь: http://www.cplusplus.com/reference/cstdio/sscanf/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...