Assembly x86:条件、跳转和标签的组合
我陷入了对以下代码的解释中。为了简单起见,我将从数据段读取的一些数字替换为直接数字:Assembly x86:条件、跳转和标签的组合,assembly,x86,reverse-engineering,disassembly,Assembly,X86,Reverse Engineering,Disassembly,我陷入了对以下代码的解释中。为了简单起见,我将从数据段读取的一些数字替换为直接数字: L1: fld qword ptr [Data1] fcomp 1.0 fnstsw ax test ah, 01h jz L2 fld qword ptr [Data2] jmp L3 L2: cmp word ptr [Data3], 0001h jnz L4 fld qword ptr [Data4] L3
L1:
fld qword ptr [Data1]
fcomp 1.0
fnstsw ax
test ah, 01h
jz L2
fld qword ptr [Data2]
jmp L3
L2:
cmp word ptr [Data3], 0001h
jnz L4
fld qword ptr [Data4]
L3:
fstp qword ptr [esp+10h]
L4:
fld qword ptr [Data5]
fcomp 1.0
fnstsw ax
test ah, 01h
jz L5
mov qword ptr [Data6], 43.0
L5:
fld qword ptr [Data7]
fcomp 1.0
fnstsw ax
test ah, 01h
jz L6
mov qword ptr [Data7], 53.2
L6:
以下是我对本准则的解释:
double Data1
double Data2
int Data3
double Data4
double Data5
double Data6
double Data7
if Data1<=1.0 || Data3==1
if Data1<=1.0
*(esp+10h)= Data4;
else
*(esp+10h)= Data2;
end
end
if Data5<=1.0
Data6=43.0;
end
if Data7 <= 1.0
Data7=53.2;
end
双数据1
双数据2
int数据3
双数据4
双重数据5
双数据6
双数据7
如果Data1您得到了一些错误的条件。在fcom
之后,如果st0
严格小于操作数(或比较无序),则设置C0
标志(最终设置AH
中的位0)
如果数据1<1.0
*(esp+10h)=数据2;
如果数据3==1,则为else
*(esp+10h)=数据4;
结束
如果数据5<1.0
数据6=43.0;
结束
如果数据7<1.0
数据7=53.2;
结束
if Data1 < 1.0
*(esp+10h)= Data2;
else if Data3 == 1
*(esp+10h)= Data4;
end
if Data5 < 1.0
Data6=43.0;
end
if Data7 < 1.0
Data7=53.2;
end