|
楼主 |
发表于 2010-10-6 23:35:28
|
显示全部楼层
麻烦TA给注释一下,这几句代码不太明白
谢谢
BOOL CallAddrHook(PVOID StartAddr,PVOID OldAddr,PVOID NewAddr,ULONG Size)
{
PUCHAR cPtr, pOpcode;
ULONG Length,Tmp;
for (cPtr=StartAddr;(ULONG)cPtr<(ULONG)StartAddr+Size;cPtr += Length)
{
Length = SizeOfCode(cPtr, &pOpcode);//计算当前指令长度
if (!Length) break;
if (Length ==5 && *cPtr==0xE8)// 当前长度5 且第一字节为E8
{//因为CALL用的是相对偏移 所以我们还需要进行计算相对偏移
if ( (ULONG)OldAddr-(ULONG)cPtr-5 == *(PULONG)(cPtr+1)) //判断当前是否为OldAddr的CALL相对地址
{
Tmp=(ULONG)NewAddr-(ULONG)cPtr-5;//我们的CALL地址相对偏移
MemOpen();
*(PULONG)(cPtr+1)=Tmp;//直接替换为我们的FAKE函数地址 (微点在这里不是直接替换它的FAKE地址 还加了一层跳板)
MemClose();
return TRUE;
}
}
}
return FALSE;
} |
|