mov ecx, [ebp + var_4]
imul ecx, 4
call dword_1423d4[ecx]
有人可以向我解释这可能意味着什么或将我指向正确的方向吗?为什么调用变量?
#1 楼
dword_1423d4
是指向32位函数指针的全局数组的指针。var_4
是该数组的索引。 call
函数数组。评论
当值是线性时,它是“ switch()”语句的常见表示形式。 var_4是switch()的参数,dword_1423d4是案例处理程序表。
–彼得·弗里
2013年6月25日17:50
@peterferrie-根据我的经验,通常将switch语句编译为使用jmp而不是调用,但是我想在某些情况下编译器可能会选择后者。
–詹森·格夫纳(Jason Geffner)
2013年6月25日21:53
我同意Jason的观点,由于调用并且没有jmp,因此不太可能(尽管不能保证)成为switch语句。可能是自定义函数分派器或其他东西。
– QAZ
2013年6月26日9:39
也同意@JasonGeffner。我从未见过在x86上使用调用指令实现的switch语句(或实际函数调用之外的任何内容)。
–乔纳森·莱因哈特(Jonathon Reinhart)
13年6月28日在5:41
顺便说一下,@ JasonGeffner,我想几年前BlackHat对您的名字听起来很耳熟。
–乔纳森·莱因哈特(Jonathon Reinhart)
13年6月28日在6:00
#2 楼
马上想到的是访问IAT或IVT的某种类型的虚拟化层。我完全同意先前的回答,即这是对函数指针数组中的函数向量的调用。我也同意,它看起来不像switch语句。这就是使我进入中断向量表/地址表的原因。评论
您能否在答案中添加更多详细信息?与上面的答案有何不同?目前,这听起来像是对杰森的答案的赞誉。如果您打算这样做,则可以通过单击旁边的upvote按钮来显示您对另一个答案的同意。无需发布单独的答案。
–asheeshr
13年7月14日在2:30
我肯定在他的回答中错过了对中断向量或地址表的引用。
– David Hoelzer
13年7月14日在2:39
评论
通过引用从指针数组中调用函数?@PSS是什么意思?