【发布时间】:2018-02-04 19:38:13
【问题描述】:
我试图理解一些反汇编代码,但我无法理解这里发生了什么。你能解释一下它的作用吗?
sub ecx, edi
sar edx, 1
mov eax, 2AAAAAABh
imul ecx
mov eax, edx
shr eax, 31
add eax, edx
test eax, eax
jle ...
ecx、edx 和 edi 包含此代码的某种输入值。
我只能假设最后两行可能会像 if(eax <= 0) goto ... 这样工作,但我不确定。
【问题讨论】:
-
ecx、edx、edi和eax是 registers。test指令集cflags为jle等条件指令使用。 -
我的意思是,
ecx、edx和edi寄存器包含此代码块的输入值。 -
ecx通常是一个循环计数寄存器,edi是一个目标寄存器,所以它很可能在一个数组上循环。您需要确定每个寄存器的用途,以确定代码实际在做什么。 -
您知道
mov eax, 2AAAAAABh指令的含义吗?我不认为这是立即有意义的。 -
这个常量在代码中使用了几千次。我不知道这意味着什么。也许,这是某种混淆或数学优化。
标签: assembly disassembly ida