64位驱动相对偏移的计算E8call

来源:互联网 发布:防网络尖兵方法 编辑:程序博客网 时间:2024/05/22 10:44

fffff800`0417230a e851fcffff      call    nt!PsOpenProcess (fffff800`04171f60)
fffff800`0417230f 4883c438        add     rsp,38h

tempPsOpenProcess = (PBYTE)g_NtOpenProcessAddress + g_PsOpenProcessOffset;
g_PsOpenProcess = (PBYTE)tempPsOpenProcess + *(PINT)((PBYTE)tempPsOpenProcess + 1) + 5;

关于相对偏移的计算一定要使用PINT来转换一次因为E8后面的51fcffff 是一个负数,在32位中使用PDWORD来取得这个值没有任何问题,但是这里因为要把这个取出来的值赋给前面的PBYTE,这里问题就来了,因为64位中PBYTE是8字节所以不会把之前取得的DOWRD前两位FF当做负数来处理,这样就会导致偏移计算出错!!!切记

原创粉丝点击