我正在研究学校的REing计划,有两行我似乎无法弄清楚。
首先是程序调用{{1}},然后下一行是:
GetCurrentProcess
为什么我们会这样做?阅读LEA eax, -something-
我发现它返回当前流程的句柄,将该句柄的值放在GetCurrentProcess
中。
现在为什么程序会删除eax
中使用eax
返回的值?如果它根本没有使用返回值,为什么还要调用这个函数?
lea
还有什么能证明这一点吗?
答案 0 :(得分:4)
在Windows操作系统下,您始终可以通过伪句柄访问当前流程,其值为(HANDLE)-1
。这个值肯定是您在第二行的eax
中直接加载的值,但这也是GetCurrentProcess()
返回的值。
如果我很清楚你正在对一个软件进行逆向工程,我认为最初的程序员决定从一个系统转到另一个系统,从常量(HANDLE)-1
到GetCurrentProcess()
,或者反过来忘了评论出以前的选择。
任何选择都不应产生任何副作用。
有关详细信息,请参阅https://msdn.microsoft.com/en-us/library/windows/desktop/ms683179(v=vs.85).aspx。