您的位置:首页 > 运维架构

跳转指令

2017-01-19 21:23 155 查看
0x01 JMP指令

JMP ——-> 修改EIP

mov jmp,寄存器/立即数 简写为 jmp 寄存器/立即数

0x02 CALl指令(调用)

push 下一行地址 修改eip

pop eip

call 指令 —–> 将下条指令地址压入栈中(esp - 4),修改eip

ret 指令——> pop eip(esp + 4)

0x03 DEBUG中快捷键

F2 —– 下断点

F3 —– 载入程序

F7 —–

F8 —– 单步执行

堆栈平衡 :函数调用前后,栈顶指针 与栈底指针相同

外平栈 :谁调用谁平衡

0x04 CMP 指令

指令格式:CMP R/M ,R/M/IMM

用来比较两个数,实际上相当于sub指令,但是相减的结构并不保存到第一个操作数中。

只是根据相减的结果来改变零标志,当两个操作数相等时,零标志位置1

mov eax,100
mov ecx,100
cmp eax,ecx

cmp ax,word ptr ds:[edx]


0x05 TEST 指令

两个数值进行与操作,结果不保存,但是会改变相应标志位

用于确定某寄存器是否为零

1、JE /JZ         结果为零则跳转(相等时跳转)   ZF = 1


0x06 函数

计算机的函数,是一个固定的一个程序段, 或称为一个子程序。它可以实现固定功能同时,有一个入口和一个出口,所谓入后,就是所带的各个参数,通过入口,将函数的参数代入子程序,供计算机处理,所谓出口,就是指函数的计算结果,也称返回值,在计算机求得之后,由此口待会给调用它的程序。

PUSH EBP                提升堆栈,为函数执行提供空间
MOV EBP,ESP
SUB ESP,40
PUSH EBP                保留现场:函数执行时会用到一些寄存器但这些寄存器中的值可能会被程序用到,所以先存储到内存中
PUSH ESI
PUSH EDI
LEA EDI,DWORD PTR SS:[EBP-40]               向分配的空间填充数据
MOV ECX,10
MOV EAX,CCCCCCCC
REP STOS DWORD PTR SS:[EDI]
MOV EAX,DWORD PTR SS:[EBP+8]                函数的功能
MOV EAX,DWORD PTR SS:[EBP+C]
POP EDI             恢复现场:将之前保留的寄存器的值恢复
POP ESI
POP EBX
MOV ESP,EBP             降低堆栈
POP EBP             恢复栈底
RETN                函数执行完毕,返回到调用出
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  pop