处理模块的句柄

逆向工程 部件
2021-06-16 01:16:03

我在我尝试分析的样本中发现了以下几行。这里是几行:

   ....
   push  afg.00401189       "ntdll.dll" 
   call  GetmoduleHandleW
   neg   eax
   sbb   eax, eax
   neg   eax
   RETN

所以,我不明白 call 指令之后的行。我们在两个否定操作之间有 sbb 指令,但它的目的是什么。有人可以解释一下吗?

PS:直觉上,我会说最后我有EAX中ntdll.dll的句柄……但是call和retn之间的操作很奇怪。我很迷惑。

1个回答

neg / sbb / neg您问题中代码等效于以下 C 代码:

eax = (eax != 0)

换句话说,该函数返回GetModuleHandleW("ntdll.dll") != NULL

neg / sbb / neg此处详细解释了构造:

逆向:逆向工程的秘密,第 A.2.8.1 节。纯算术实现