标志位
在逆向中需要关心的标志位有三个,即cmp指令能修改的那三个:Z/O/C。
Z标志位(0标志),这个标志位是最常用的,运算结果为0时,Z标志位置1,否则置0。
O标志位(溢出标志),在运行过程中,如操作数超出了机器能表示的范围则称为溢出,此时OF位置1,否则置0。
C标志位(进位标志),记录运算时从最高有效位产生的进位值。例如执行加法指令时,最高有效位有进位时置1,否则置0。
逻辑运算
AND(与):二者均为1时结果为1,其余情况为0。
OR(或):两者皆为0时结果为0,其余情况为1。
XOR(异或):二者不同时结果为1(例如0和1时、1和0时),否则结果为0。
NOT:直接取反,0->1,1->0。
关于text指令
test指令格式:test dest,src
该指令和and指令一样,对两个操作数进行按位的‘与’运算,唯一不同之处是不将‘与’的结果保存到dest。即本指令对两个操作数的内容均不进行修改,仅是在逻辑‘与’操作后,对标志位重新置位。该指令的绝大部分实战形态都是:test eax,eax(若eax的值为0,则Z标志位置1)。