2015-11-05 2 views
2

Я использую IDA для разборки файла, и в одном из разделов содержится это. Что это значит? Как бы это выглядело в C?Что делает этот код и как он выглядит на C?

Я верю, что он подталкивает edx к стеку и преобразует его в целое число с помощью _atoi, но что осталось в eax после этого и почему он сравнивает его с 5?

mov  ecx, [ebp+argv] 
mov  edx, [ecx+4] 
push edx    ; char * 
call _atoi 
add  esp, 4 
mov  [ebp+var_60], eax 
cmp  [ebp+var_60], 5 
jle  short loc_401167 

ответ

3

код C будет выглядеть следующим образом

int var_60; 
if ((var_60 = atoi(argv[1])) > 5) 
{ 
    // execute the instructions after the 'jle' instruction, e.g. 
    printf("Invalid argument\n"); 
    exit(1); 
} 

Другими словами, код проверяет, что первый аргумент программы является число, которое меньше чем или равно 5. Это также экономит преобразованное значение для последующего использования.

+0

Благодарим за ответ, я ценю его. –

+0

Комментирование снова для продолжения. Ваше редактирование ответило на мой следующий вопрос, спасибо! –

+0

@AustinDonley Yup, мне пришло в голову, что нет смысла проверять аргументы программы, если вы не собираетесь что-то с ними делать :) – user3386109