跳转指令

来源:互联网 发布:哈佛大学学术地位知乎 编辑:程序博客网 时间:2024/05/23 12:01

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                函数执行完毕,返回到调用出
0 0
原创粉丝点击