Closed. This question is off-topic。它当前不接受答案。
                            
                        
                    
                
                            
                                
                
                        
                            
                        
                    
                        
                            想改善这个问题吗? Update the question,所以它是on-topic,用于堆栈溢出。
                        
                        3年前关闭。
                                                                                            
                
        
我正在为REing一个用于学校的程序而工作,有两行我似乎不太清楚。


首先是程序调用GetCurrentProcess,然后下一行是:
LEA eax, -something-

我们为什么要那样做?阅读GetCurrentProcess时,我发现它会返回当前进程的句柄,并将该句柄的值放在eax中。
现在,为什么程序要用eax删除lea中返回的值?如果根本不使用返回值,为什么还要调用此函数呢?


还有什么其他GetCurrentProcess可以证明其合理性吗?

最佳答案

在Windows操作系统下,您始终可以通过伪句柄访问当前进程,该伪句柄的值为(HANDLE)-1。该值肯定是您发现直接在第二行的eax中加载的值,但这也是GetCurrentProcess()返回的值。
如果我很好地理解您是对软件进行逆向工程,我认为原始程序员决定从一个系统传递到另一个系统,从常量(HANDLE)-1GetCurrentProcess(),或者通过反向传递而忘了注释掉前者选择。
您做出的任何选择都不应出现副作用。
有关更多信息,请参见https://msdn.microsoft.com/en-us/library/windows/desktop/ms683179(v=vs.85).aspx

08-16 11:18