首页 > 后端开发 > 正文

C语言逆向之表达式短路分析及应用 驳“C语言无用”论

2023-06-26 19:25:14 | 我爱编程网

C语言逆向之表达式短路分析及应用

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我爱编程网

;继续调用Add函数,地址位于0040100a处

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

;栈清空

0040D72A       add         esp,4

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

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

;进行累加运算

0040D730       add         ecx,eax

;放回num地址处

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

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

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

大家通过阅读汇编代码,上下文联系应该就可以分析出来,递归调用时候的每次参数递减,进行累加求和,正因为逻辑与运算的短路特点会先判断左边num的值是否减到了0来决定是否还算右边的表达式,汇编代码对应num为0时JE比对跳转到return处;而为假时继续计算右边表达式,进行call命令递归调用,栈地址不断变化直至0结束return返回。

大家仔细体会!

以上就是逻辑与运算中短路的特点以及运用短路来实现语句中断的例子!逻辑或原理也相同,大家可以自行实验!欢迎讨论!

驳“C语言无用”论

近些年编程发展迅猛,又出新语言go、swift等新语言,php号称世界上最好的语言,python又因为人工智能火了一把。于是人们纷纷把目光聚集在这些新秀上,而忘了C/C++这些老牌语言,甚至被冠上“C语言无用”“C语言淘汰”的帽子

下面笔者针对一些现象逐一反驳:

1. C语言只能写黑窗口程序,做不了界面可视化程序。跟不上潮流了
事实上,C语言并不是不能做,而是不擅长做。反之,其他语言擅长的能做,不擅长的做都做不了。这就是差距!
由于C语言的跨平台、可移植性的特性,可以做,在已知领域,还未发现C语言做不了的东西!

2. C语言语法难,容易出错,不适合入门
由于C语言历史早的原因,存在多个标准,让C语言不好判定对错。但这些也正是C语言书写灵活的优点。试问,还有哪个语言有世界乱码大赛呢?

3. C语言不安全,指针不好用
事实上,正是因为有指针,让C语言变得与众不同,指针才是C语言的核心,也是衡量一个C程序员功底深厚与否的标准之一。同样,C语言不安全,只是写代码的人写的代码不安全。C语言充分相信程序员,因此,也需要你具备足够的能力能够驾驭的了C语言!
所以,不要说C语言不安全,而要看自己是否具备驾驭它的能力!

C++
与“C语言逆向之表达式短路分析及应用 驳“C语言无用”论”相关推荐
C语言逆向之表达式短路分析及应用
C语言逆向之表达式短路分析及应用

C语言逆向之表达式短路分析及应用 C语言逆向之表达式短路分析及应用 大家在学习C语言过程中,可能会见到过一些这样的题,就是表达式短路,表达式短路主要体现在C语言中逻辑运算符&&和||。今天将对表达式短路的做逆向分析,来深入理解它。 首先利用表达式短路,我们可以写一个很经典的累加求和的函数,代码如下: 功能很简单,就是求1+2+…+99+100的数

2023-06-26 19:13:18
C语言中左值和右值的区别 C语言逆向之表达式短路分析及应用
C语言中左值和右值的区别 C语言逆向之表达式短路分析及应用

C语言中左值和右值的区别 C语言中左值和右值的区别 在C语言学习过程中,大家或许听到过左值和右值的概念,甚至在调试程序时编译器也会给出”leftoperandmustbel-value”即左操作数必须为左值!,今天我们将为大家详细解释这两个词,以及两者的区别! 简单而言,在赋值运算符“=”左边的就是左值,在赋值运算符“=&r

2023-06-26 19:19:27
C语言逆向之表达式短路分析及应用 关于c语言的一些概述性问题
C语言逆向之表达式短路分析及应用 关于c语言的一些概述性问题

C语言逆向之表达式短路分析及应用 C语言逆向之表达式短路分析及应用 大家在学习C语言过程中,可能会见到过一些这样的题,就是表达式短路,表达式短路主要体现在C语言中逻辑运算符&&和||。今天将对表达式短路的做逆向分析,来深入理解它。 首先利用表达式短路,我们可以写一个很经典的累加求和的函数,代码如下: 功能很简单,就是求1+2+…+99+100的数

2023-07-16 10:08:23
C语言逆向之表达式短路分析及应用 编程入门为什么要先要学C语言
C语言逆向之表达式短路分析及应用 编程入门为什么要先要学C语言

C语言逆向之表达式短路分析及应用 C语言逆向之表达式短路分析及应用 大家在学习C语言过程中,可能会见到过一些这样的题,就是表达式短路,表达式短路主要体现在C语言中逻辑运算符&&和||。今天将对表达式短路的做逆向分析,来深入理解它。 首先利用表达式短路,我们可以写一个很经典的累加求和的函数,代码如下: 功能很简单,就是求1+2+…+99+100的数

2023-06-26 19:27:31
C语言逆向之表达式短路分析及应用 客评价谭浩强C语言书到底好不好
C语言逆向之表达式短路分析及应用 客评价谭浩强C语言书到底好不好

C语言逆向之表达式短路分析及应用 C语言逆向之表达式短路分析及应用 大家在学习C语言过程中,可能会见到过一些这样的题,就是表达式短路,表达式短路主要体现在C语言中逻辑运算符&&和||。今天将对表达式短路的做逆向分析,来深入理解它。 首先利用表达式短路,我们可以写一个很经典的累加求和的函数,代码如下: 功能很简单,就是求1+2+…+99+100的数

2023-06-26 19:33:03
C语言逆向之表达式短路分析及应用 C语言自定义函数如何返回数组(下)
C语言逆向之表达式短路分析及应用 C语言自定义函数如何返回数组(下)

C语言逆向之表达式短路分析及应用 C语言逆向之表达式短路分析及应用 大家在学习C语言过程中,可能会见到过一些这样的题,就是表达式短路,表达式短路主要体现在C语言中逻辑运算符&&和||。今天将对表达式短路的做逆向分析,来深入理解它。 首先利用表达式短路,我们可以写一个很经典的累加求和的函数,代码如下: 功能很简单,就是求1+2+…+99+100的数

2023-06-26 19:17:22
C语言逆向之表达式短路分析及应用 C语言自定义函数如何返回数组(上)
C语言逆向之表达式短路分析及应用 C语言自定义函数如何返回数组(上)

C语言逆向之表达式短路分析及应用 C语言逆向之表达式短路分析及应用 大家在学习C语言过程中,可能会见到过一些这样的题,就是表达式短路,表达式短路主要体现在C语言中逻辑运算符&&和||。今天将对表达式短路的做逆向分析,来深入理解它。 首先利用表达式短路,我们可以写一个很经典的累加求和的函数,代码如下: 功能很简单,就是求1+2+…+99+100的数

2023-06-26 19:21:26
 驳“C语言无用”论
驳“C语言无用”论

关于c语言的一些概述性问题 关于c语言的一些概述性问题 1.c语言规定,变量命名必须符合标识符的命名规则,例如:floatUS$这样就是错误的,因为出现了非法字符:$ 2.在整形常量中,不可包含”,“,比如:1,200 3.指数后面必须为指数;若想要表示字符”\”,应该写为:”\“ 4.

2023-06-26 19:33:47