assembly 是否将在程序集中执行此调用?

up9lanfz  于 2022-11-13  发布在  其他
关注(0)|答案(1)|浏览(114)

我假定对18222E214的调用永远不会执行,对吗?

sub     rsp, 28h
mov     byte ptr [rsp+27h], 0
mov     al, [rsp+27h]
test    al, 1
jz      short loc_182C60C26
call    loc_18222E214

这是我正在分析的一个模糊库。

更新

稍后在流指令中只对多个

mov     dword ptr [rsp+20h], 7D9EAD41h
mov     eax, [rsp+20h]
mov     dword ptr [rsp+20h], 4071AA37h
mov     eax, [rsp+20h]
nop // 
mov     dword ptr [rsp+20h], 0D6C6C2CDh
mov     eax, [rsp+20h]
// so on and so forth

感觉就像垃圾堆。

6ljaweal

6ljaweal1#

不应该是这样的。您正在将值0加载到al寄存器中。test al,1设置符号、零和奇偶校验标志,就像执行了and指令一样。如果您在al包含0时执行and al,1,则会设置零标志。
在您得示例中,test指令将设置零标志,因此将执行短跳转,而不执行jz后面得call指令.

更新

既然你编辑了你的问题,说它看起来像是分支被占用,那么很可能有什么你没有抓住。可能性:

  • 有一些代码分支到mov al, [rsp+27h]指令之后的某个指令。
  • 一些多线程代码在您将0放入[rsp+27h]之后,但在您加载al之前,将一些值移动到[rsp+27h]中。
  • 某个其他线程正在调用loc_18222E214
  • 还有一些我没想到的情况。

没有更多信息,无法解决您的问题。

相关问题