本帖最后由 yes2 于 2024-8-19 09:42 编辑
[C++] 纯文本查看 复制代码 PK_ERROR_code_t ullNewFuncAddr = (PK_ERROR_code_t)New_PK_CURVE_make_wire_body_2;
::RtlCopyMemory(&pNewData[2], &ullNewFuncAddr, sizeof(ullNewFuncAddr));
你这句的逻辑是要把New_PK_CURVE_make_wire_body_2函数的地址写入到pNewData[2]这个位置,长度上肯定是要指针长度的,PK_ERROR_code_t你没有给出定义,但是我猜应该是4字节。64位指针长度是8字节,少了一半所以出错了。
第一个函数之所以能成功,是因为用的是sizeof(ULONGLONG),够8个字节。两个hook函数基本都一样的东西为啥会有一个使用sizeof(ULONGLONG),另一个使用sizeof(ullNewFuncAddr)?要么是太粗心,要么就是本身对代码也不太理解,东拼西凑来的。
你对每一个需要hook的函数都有一套对应的hook、unhook函数,但是其实可以抽取出来只用一套hook、unhook函数,其中的变量可以通过参数传递,这样就不会出现你这种情况,明明是90%雷同的东西结果还能有一个出错。
另外sizeof(ullNewFuncAddr)是错的,sizeof(ULONGLONG)虽然能用但是其实也不算规范,应该使用sizeof(void*),这样如果迁移到32位,至少也能自适配,少改一点代码就少一点潜在的错误风险。
最后,这种实现方案在多线程下可能会出问题。 |