使用OllyDbg从零开始Cracking(5)

2019-04-08 21:24

按F7键,执行指令DEC EAX,EAX将会由1变成0。

也可以增加或者减少内存单元中的值。

上面的内存单元并不会增加1,而是引发异常,因为该内存地址我们不具有写权限。

如果这里有写权限的话,结果会是怎么样的呢?我们去数据窗口查看405000地址。

反过来读取,就会是00001000,增加1的话,就变成00001001。

这是给DWORD这个4字节的值增加1的情况。 对于WORD来说增加1到最后两个字节中。

对于BYTE来说增加1到最后一个字节。

ADD

21

ADD指令有两个操作数,相加后的结果存放到第一个操作数中。ADD EAX,1等价于INC EAX。ADD也将两个寄存器相加,我们可以到OD里面看一看。

执行该语句之前:

在我的机器上EAX的值是00000000,ECX的值是12FFB0。你的机器上可以是其他的值,你可以自己修改它们,当你按下F7键,这两个寄存器相加,结果存放到EAX中,一起来看看。

由于EAX被修改了,所以变成了红色,相加的结果保存在其中。 也可以将寄存器与内存单元的内容相加。

在这种情况下,是否对该内存地址具有写权限都没有问题,因为相加的结果是存放到EAX寄存器中的,[405000]内存单元的值并没有改变。因为并不会引发异常。 按下F7键之前,EAX的值为0,405000内存单元中的值为00001000。

22

按F7键,计算它们的和。

EAX的初始值是0,现在变成了1000。如果你想把结果存放到内存单元中,我们可以这么写:

在这种情况下,结果存放到405000内存单元中,按下F7键,由于我们对该内存单元没有写权限,当尝试修改该内存单元的值时候,发引发异常。

ADC(带进位的加法)

在这种情况下,两个操作数的和加上进位标志的值,结果存放到第一个操作数中。

这里我们可以看到,EDX的值为21,加上3,已经进位标志,在这里,进位标志为0,按下F7键。

23

看到结果为24。现在双击你的鼠标将进位标志修改为1,然后重复上面的操作。

我们通过修改进位标志,然后重新执行这条指令。

按F7键,看,结果是25。

由于EDX的值为21,然后一个数值3,然后进位标志1,所以结果为25。 SUB

这个指令与ADD刚好相反-它将第一个操作数减去第二个操作数的值存放到第一个操作数中。

24

在我的机器上,执行这条指令之前,寄存器的情况如下:

按下F7键,EAX的0减去2。

16进制的结果为FFFFFFFE,在这个值上面双击鼠标,你可以看到十进制的值为-2。

我们可以看到十进制为-2。

另外也可以使用该指令来计算寄存器的值来寄存器的值,寄存器的值减去内存单元的值。 SUB EAX,ECX

即EAX-ECX的值保存到EAX中。 和

SUB EAX,DWORD PTR DS:[405000]

寄存器EAX减去405000内存单元的值,并将结果保存在EAX中。 SUB DWORD PTR DS:[405000],EAX

这种情况下,由于我们对405000这个内存单元没有写权限,将结果存放到其中的话,会引发一个异常。 SBB

该指令跟ADC正好相反,它计算两个操作数的差值,并且还要减去进位标志,结果存放到第一个操作数中。

25


使用OllyDbg从零开始Cracking(5).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:专业滑板项目可行性研究报告(目录) - 图文

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: