如何使用Deviare编写输出结构字段

本文关键字:输出 结构 字段 何使用 Deviare | 更新日期: 2023-09-27 18:07:54

我可以使用Deviare来钩住和拦截GetLocalTime函数,但是我如何改变其out参数的字段值,即在SYSTEMTIME中编辑wYear ?我可以找到几个片段使用NktHookCallInfo.Result,不幸的是它是一个void函数,直接赋值给Field(0).Value没有任何作用。

CreateHook("kernel32.dll!GetLocalTime", (int)eNktHookFlags.flgOnlyPostCall);

private static void OnFunctionCalled(NktHook hook, NktProcess process, NktHookCallInfo info)
{
    NktParamsEnum param = info.Params();
    NktParam value = param.First().Evaluate();
    for (int i = 0; i < 8; i++)
    {
        NktParam field = value.Field(i);
        Console.WriteLine("{0} {1} {2}", field.Name, field.TypeName, field.Value);
    }
}

void WINAPI GetLocalTime(
  _Out_ LPSYSTEMTIME lpSystemTime
);
typedef struct _SYSTEMTIME {
  WORD wYear;
  WORD wMonth;
  WORD wDayOfWeek;
  WORD wDay;
  WORD wHour;
  WORD wMinute;
  WORD wSecond;
  WORD wMilliseconds;
} SYSTEMTIME, *PSYSTEMTIME;

如何使用Deviare编写输出结构字段

基于评论的答案是:使用UShortVal