破解汇编知识

本文详细介绍了汇编语言中的寄存器,包括通用寄存器、堆栈指针寄存器ESP、基址指针寄存器EBP、源变址寄存器ESI和目的变址寄存器EDI的作用和用法,并通过实例解释了EIP和FLAGS寄存器。此外,还简要讨论了段寄存器和常用的汇编指令,以及高级语言程序如何转化为汇编代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

寄存器
     所要了解的是8个32位的寄存器,分别是eax,ebx,ecx,edx,esp,ebp,edi,esi
     eax-edx这四个是通用寄存器,虽然各个都有各自的用途,不过你可以用它们来做任何事!是32位的,自然有低位和高位,我们又可以通过ax,bx,cx,dx来访问其低十六位,但高十六位是无法访问的!比如eax=12345678h,那么低十六位ax=5678h!而十六位的自然也有低位和高位,不过高八位是可以访问的,如ax可以分为ah和al,看字面就知道,ah(high)高八位,al就为低八位了!前面的例子,ax=5678h,那么ah=56h,al=78h!这四个寄存器主要是用来暂放计算结果或什么什么的!
     esp-esi这四个主要是寻址时用来存放偏移或指针,所以,也就称为指针寄存器或变址寄存器了~如在OD中看到的[eax],其实eax中存放的是一个内存地址,而实际要访问的是那个内存地址里的内容!
     esp(堆栈指针寄存器):
        很重要的一个概论,堆栈有着先进后出的特点,就好像有一个圆柱形的筒子,该直径刚好是一个乒乓球的直径,所以最先放进去的球当然会最后出来.而esp呢,永远是指着最顶的那个球的,也就是永远都指向栈顶!在od中也很常见了,比如push和pop就是对栈的操作,push把一个数据压入栈中,也就是把一个球放进去,再去调用push时就再放进一个,而esp则指向第二个放进去的那个球了!使用pop呢就从栈中弹出一个数据,前面说了,堆栈有着先进后出的特点,所以用pop呢就从最后放进去的那个球先出了(除非你破坏筒子(破坏堆栈?那是不可能的,程序马上死给你看))!而esp还是指向栈顶!
     取个代码例子:
     (1) mov ecx, 100<---------100传入ecx
     (2) mov eax, 200<---------200传入eax
     (3) push ecx <------------ecx先进了
     (4) push eax<-------------再来是eax
     (5) pop ebx<--------------从栈顶取出一个,也是最后进去的那一个,结果存到ebx
     (6) pop ecx<--------------从栈顶取出一个,也就是刚刚先进去的那个了,结果存到ecx
最后ebx=200,ecx=100

备注别人发布的文章上边push语句有误,我已经改正过来了。


     到了win32的平台下,api

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值