搜文章
推荐 原创 视频 Java开发 iOS开发 前端开发 JavaScript开发 Android开发 PHP开发 数据库 开发工具 Python开发 Kotlin开发 Ruby开发 .NET开发 服务器运维 开放平台 架构师 大数据 云计算 人工智能 开发语言 其它开发
Lambda在线 > 编程范 > 【编程经验】C语言逆向之表达式短路分析及应用

【编程经验】C语言逆向之表达式短路分析及应用

编程范 2018-03-23

点击蓝字

      大家在学习C语言过程中,可能会见到过一些这样的题,就是表达式短路,表达式短路主要体现在C语言中逻辑运算符&&和||。今天将对表达式短路的做逆向分析,来深入理解它。

      首先利用表达式短路,我们可以写一个很经典的累加求和的函数,代码如下:

【编程经验】C语言逆向之表达式短路分析及应用

       功能很简单,就是求1+2+…+99+100的数字和的一个程序,但用递归写了出来,利用逻辑与运算,左边判断是否递归到0,右边累加求和,其中的技巧巧妙的运用逻辑与运算的短路特点,实现累加的效果。

       下面我们断点反汇编,查看重点num && (num += Add(num-1));语句的汇编代码,如下:

下面详细分析:

;比较num是否为0! 这里也就是逻辑与表达式左边的判断!

0040D718       cmp         dword ptr [ebp+8],0

;判断ZF标志位是否为1然后进行跳转,到return处

0040D71C       je          Add+35h (0040d735)

;继续把num变量送入eax寄存器

0040D71E       mov         eax,dword ptr [ebp+8]

;对num减1

0040D721       sub         eax,1

;结果作为参数,压栈准备进入递归调用

0040D724       push        eax

0040D725       call        @ILT+5(_Add) (0040100a)

;栈清空

0040D72A       add         esp,4

;将num里的值放入ecx寄存器里

0040D72D       mov         ecx,dword ptr [ebp+8]

;进行累加运算

0040D730       add         ecx,eax

0040D732       mov         dword ptr [ebp+8],ecx

;此处为return num 返回Add函数结束

0040D735       mov         eax,dword ptr [ebp+8]


如何,学会了没有,没学会的可以:

点击“阅读原文”获取原文资讯



版权声明:本站内容全部来自于腾讯微信公众号,属第三方自助推荐收录。《【编程经验】C语言逆向之表达式短路分析及应用》的版权归原作者「编程范」所有,文章言论观点不代表Lambda在线的观点, Lambda在线不承担任何法律责任。如需删除可联系QQ:516101458

文章来源: 阅读原文

相关阅读

关注编程范微信公众号

编程范微信公众号:dotcpp

编程范

手机扫描上方二维码即可关注编程范微信公众号

编程范最新文章

精品公众号随机推荐