如何用 Deviare 写出结构的字段?
How to write to out structure's field with Deviare?
我可以使用 Deviare 来挂钩和拦截 GetLocalTime
函数,但是如何更改其 out
参数的字段值,即在 [= 中编辑 wYear
16=]?我发现很少有片段使用 NktHookCallInfo.Result
,不幸的是它是一个无效函数,直接赋值给 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;
基于评论的答案是:使用UShortVal
我可以使用 Deviare 来挂钩和拦截 GetLocalTime
函数,但是如何更改其 out
参数的字段值,即在 [= 中编辑 wYear
16=]?我发现很少有片段使用 NktHookCallInfo.Result
,不幸的是它是一个无效函数,直接赋值给 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;
基于评论的答案是:使用UShortVal