栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

[逆向]C语言表达式,通过反汇编去理解C语言

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

[逆向]C语言表达式,通过反汇编去理解C语言

一.前言

今天开始进入C语言,汇编枯燥的基础已经讲的差不多了,但远远没有结束,汇编会伴随我们逆向全程,C语言这部分的内容除了加入总的专栏软件逆向工程,还专门创建了个C语言分类,我所写的C语言文章,大多也是从反汇编的角度去理解C语言,今天文章的主要内容是C语言表达式,程序中大部分都是表达式,所以表达式是至关重要的

二.C语言表达式

定义:用运算符号链接起来的式子叫做表达式,运算符号包括算术符号 逻辑符号 加减乘除 或 取反 异或 取余 大于等于等.

譬如,a+b;这是表达式,b;这也是表达式,正数+b 前面有个正号 符号省略了

三.表达式举例以及它的反汇编

如上面两图,a,b是参数,调用时分别赋值1和2,c是变量,初始值为0.

由此写出:

表达式1: c=a+b*2,它的反汇编如下图所示

关键点:这里主要是通过lea寻址的方式

 表达式2:c=(a+b)*2;它的反汇编如下图所示

关键点:这里主要是移位的方式,一般乘法2的倍数就用移位运算

 表达式3:c=(a+b)*3;它的反汇编如下图所示

关键点:不是2的倍速就用乘法,编译器默认的是有符号的

 表达式4:c=(a+b)*3/2;它的反汇编如下图所示

关键点:除法一定记得符号扩展,这里是cdq,除以2也是移位右移一位

 表达式5:c=a+1*4/b;它的反汇编如下图所示

关键点:1*4,直接就赋值4,除法一定记得符号扩展

 表达式6: c=a+1*4/b%3;它的反汇编如下图所示

关键点:除法符号扩展,add eax,edx,为啥加edx,余数在edx里

 表达式7:c=a+b|3;它的反汇编如下图所示

关键点:加法运算的优先级比逻辑运算高

 表达式8:c=a+b|3-a&2;它的反汇编如下图所示

关键点:先算and再算or,And优先级高于or

 表达式9:c=a++;c=++a;以及它们的反汇编如下图所示

关键点:由反汇编很明显可以看出一个是先赋值再自加,另一个是先自加再赋值,根本不需要死记硬背,看反汇编秒懂,可以这样说,再骚的操作,看反汇编就搞得懂


今天的文章就到这里了,如果有任何不明白的地方欢迎与我交流,我必定知无不言。这篇文章也花了一定的心血,喜欢的小伙伴可以点赞关注哦。感激不尽!

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/974937.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号