大家。我有一个项目调用一些函数来获取时间,如
time_t t =时间(NULL);
#ifndef _WIN32
timespec ts;
if( -1 == clock_gettime(CLOCK_MONOTONIC,&ts) )
GenErrnoErr()
return uint64( ( ((uint64)ts.tv_sec*1000 + (uint64)ts.tv_nsec/1000000) - m_uBaseTime ) * ms_dTimeRatio ) ;
#else
LARGE_INTEGER uTime;
QueryPerformanceCounter(&uTime);
return uint64( ( uint64(uTime.QuadPart/CFrequency::Instance().Get().QuadPart) - m_uBaseTime ) * ms_dTimeRatio );
#endif
`
我将wana挂钩所有这些时间func,而不更改代码存在。当它调用时间(NULL)或其他函数时,它返回我伪造的时间。
答案 0 :(得分:1)
完成此类操作的常用方法是使用链接器的--wrap
选项。它的工作原理如下:
time(...)
,请将其命名为__wrap_time(...)
; time()
功能,请实际拨打__real_time()
; --wrap=time
。这将使链接器将任何其他模块的调用链接到time()
到__wrap_time()
,但仍然允许通过time()
调用原始__real_time()
函数。 / LI>
醇>
因此:
// Need this to satisfy the compiler
extern time_t __real_time(time_t *seconds);
time_t __wrap_time(time_t *seconds) {
if (seconds==NULL) {
return 0;
} // if
return __real_time(seconds)
} // __wrap_time(seconds)
答案 1 :(得分:0)
将过程中的函数绕过钩子。您需要注入一个dll来挂钩它,并在原始函数结尾中的钩子函数地址中添加一个jmp。更多信息也会有所帮助......