WEB开发网
开发学院软件开发VC 通用 Thunk 阅读

通用 Thunk

 2008-05-25 21:39:20 来源:WEB开发网   
核心提示: 我们也不能修改返回地址,使它跨过“ADD ESP,N”的指令,通用 Thunk(8),因为这条指令并不总是紧接着CALL指令(调用caller 的CALL指令)(比如 返回类型是double的情况)一个可能的实现是在某个地方保存ESP,在被调用者返回后将它传送回ES

我们也不能修改返回地址,使它跨过“ADD ESP,N”的指令,因为这条指令并不总是紧接着CALL指令(调用caller 的CALL指令)

(比如 返回类型是double的情况)

一个可能的实现是在某个地方保存ESP,在被调用者返回后将它传送回ESP。

让我们来看看第1个实现:

ThisToCdecl 36.h
#define __THIS_TO__CDECL_CODES()          
/*  MOV DWORD PTR [old_esp],ESP  */        
CONST  CODE_FIRST(word,MOV_ESP_TO,0x2589)    
CONST  CODE(dword_ptr,pold_esp,&old_esp)      
                      
/*  POP  ECX  */                
CONST  CODE(byte,POP_ECX,0x59)          
                      
/*  MOV DWORD PTR [old_return],ECX  */      
CONST  CODE(word,MOV_POLD_R,0x0D89)      
CONST  CODE(dword_ptr,p_old_return,&old_return)    
                      
/*  MOV ECX,this  */              
CONST  CODE(byte,MOV_ECX,0xB9)          
    CODE(dword_ptr,m_this,0)          
                      
/*  CALL memFunc  */              
CONST  CODE(byte,CALL,0xE8)            
    CODE(dword,m_memFunc,0)        
                      
/*  MOV ESP,old_esp  */            
CONST  CODE(byte,MOV_ESP,0xBC)          
CONST  CODE(dword,old_esp,0)          
/*  MOV DWORD PTR [ESP],old_retrun  */      
CONST  CODE(word,MOV_P,0x04C7)          
CONST  CODE(byte,_ESP,0x24)            
CONST  CODE(dword,old_return,0)          
/*  RET  */                  
CONST  CODE(byte,RET,0xC3)
1、我们将ESP保存到old_esp中。

上一页  3 4 5 6 7 8 9 10  下一页

Tags:通用 Thunk

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接