스피드핵은 기본적으로 타이머와 관련된 함수를 후킹해서 사용합니다.
GetTickCount(), timeGetTime(), QueryPerformanceCounter()
만일 윈도우에서 제공해주는 타이머 함수를 직접 구현한다면???
자료를 뒤져보니 Assemply 로 CPU 시간을 알아내는 코드가 있더군요.
출처 : http://abipictures.tistory.com/353
unsigned __int64 ddwCount;
그런데 실제 돌려보니 CPU 클럭값이 초당 몇번 동작하는지 모르니 적용할려면 좀 노력을 해야할것같네요.
GetTickCount(), timeGetTime(), QueryPerformanceCounter()
만일 윈도우에서 제공해주는 타이머 함수를 직접 구현한다면???
자료를 뒤져보니 Assemply 로 CPU 시간을 알아내는 코드가 있더군요.
출처 : http://abipictures.tistory.com/353
unsigned __int64 ddwCount;
_asm
{
RDTSC
mov DWORD PTR ddwCount, eax
mov DWORD PTR ddwCount+ 4, edx
}
RDTSC(Ream Time Stamp Counter) 은 8x86 CPU에서 CPU의 클럭값을 eax와 edx에 return하는 어셈입니다.
그런데 실제 돌려보니 CPU 클럭값이 초당 몇번 동작하는지 모르니 적용할려면 좀 노력을 해야할것같네요.
int _tmain(int argc, _TCHAR* argv[]) for(int i=0; i<20; i++) if (i>0) memcpy(&tmpTimer, &asmTimer, sizeof(asmTimer)); Sleep(500); |
[1] 4231356696 [139997214] 169 [0] [2] 41459963 [105070563] 170 [1] [3] 90353894 [48893931] 170 [0] [4] 237211070 [146857176] 170 [0] [5] 288734747 [51523677] 170 [0] [6] 361892201 [73157454] 170 [0] [7] 543081920 [181189719] 170 [0] [8] 613704488 [70622568] 170 [0] [9] 675258215 [61553727] 170 [0] [10] 869067653 [193809438] 170 [0] [11] 923720396 [54652743] 170 [0] [12] 987591011 [63870615] 170 [0] [13] 1064402699 [76811688] 170 [0] [14] 1121647946 [57245247] 170 [0] [15] 1170933692 [49285746] 170 [0] [16] 1233143213 [62209521] 170 [0] [17] 1304132819 [70989606] 170 [0] [18] 1383210554 [79077735] 170 [0] [19] 1434673859 [51463305] 170 [0] |