2015-11-05 56 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是的,我想到在檢查程序參數時沒有太多意義,除非你要對它們做些什麼:) – user3386109