恶意代码汇编基础.ppt

  1. 1、本文档共42页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
恶意代码汇编基础 2023/3/42 汇编基础汇编是逆向工程的基础;汇编语言是一切程序的起点和终点,毕竟所有的高级语言都是建立在汇编基础之上的。在许多高级语言中我们都需要相对明确的语法,但是在汇编中,我们会使用一些单词缩写和数字来表达程序。2023/3/43 I. 单元、位和字节BIT(位)?-?电脑数据量的最小单元,可以是0或者1。 例=?1=?2=?3????? ·BYTE(字节)?-?一个字节包含8个位,所以一个字节最大值是255(0-255)。为了方便阅读,我们通常使用16进制来表示。 ·WORD(字)?-?一个字由两个字节组成,共有16位。一个字的最大值是0FFFFh?(或者是?65535d)?(h代表16进制,d代表10进制)。 ·DOUBLE?WORD(双字DWORD)?-?一个双字包含两个字,共有32位。最大值为0FFFFFFFF?(或者是?4294967295d)。 ·KILOBYTE(千字)?-?千字节并不是1000个字节,而是1024?(32*32)?个字节。 ·MEGABYTE?-?兆字节同样也不是一兆个字节,而是1024*1024=1,048,576?个字节2023/3/44 II. 寄存器寄存器是计算机储存数据的“特别地方”。你可以把寄存器看作一个小盒子,我们可以在里面放很多东西:比如名字、数字、一段话……如今Win+Intel CPU组成的计算机通常有9个32位寄存器 (w/o 标志寄存器)。它们是:EAX:?累加器 EBX:?基址寄存器 ECX:?计数器 EDX:?数据寄存器 ESI:?源变址寄存器 EDI:?目的变址寄存器 EBP:?扩展基址指针寄存器 ESP:?栈指针寄存器 EIP:?指令指针寄存器2023/3/45 通常来说寄存器大小都是32位 (四个字节) 。它们可以储存值为从0-FFFFFFFF (无符号)的数据。起初大部分寄存器的名字都暗示了它们的功能,比如ECX=计数,但是现在你可以使用任意寄存器进行计数 (只有在一些自定义的部分,计数才必须用到ECX)。当我用到EAX、EBX、ECX、EDX、ESI和EDI这些寄存器时我才会详细解释其功能,所以我们先讲EBP、ESP、EIP。2023/3/46 EBP:?EBP在栈中运用最广,刚开始没有什么需要特别注意的?;)?ESP:?ESP指向栈区域的栈顶位置。栈是一个存放即将会被用到的数据的地方,你可以去搜索一下push/pop?指令了解更多栈知识。? EIP:?EIP指向下一个将会被执行的指令。2023/3/47 寄存器的类型还有一件值得注意的事:有一些寄存器是16位甚至8位的,它们是不能直接寻址的。2023/3/48 32位寄存器通常一个寄存器可以这样看: 由图可知,EAX是这个32位寄存器的名字,EAX的低16位部分被称作AX,AX又分为高8位的AH和低8位的AL两个独立寄存器。2023/3/49 i. 单字节寄存器顾名思义,这些寄存器都是一个字节 (8位) AL?and?AH BL?and?BH CL?and?CH DL?and?DH2023/3/410 ii. 单字(16位)寄存器: 这些寄存器大小为一个字 (=2 字节 = 16 位)。一个单字寄存器包含两个单字节寄存器。我们通常根据它们的功能来区分它们。1 通用寄存器?AX?(单字=16位)?=?AH?+?AL?->?其中‘+’号并不代表把它们代数相加。AH和AL寄存器是相互独立的,只不过都是AX寄存器的一部分,所以你改变AH或AL?(或者都改变)?,AX寄存器也会被改变。? ->?'accumulator'(累加器):用于进行数学运算 BX?->?'base'(基址寄存器):用来连接栈(之后会说明) CX?->?'counter'(计数器): DX?->?'data'(数据寄存器):大多数情况下用来存放数据 DI?->?'destination?index'(目的变址寄存器):?例如将一个字符串拷贝到DI SI?->?'source?index'(源变址寄存器):?例如将一个字符串从SI拷贝2023/3/411 2. 索引寄存器(指针寄存器):?BP?->?'base?pointer'(基址指针寄存器):表示栈区域的基地址 SP?->?'stack?pointer'(栈指针寄存器):表示栈区域的栈顶地址2023/3/412 3. 段寄存器:CS?->?'code?segment'(代码段寄存器):用于存放应用程序代码所在段的段基址(之后会说明) DS?->?'data?segment'(数据段寄存器):用于存放数据段的段基址(以后会说明) ES?->?'extra?segment'(附加段寄存器):用

文档评论(0)

beautyeve + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

认证主体黄**

1亿VIP精品文档

相关文档

相关课程推荐