c语言if语句逆向分析

来分析一下c语言if语句
直接上代码

#include
int main()
{
    int j = 5;
    int k = 6;
    if (j > k)
    {
        printf("j>k");
    }

    return 0;
}

下面是对应的汇编代码,汇编代码是从vs2013上面复制的

00AC307E  mov         dword ptr [ebp-8],5  
00AC3085  mov         dword ptr [ebp-14h],6  
00AC308C  mov         eax,dword ptr [ebp-8]  
00AC308F  cmp         eax,dword ptr [ebp-14h]  
00AC3092  jle         00AC30AB  

00AC3094  mov         esi,esp  
00AC3096  push        0AC7878h  
00AC309B  call        dword ptr ds:[00ACB030h]  
00AC30A1  add         esp,4  
00AC30A4  cmp         esi,esp  
00AC30A6  call        00AC1163  

00AC30AB  xor         eax,eax  

先来分析一下变量j和变量k:
由于变量j和变量k是局部变量所以编译器是不给它们分配地址的
而是把它们的值存到临时申请栈空间里.栈嘛 函数调用完了就会释放掉的

看 5 和 6 一看 就知道是变量j 和变量 k的值 所以我们知道:
00AC307E mov dword ptr [ebp-8],5 //ebp-8就是存放变量j的值
00AC3085 mov dword ptr [ebp-14h],6 //ebp-14h存放变量k的值

00AC308C mov eax,dword ptr [ebp-8] //把变量j放入eax中
00AC308F cmp eax,dword ptr [ebp-14h] //比较变量j和变量k的大小
00AC3092 jle 00AC30AB //如果j小于等于k则不执行方括号内的代码
如果这条代码的条件成立则跳到xor eax,eax 这条代码执行

否则
就执行方括号里面的代码
这段汇编函数关系不大 所以跳过
00AC3094 mov esi,esp
00AC3096 push 0AC7878h
00AC309B call dword ptr ds:[00ACB030h]
00AC30A1 add esp,4
00AC30A4 cmp esi,esp
00AC30A6 call 00AC1163

你可能感兴趣的:(c语言if语句逆向分析)