这段代码做了什么,它在C中看起来像什么?

时间:2015-11-05 02:37:03

标签: assembly x86 reverse-engineering disassembly ida

我使用IDA来反汇编文件,其中一个部分包含了这个。这是做什么的?它在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

1 个答案:

答案 0 :(得分: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的数字。它还保存转换后的值以供以后使用。