美文网首页
2019-11-08学习8086

2019-11-08学习8086

作者: 黑小柴 | 来源:发表于2020-02-25 21:39 被阅读0次

通过PEiD查找程序的壳什么类型
通过OllyDBG找到入口点,用管理员权限
通过LordPE来脱壳,dump出转储文件
如果运行不了,通过ImportREC修复转出文件的导入表

OllyDBG四个部分
左上角是CPU指令
右上角为寄存器
左下角为内存
右下角为栈
每个框左边为地址,右边为内容

通用寄存器

8086数据寄存器

AX CX DX BX

AX有两个字节,例:AX=1234H
可分AH,AL(高8位,低8位)

EAX为32位寄存器,E为扩展的意思,其中低16位为AX

image.png
image.png

8086是16位cpu,其物理地址宽度20位
物理地址=段地址*10H+偏移地址


image.png
内存寻址方式
段寄存器
偏移(16b) 主要用途
CS IP 指令寻址
SS SP/BP 堆栈寻址
DS BX/DI/SI或16位数 数据寻址
ES 串指令的DI 串目标寻址

CS:IP
逻辑地址:1000h:500h
物理地址:10500h

命令的地址:CS:IP=CS10H+IP
堆栈指针地址:SS:SP=SS
10H+SP
栈底指针地址:SS:BP=SS*10H+BP

mov ax , [bx]
数据地址:AX=[DS*10H+BX]

SI:源变址寄存器,用来存放相对于DS段之源变址指针
DI:目的变址寄存器,用来存放相对于ES段的变址指针
mov ax, [di] [ES*10h+di]

jmp 相当于 mov ip,一个地址

call 相当于

push ip
jmp 函数地址

push cs
push ip
jmp 函数地址

ret相当于

pop ip

pop ip
pop cs
具体cpu操作:
ip=[ss10h+sp]
sp=sp+2
cs=[ss
10h+sp]
sp=sp+2

div

div bx

被除数 除数 余数
ax 8b al ah
dx:ax 16b ax dx
edx:eax 32b eax edx
标志寄存器
image.png
image.png

判定CF时,把两者当成无符号数,看是否进位
判定OF时,把两者当成有符号数,看是否进位或借位

执行加法指令ADD:
OF标志位根据操作数的符号及其变化情况来设置:若两个操作数的符号相同,而结果的符号与之相反时,OF=1,否则OF=0。溢出位既然是根据数的符号及其变化来设置的,当然他使用来表示带符号数的溢出的。

执行减法指令SUB:
减法的OF位的设置方法为:若两个数的符号相反,而结果的符号与减数的符号相同,则OF=1,除上述情况外OF=0。OF=1说明带符号数的减法运算结果是错误的。

image.png
adc, sbb

adc ax bx (ax=ax+bx+CF)
sbb ax,bx (ax=ax-bx-CF)

image.png
80386通用寄存器:

EAX :累加器”(accumulator index), 它是很多加法乘法指令的缺省寄存器。
EBX :”基地址”寄存器(base index), 在内存寻址时存放基地址。
ECX: 计数器(counter), 是重复(REP)前缀指令和LOOP指令的内定计数器。 、
EDX: 则总是被用来放整数除法产生的余数。
ESI/EDI :分别叫做”源/目标索引寄存器”(source/destination index),因为在很多字符串操作指令中, DS:ESI指向源串,而ES:EDI指向目标串。
EBP:拓展基址指针,指向栈的基本信息,静态指针,通常指向栈底。
ESP:栈顶指针,32位系统通常每次减少4字节。

EIP:扩展指令指针。在调用函数时,这个指针被存储在栈中,用于后面的使用。在函数返回时,这个被存储的地址被用于决定下一个将被执行的指令的地址。

ESP:扩展栈指针。这个寄存器指向栈顶的当前位置,并允许通过使用push和pop操纵或者直接的指针操作来对栈中的内容进行添加和移除。

EBP:扩展基指针。这个寄存器在函数的执行过程中通常是保持不变的。它作为一个静态指针使用,用于指向基本栈的信息,例如,使用了偏移量的函数的数据和变量。这个指针通常指向函数使用栈底部。

相关文章

网友评论

      本文标题:2019-11-08学习8086

      本文链接:https://www.haomeiwen.com/subject/vyyibctx.html