c&c++反汇编与逆向分析学习笔记(6)--减法表达式

减法运算对应于汇编指令SUB,虽然计算机只会做加法,但是可以通过补码转换将减法转换为加法形式来完成。
    //C++源码
    int nVarOne = argc;//变量定义
    int nVarTwo = 0;
    scanf("%d",&nVarTwo);//获取变量nVarTwo的数据,使用scanf防止变量被常量化
    nVarOne = nVarOne - 100;//变量减常量的减法运算
    nVarOne = nVarOne + 5 - nVarTwo;//减法与加法混合运算
    printf("nVarOne = %d\n",nVarOne);

    //C++源码与反汇编代码讲解
    //C++
    nVarOne = nVarOne -100;
    //反汇编
    mov eax,dword ptr [ebp-4]//取变量nVarOne的数据到eax中
    sub eax,64h//使用sub指令,对eax执行减100操作
    mov dword ptr [ebp-4],eax//将结果赋值回nVarOne中
    
    //C++
    nVarOne = nVarOne + 5 - nVarTwo;
    //反汇编
    //按照自左向右顺序依次执行
    mov ecx,dword ptr [ebp-4]
    add ecx,5
    sub ecx,dword ptr [ebp-8]
    mov dword ptr [ebp-4],ecx
    减法运算没有使用加负数的表现形式。在实际的分析中,根据加法操作数的情况,当加数为负数时,执行的并非加法而是减法操作。
    另外,编译器优化策略与加法相同。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值