美文网首页C语言
c语言if语句逆向分析

c语言if语句逆向分析

作者: 旧风景_ | 来源:发表于2017-05-31 22:37 被阅读0次

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

    #include<stdio.h>
    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语句逆向分析

        本文链接:https://www.haomeiwen.com/subject/plnjfxtx.html