首页 > 编程知识 正文

汇编语言指令集(汇编语言inc指令)

时间:2023-05-06 09:57:04 阅读:65763 作者:4380

前言

在OD上玩了几个crackme,但要通过验证,必须导航到生成序列号的代码段。 基本的想法有两个方向。 一个是沿着输入数据流走。 既然验证与输入有关,输入数据就一定会参与序列号的验证过程。 第二,根据软件本身存在的某些字面特征(例如,显示验证通过或失败的对话框),反向触摸芋头表达式。

内存操作

NOP (无操作)执行此指令对寄存器、内存和堆栈没有任何影响。

推式将操作数推入堆栈。

PUSHAD指令将所有通用寄存器的内容按一定顺序推入堆栈

POP堆栈:提取堆栈顶部的第一个字符或第一个值,并将其存储在指定的目标地址存储器单元中。

POPAD这个指令与PUSHAD正好相反,从堆栈中获取值,并将它们放入适当的寄存器中。

MOV该命令包括:MOV EAX、EBX; EBX值被分配给EAX。

LEA采用与MOV指令相似的地址指令,但第一个操作数为通用寄存器,第二个操作数为内存单个。

XCHG交换寄存器/存储器单元和寄存器该指令交换两个操作数的值,例如:XCHG EAX,ECXEAX的值保存在ECX中。

数学指示

INC和DEC这两个命令分别执行增加和减少的操作,如果是INC命令则加1,如果是DEC命令则减1。

ADDADD指令有两个操作数,相加的结果存储在第一个操作数中。 ADD EAX,1等效于INC EAX。

ADC进位加法。 在这种情况下,将进位标志的值与两个操作数的和相加,并将结果存储在第一个操作数中。

SUB这个命令与ADD正好相反。 将第一个操作数减去第二个操作数后的值存储在第一个操作数中。

SBB此指令与ADC正好相反,它计算两个操作数之间的差异,还减去进位标志,并将结果存储在第一个操作数中。

无MUL符号数的乘法有两种乘法。 第一个是MUL,这是无符号数的乘法,只有一个操作数,另一个操作数是EAX,结果存储在EDX:EAX中。

IMUL有符号数的乘法运算,IMUL指令的使用方法与MUL相似。 IMUL ECX此命令将有符号ECX乘以EAX存储在EDX:EAX中。

DIV除法指令。 被除数和操作结果商放在EAX上,馀数放在EDX上。

CDQ本来在EAX中有一个值,可以是正的,也可以是负的,但CDQ会将这32位扩展到64位。 变成EDX:EAX的形状。 其中,EDX中的值是EAX中的最高位,也称为符号位。 过去,指令集规定除数必须是被除数的一半长度,并一直沿用。 如果IDIV有符号除法除数为32位,被除数当然需要64位。 然后,使用EDX扩展EAX的符号位,在不改变EAX值的情况下扩展到64位。

逻辑操作

AND、OR、XOR、notand、或异或、非

比较和条件跳转

CMP此指令比较两个操作数,这相当于SUB指令,但减法机制不保存在第一个操作数中。 如果两个操作数相等,则只需根据减法结果更改零标志的位,则零标志的位置为1。 CMP EAX、ECX和EAX将从ECX中减去。 这些值保持不变,但根据减法结果确定零标志位z是否设置为1。

在TEST逻辑比较中,该指令在一定程序上类似于CMP指令,其中两个数字被与操作并且不存储结果,但是改变相应的标志位(例如,SF、ZF、PF标志位),并且程序基于结果对应以下是:测试EAX,EAX的一些示例。 如果把EAX和自己比较一下呢? 使用此命令可以确定EAX是否为0。

jmp跳转到je,JZ如果结果为零,则跳转到JNE,jnz如果结果不为零,则跳转

js-如果结果为负,则跳转到jns -如果结果为非负,则跳转到jp;jpe -如果结果1的个数为偶数,则跳转到jns

JNP,jnpe-如果结果为1,则跳至jo;如果结果溢出,则跳至jno;如果结果未溢出,则跳至JB;如果结果小于jnae,则跳至(无符号数) ) ) ) ) ) )。

JNB,Jae-如果大于或等于,则跳转(无符号数) JBE,jna )如果小于或等于,则跳转(无符号数);如果大于或等于,则跳转(无符号数)

JL,jnge-以下为跳跃(有符号数) JNL,jge )以上为跳跃;有符号数) JLE,jng )以下为跳跃(有符号数)

JNLE,jg大于时跳(带符号数) ) ) ) ) ) ) ) )。

跳跃命令

CALL进入指定的子程序,操作数成为目标地址。 将当前EIP推入堆栈进行迁移相当于推式EIP,JMP []。

RET返回调用方,相当于POP EIP。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。