Kernel32.dll!BaseInitializeContext 反编译源码

近期反编译CreateProcessInternalW中的一小段函数:

BaseInitializeContext 为Kernel32.dll文件中一内部函数,其作用为即将创建的线程初始化上下文CONTEXT的结构。
由于每个OS及补丁的版本不同,Kernel32.dll都不尽相同。下文例子所使用的相关文件信息如下:

Kernel32.dll 的文件信息:

文件版本: 5.1.2600.5512 (xpsp.080413-2111)

MD5: BF1CDAF5792B78D4730727FACF307D46

 


      在汇编中,为结构成员赋值,通常的做法为把该结构的基地址传给一个寄存器,然后再用[register+offset]的方式来表示这个成员。这个函数中用到的最重要的结构就是CONTEXT了,下图为其成员偏移。有了这个图,就可以更轻松的理解汇编所表达的意思了。

      注意:如果结构变量为一栈变量(与当前代码所使用的堆栈相同),则变量的表示一般为[ebp-var_off],该变量的成员就直接表示为[ebp-var_off+mem_off]。var_off指代变量在栈中的基址,mem_off为结构成员的偏移,同上一种表示方法中的offset。

 

CONTEXT结构成员偏移图


void WINAPI BaseInitializeContext(CONTEXT* pContext, PPEB pPeb, PVOID pEntryPoint, DWORD dwInitESP, DWORD dwEipType)
{
l_7C810433:
 pContext->SegGs = 0;
 pContext->Eax = pEntryPoint;
 pContext->Ebx = pPeb;
 pContext->SegDS = pContext->SegES = pContext->SegSS = 0x20;
 pContext->SegFS = 0x38;
 pContext->SegCS = 0x18;
 pContext->EFlags
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值