跳转指令
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
0x05 TEST 指令
两个数值进行与操作,结果不保存,但是会改变相应标志位
用于确定某寄存器是否为零
0x06 函数
计算机的函数,是一个固定的一个程序段, 或称为一个子程序。它可以实现固定功能同时,有一个入口和一个出口,所谓入后,就是所带的各个参数,通过入口,将函数的参数代入子程序,供计算机处理,所谓出口,就是指函数的计算结果,也称返回值,在计算机求得之后,由此口待会给调用它的程序。
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 函数执行完毕,返回到调用出
相关文章推荐
- ARM中跳转指令BL/BLX偏移值计算规则
- arm的分支(跳转)指令
- 跳转指令与协处理器指令
- powerbuilder P-code 中的JP跳转指令的反向工程
- MIPS的跳转/转移指令
- 关于汇编跳转指令的说明
- jmpi是段间跳转指令
- 小结:9 跳转指令小结
- 比较、跳转指令
- 汇编-条件跳转与重复指令
- 汇编语言-条件跳转指令
- 汇编跳转指令
- 学 Win32 汇编[28] - 跳转指令: JMP、JECXZ、JA、JB、JG、JL、JE、JZ、JS、JC、JO、JP 等
- 条件跳转指令
- 汇编debug程序跳转指令的方法
- 关于汇编跳转指令的说明
- ARM指令集——条件执行、内存操作指令、跳转指令
- 汇编常用跳转指令及检测的标志位
- ARM的B,BL跳转指令偏移值计算
- 【汇编】JMP跳转指令的指令长度、直接转移与间接转移、段内跳转与段间跳转