@TOC**
IDA反汇编学习(一)跳转指令学习
跳转指令学习
C语言代码:
if(a==b)
{
x=1;
y=1
}
汇编代码:
mov eax, a
cmp eax, b ;a == b?
jne L1 ;否:跳过后续指令
mov X, 1 ;是,X,Y 赋值
mov Y, 2
L1:
对于循环语句,其实也是一样的,也是通过跳转指令来实现。
C语言代码:
while(val1 < val2)
{
val1++;
val2--;
}
汇编代码
mov eax, val1 ;把变量复制到eax中
beginwhile:
cmp eax, val2 ;如果非val1 < val2
jnl endwhile ;退出循环
inc eax ;val1++
dec val2 ;val2--
jmp beginwhile ;重复循环
endwhile:
mov val1,eax ;保存val1的值
其中jne代表不等于时执行
jnl代表大于等于时执行
inc代表自加
dec代表自减
逻辑判断的实现也是通过跳转指令来实现的,具体如下。
C语言代码:
if (a1 > b1) and (b1 > c1)
X = 1
end if
汇编代码
cmp a1, b1 ;第一个表达式
ja L1
jmp next
L1: cmp b1, c1 ;第二个表达式
ja L2
jmp next
L2: mov X, 1 ;全为真:将X置为1
next:
其中ja代表大于执行
jmp代表转移至
jmp与call指令的对比:
jmp无条件跳转,无返回,没有压栈(起到保护数据的作用)。call通过入口地址跳转有返回,返回地址压入堆栈。
下面地址为汇编语言指令速查表
https://wenku.baidu.com/view/314aa7cf58fb770bf78a55ea.html