C语言与汇编语言对照分析_第1页
C语言与汇编语言对照分析_第2页
C语言与汇编语言对照分析_第3页
免费预览已结束,剩余17页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

汇编代码:if.else结构比较固定,通常包含cmp指令、 jcc 指令以及满足条件后执行的指令块。if.else结构可以串联,串联后的if.else有明显的代码块边界,逆向工具通常可以将代码块标识出来(图中虚线)。二、 switch.case1. 一个简单 switch.case汇编代码:上图显示了switch.case基本的结构: a) 跳转表达式; b) 分支代码; c) 跳转表a) 跳转表达式其中 loc_401235代码块对应switch.case中 default分支。当 ngameevent 4时,跳转到loc_401235代码块,即default分支。当 ngameevent = 4时,根据跳转表达式进行跳转:jmpds:off_40123cngameevent*4其中 off_40123c为跳转表地址,跳转表中每一项代表一个32 位地址( 4 个字节),当 ngameevent为 0 按第一项地址跳转,当ngameevent为 1 按第二项地址跳转,依次类推。b) 分支代码各个分支的处理逻辑都在这里,示例代码中仅仅简单的调用对应函数。( ps:这里用jmp而不用 call 是编译器优化的结果)c) 跳转表跳转表实际是一个地址数组,存放了每个跳转分支的地址(32 位绝对地址),当ngameevent为 0 时,跳转表达式读取数组中第一项数据(0x0040121c) ,即上面的代码有两个特点:i. 最小 case 值非 0上图中最小case 值为 3,为了不浪费跳转表空间,编译器会将索引值减去3 保证最小的 case 值对应跳转表中的第一项。ii. case值不连续编译器会在跳转表间隔中插入default跳转,保证逻辑正确。(以空间换取时间)3. 双重跳转表汇编代码:汇编代码:这里没有跳转表结构,只剩下cmp/jcc指令,可见编译器已经将swtich.case转换为等价的 if.else 。但在转换过程中,编译还是做了力所能及的优化:通过二叉查找法加快跳转分支的查找。5. 嵌套 switch.case可以看出嵌套的switch.case结构在汇编代码上是相对独立的,外层和内层switch结构有各自的跳转表。外层跳转表:内存跳转表(双重跳转表):根据跳转表中的地址项,也可以清楚的区分外层和内层的跳转分支。三、 循环语句a) for循环汇编代码:其中 nop dword ptreax+00h为指令对齐,没有实际意义。循环的汇编实现为:b) while循

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论