Assembly IDA代码段,eax移到全局变量中
做《实用恶意软件分析》一书中的练习(实验5-1) 全局变量dword_1008E5C4(第二张图片)应该包含OS版本,但从我看到的情况来看,由于Assembly IDA代码段,eax移到全局变量中,assembly,ida,Assembly,Ida,做《实用恶意软件分析》一书中的练习(实验5-1) 全局变量dword_1008E5C4(第二张图片)应该包含OS版本,但从我看到的情况来看,由于 sub_10003695 我错过什么了吗 是的,setz指令,根据上面的比较结果设置al(eax的一部分)的值。该函数具有以下特征: BOOL WINAPI GetVersionEx( _Inout_ LPOSVERSIONINFO lpVersionInfo ); 因此,它在堆栈上的局部变量(此处引用了rel toEBP)中返回一个结构(或O
sub_10003695
我错过什么了吗
是的,
setz
指令,根据上面的比较结果设置al
(eax的一部分)的值。该函数具有以下特征:
BOOL WINAPI GetVersionEx(
_Inout_ LPOSVERSIONINFO lpVersionInfo
);
因此,它在堆栈上的局部变量(此处引用了rel toEBP
)中返回一个结构(或OSVERSIONINFOEX
,但此处不相关),该字段dwPlatformId
通过
cmp [ebp+VersionInformation.dwPlatformId], 2
指示。值2
表示
操作系统为Windows 7、Windows Server 2008、Windows Vista、Windows Server 2003、Windows XP或Windows 2000
因此,在这些系统上,CMP
设置表示相等的ZERO?
标志。因为ZERO?
标志现在已设置,EAX
仍然为零
setz al
将
EAX
设置为00000001
——作为子例程的返回值。是的,您缺少一些内容。EAX不包含该版本。LEA加载数据所在的地址。当EAX被清除时,它只是将其作为返回值进行清除。哦,谢谢,现在我(大部分)明白了。忘记al是eax:)的一部分,因此对GetVersionExA的调用使用结构填充[ebp+VersionInformation]。我想我对被调用者函数如何更改调用者的局部变量的值有点困惑