1211
This commit is contained in:
194
test/Detours/samples/slept/Makefile
Normal file
194
test/Detours/samples/slept/Makefile
Normal file
@@ -0,0 +1,194 @@
|
||||
##############################################################################
|
||||
##
|
||||
## API Extension to Measure time slept.
|
||||
##
|
||||
## Microsoft Research Detours Package
|
||||
##
|
||||
## Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
##
|
||||
|
||||
!include ..\common.mak
|
||||
|
||||
CFLAGS = $(CFLAGS:/Od=/O2)
|
||||
|
||||
LIBS=$(LIBS) kernel32.lib
|
||||
|
||||
##############################################################################
|
||||
|
||||
all: dirs \
|
||||
$(BIND)\slept$(DETOURS_BITS).dll \
|
||||
$(BIND)\dslept$(DETOURS_BITS).dll \
|
||||
$(BIND)\sleepold.exe \
|
||||
$(BIND)\sleepnew.exe \
|
||||
$(BIND)\sleepbed.exe \
|
||||
\
|
||||
!IF $(DETOURS_SOURCE_BROWSING)==1
|
||||
$(OBJD)\slept$(DETOURS_BITS).bsc \
|
||||
$(OBJD)\dslept$(DETOURS_BITS).bsc \
|
||||
$(OBJD)\sleepold.bsc \
|
||||
$(OBJD)\sleepnew.bsc \
|
||||
$(OBJD)\sleepbed.bsc \
|
||||
!ENDIF
|
||||
option
|
||||
|
||||
##############################################################################
|
||||
|
||||
dirs:
|
||||
@if not exist $(BIND) mkdir $(BIND) && echo. Created $(BIND)
|
||||
@if not exist $(OBJD) mkdir $(OBJD) && echo. Created $(OBJD)
|
||||
|
||||
$(OBJD)\slept.obj : slept.cpp verify.cpp
|
||||
|
||||
$(OBJD)\slept.res : slept.rc
|
||||
|
||||
$(BIND)\slept$(DETOURS_BITS).dll $(BIND)\slept$(DETOURS_BITS).lib: \
|
||||
$(OBJD)\slept.obj $(OBJD)\slept.res $(DEPS)
|
||||
cl /LD $(CFLAGS) /Fe$(@R).dll /Fd$(@R).pdb \
|
||||
$(OBJD)\slept.obj $(OBJD)\slept.res\
|
||||
/link $(LINKFLAGS) /subsystem:console \
|
||||
/export:DetourFinishHelperProcess,@1,NONAME \
|
||||
/export:TimedSleepEx \
|
||||
/export:UntimedSleepEx \
|
||||
/export:GetSleptTicks \
|
||||
/export:TestTicks \
|
||||
/export:TestTicksEx \
|
||||
$(LIBS)
|
||||
|
||||
$(OBJD)\slept$(DETOURS_BITS).bsc : $(OBJD)\slept.obj
|
||||
bscmake /v /n /o $@ $(OBJD)\slept.sbr
|
||||
|
||||
$(OBJD)\dslept.obj : dslept.cpp verify.cpp
|
||||
|
||||
$(OBJD)\dslept.res : dslept.rc
|
||||
|
||||
$(BIND)\dslept$(DETOURS_BITS).dll $(BIND)\dslept$(DETOURS_BITS).lib: \
|
||||
$(OBJD)\dslept.obj $(OBJD)\dslept.res $(DEPS)
|
||||
cl /LD $(CFLAGS) /Fe$(@R).dll /Fd$(@R).pdb \
|
||||
$(OBJD)\dslept.obj $(OBJD)\dslept.res \
|
||||
/link $(LINKFLAGS) /subsystem:console \
|
||||
/export:DetourFinishHelperProcess,@1,NONAME \
|
||||
/export:TimedSleepEx \
|
||||
/export:UntimedSleepEx \
|
||||
/export:GetSleptTicks \
|
||||
$(LIBS)
|
||||
|
||||
$(OBJD)\dslept$(DETOURS_BITS).bsc : $(OBJD)\dslept.obj
|
||||
bscmake /v /n /o $@ $(OBJD)\dslept.sbr
|
||||
|
||||
$(OBJD)\sleepold.obj : sleepold.cpp verify.cpp
|
||||
|
||||
$(BIND)\sleepold.exe : $(OBJD)\sleepold.obj $(DEPS)
|
||||
cl $(CFLAGS) /Fe$@ /Fd$(@R).pdb $(OBJD)\sleepold.obj \
|
||||
/link $(LINKFLAGS) $(LIBS) \
|
||||
/subsystem:console /fixed:no
|
||||
|
||||
$(OBJD)\sleepold.bsc : $(OBJD)\sleepold.obj
|
||||
bscmake /v /n /o $@ $(OBJD)\sleepold.sbr
|
||||
|
||||
$(OBJD)\sleepnew.obj : sleepnew.cpp verify.cpp
|
||||
|
||||
$(BIND)\sleepnew.exe : $(OBJD)\sleepnew.obj $(BIND)\slept$(DETOURS_BITS).lib $(DEPS)
|
||||
cl $(CFLAGS) /Fe$@ /Fd$(@R).pdb $(OBJD)\sleepnew.obj \
|
||||
/link $(LINKFLAGS) $(LIBS) \
|
||||
/subsystem:console /fixed:no $(BIND)\slept$(DETOURS_BITS).lib
|
||||
|
||||
$(OBJD)\sleepnew.bsc : $(OBJD)\sleepnew.obj
|
||||
bscmake /v /n /o $@ $(OBJD)\sleepnew.sbr
|
||||
|
||||
$(OBJD)\sleepbed.obj : sleepbed.cpp verify.cpp
|
||||
|
||||
$(BIND)\sleepbed.exe : $(OBJD)\sleepbed.obj $(DEPS)
|
||||
cl $(CFLAGS) /Fe$@ /Fd$(@R).pdb $(OBJD)\sleepbed.obj \
|
||||
/link $(LINKFLAGS) $(LIBS) \
|
||||
/subsystem:console /fixed:no
|
||||
|
||||
$(OBJD)\sleepbed.bsc : $(OBJD)\sleepbed.obj
|
||||
bscmake /v /n /o $@ $(OBJD)\sleepbed.sbr
|
||||
|
||||
##############################################################################
|
||||
|
||||
clean:
|
||||
-del *~ 2>nul
|
||||
-del $(BIND)\slept*.* 2>nul
|
||||
-del $(BIND)\dslept*.* 2>nul
|
||||
-del $(BIND)\sleepold.* 2>nul
|
||||
-del $(BIND)\sleepnew.* 2>nul
|
||||
-del $(BIND)\sleepbed.* 2>nul
|
||||
-rmdir /q /s $(OBJD) 2>nul
|
||||
|
||||
realclean: clean
|
||||
-rmdir /q /s $(OBJDS) 2>nul
|
||||
|
||||
############################################### Install non-bit-size binaries.
|
||||
|
||||
!IF "$(DETOURS_OPTION_PROCESSOR)" != ""
|
||||
|
||||
$(OPTD)\slept$(DETOURS_OPTION_BITS).dll:
|
||||
$(OPTD)\slept$(DETOURS_OPTION_BITS).pdb:
|
||||
$(OPTD)\dslept$(DETOURS_OPTION_BITS).dll:
|
||||
$(OPTD)\dslept$(DETOURS_OPTION_BITS).pdb:
|
||||
|
||||
$(BIND)\slept$(DETOURS_OPTION_BITS).dll: $(OPTD)\slept$(DETOURS_OPTION_BITS).dll
|
||||
@if exist $? copy /y $? $(BIND) >nul && echo $@ copied from $(DETOURS_OPTION_PROCESSOR).
|
||||
$(BIND)\slept$(DETOURS_OPTION_BITS).pdb: $(OPTD)\slept$(DETOURS_OPTION_BITS).pdb
|
||||
@if exist $? copy /y $? $(BIND) >nul && echo $@ copied from $(DETOURS_OPTION_PROCESSOR).
|
||||
$(BIND)\dslept$(DETOURS_OPTION_BITS).dll: $(OPTD)\dslept$(DETOURS_OPTION_BITS).dll
|
||||
@if exist $? copy /y $? $(BIND) >nul && echo $@ copied from $(DETOURS_OPTION_PROCESSOR).
|
||||
$(BIND)\dslept$(DETOURS_OPTION_BITS).pdb: $(OPTD)\dslept$(DETOURS_OPTION_BITS).pdb
|
||||
@if exist $? copy /y $? $(BIND) >nul && echo $@ copied from $(DETOURS_OPTION_PROCESSOR).
|
||||
|
||||
option: \
|
||||
$(BIND)\slept$(DETOURS_OPTION_BITS).dll \
|
||||
$(BIND)\slept$(DETOURS_OPTION_BITS).pdb \
|
||||
$(BIND)\dslept$(DETOURS_OPTION_BITS).dll \
|
||||
$(BIND)\dslept$(DETOURS_OPTION_BITS).pdb \
|
||||
|
||||
!ELSE
|
||||
|
||||
option:
|
||||
|
||||
!ENDIF
|
||||
|
||||
##############################################################################
|
||||
|
||||
skype: all
|
||||
start windbg -G -o $(BIND)\withdll.exe -d:$(BIND)\slept$(DETOURS_BITS).dll "C:\Program Files (x86)\Skype\Phone\Skype.exe"
|
||||
|
||||
test: all
|
||||
@echo -------- Reseting test binaries to initial state. -----------------------
|
||||
$(BIND)\setdll.exe -r $(BIND)\sleepold.exe
|
||||
@echo.
|
||||
@echo -------- Should load detour self ----------------------------------------
|
||||
$(BIND)\sleepbed.exe
|
||||
@echo.
|
||||
@echo -------- Should load slept$(DETOURS_BITS).dll statically -------------------------------
|
||||
$(BIND)\sleepnew.exe
|
||||
@echo.
|
||||
@echo -------- Should not load slept$(DETOURS_BITS).dll --------------------------------------
|
||||
$(BIND)\sleepold.exe
|
||||
@echo.
|
||||
@echo -------- Adding slept$(DETOURS_BITS).dll to sleepold.exe -------------------------------
|
||||
$(BIND)\setdll.exe -d:$(BIND)\slept$(DETOURS_BITS).dll $(BIND)\sleepold.exe
|
||||
@echo.
|
||||
@echo -------- Should load slept$(DETOURS_BITS).dll statically -------------------------------
|
||||
$(BIND)\sleepold.exe
|
||||
@echo.
|
||||
@echo -------- Replacing slept$(DETOURS_BITS).dll with dslept$(DETOURS_BITS).dll in sleepold.exe ------------
|
||||
$(BIND)\setdll.exe -r $(BIND)\sleepold.exe
|
||||
$(BIND)\setdll.exe -d:$(BIND)\dslept$(DETOURS_BITS).dll $(BIND)\sleepold.exe
|
||||
@echo.
|
||||
@echo -------- Should load dslept$(DETOURS_BITS).dll instead of slept$(DETOURS_BITS).dll --------------------
|
||||
$(BIND)\sleepold.exe
|
||||
@echo.
|
||||
@echo -------- Removing dslept$(DETOURS_BITS).dll from sleepold.exe --------------------------
|
||||
$(BIND)\setdll.exe -r $(BIND)\sleepold.exe
|
||||
@echo.
|
||||
@echo -------- Should not load dslept$(DETOURS_BITS).dll or slept$(DETOURS_BITS).dll ------------------------
|
||||
$(BIND)\sleepold.exe
|
||||
@echo.
|
||||
@echo -------- Should load slept$(DETOURS_BITS).dll dynamically using withdll.exe ------------
|
||||
$(BIND)\withdll.exe -d:$(BIND)\slept$(DETOURS_BITS).dll $(BIND)\sleepold.exe
|
||||
@echo.
|
||||
@echo -------- Test completed. ------------------------------------------------
|
||||
|
||||
################################################################# End of File.
|
||||
202
test/Detours/samples/slept/NORMAL_IA64.TXT
Normal file
202
test/Detours/samples/slept/NORMAL_IA64.TXT
Normal file
@@ -0,0 +1,202 @@
|
||||
-------- Reseting test binaries to initial state. -----------------------
|
||||
..\..\bin.IA64\setdll.exe -r ..\..\bin.IA64\sleepold.exe
|
||||
Removing extra DLLs from binary files.
|
||||
..\..\bin.IA64\sleepold.exe:
|
||||
KERNEL32.dll -> KERNEL32.dll
|
||||
|
||||
-------- Should load detour self ----------------------------------------
|
||||
..\..\bin.IA64\sleepbed.exe
|
||||
sleepbed.exe: Starting.
|
||||
sleepbed.exe: ExeEntry=000000013F702DD0, DllEntry=0000000000000000
|
||||
SleepEx = 0000000077898980 [0000000077845300]
|
||||
0000000077898980: 08181d0a 80054002 04004240 0400c400
|
||||
0000000077898990: 11300142 00215002 80004200 00000020
|
||||
00000000778989A0: 13000000 01000000 00001000 80a50050
|
||||
|
||||
sleepbed.exe: Detoured SleepEx().
|
||||
sleepbed.exe: After detour.
|
||||
SleepEx = 0000000077898980 [0000000077845300]
|
||||
0000000077898980: 05000000 0100bfff ffff7f00 b879ffc8 [0000000037890330]
|
||||
0000000077898990: 11300142 00215002 80004200 00000020
|
||||
00000000778989A0: 13000000 01000000 00001000 80a50050
|
||||
|
||||
sleepbed.exe: Calling Sleep for 1 second.
|
||||
sleepbed.exe: Calling SleepEx for 1 second.
|
||||
sleepbed.exe: Calling Sleep again for 1 second.
|
||||
sleepbed.exe: Calling TimedSleepEx for 1 second.
|
||||
sleepbed.exe: Calling UntimedSleepEx for 1 second.
|
||||
sleepbed.exe: Done sleeping.
|
||||
|
||||
sleepbed.exe: Removed SleepEx() detour (0), slept 2000 ticks.
|
||||
sleepbed.exe: GetSleptTicks() = 2000
|
||||
|
||||
|
||||
-------- Should load slept64.dll statically -------------------------------
|
||||
..\..\bin.IA64\sleepnew.exe
|
||||
slept64.dll: Starting.
|
||||
slept64.dll: ExeEntry=000000013F18CA50, DllEntry=000006FAEE9F6D80
|
||||
SleepEx = 0000000077898980 [0000000077845300]
|
||||
0000000077898980: 08181d0a 80054002 04004240 0400c400
|
||||
0000000077898990: 11300142 00215002 80004200 00000020
|
||||
00000000778989A0: 13000000 01000000 00001000 80a50050
|
||||
|
||||
sleepnew.exe: Starting.
|
||||
SleepEx = 0000000077898980 [0000000077845300]
|
||||
0000000077898980: 05000000 0100bfff ffff7f00 b879ffc8 [0000000037890330]
|
||||
0000000077898990: 11300142 00215002 80004200 00000020
|
||||
00000000778989A0: 13000000 01000000 00001000 80a50050
|
||||
|
||||
sleepnew.exe: Calling Sleep for 1 second.
|
||||
sleepnew.exe: Calling SleepEx for 1 second.
|
||||
sleepnew.exe: Calling Sleep again for 1 second.
|
||||
sleepnew.exe: Calling TimedSleep for 1 second.
|
||||
sleepnew.exe: Calling UntimedSleep for 1 second.
|
||||
sleepnew.exe: Done sleeping.
|
||||
|
||||
sleepnew.exe: GetSleptTicks() = 2000
|
||||
|
||||
slept64.dll: Detoured SleepEx().
|
||||
slept64.dll: Removed SleepEx() detour (0), slept 2000 ticks.
|
||||
|
||||
-------- Should not load slept64.dll --------------------------------------
|
||||
..\..\bin.IA64\sleepold.exe
|
||||
sleepold.exe: Starting (at 000000013F80C288).
|
||||
SleepEx = 0000000077898980 [0000000077845300]
|
||||
0000000077898980: 08181d0a 80054002 04004240 0400c400
|
||||
0000000077898990: 11300142 00215002 80004200 00000020
|
||||
00000000778989A0: 13000000 01000000 00001000 80a50050
|
||||
|
||||
sleepold.exe: Calling Sleep for 1 second.
|
||||
sleepold.exe: Calling SleepEx for 1 second.
|
||||
sleepold.exe: Calling Sleep again for 1 second.
|
||||
sleepold.exe: Done sleeping.
|
||||
|
||||
|
||||
-------- Adding slept64.dll to sleepold.exe -------------------------------
|
||||
..\..\bin.IA64\setdll.exe -d:..\..\bin.IA64\slept64.dll ..\..\bin.IA64\sleepold.exe
|
||||
Adding c:\Code\Detours\bin.IA64\slept64.dll to binary files.
|
||||
..\..\bin.IA64\sleepold.exe:
|
||||
c:\Code\Detours\bin.IA64\slept64.dll
|
||||
KERNEL32.dll -> KERNEL32.dll
|
||||
|
||||
-------- Should load slept64.dll statically -------------------------------
|
||||
..\..\bin.IA64\sleepold.exe
|
||||
slept64.dll: Starting.
|
||||
slept64.dll: ExeEntry=000000013F4FCAB0, DllEntry=000006FAEE9F6D80
|
||||
SleepEx = 0000000077898980 [0000000077845300]
|
||||
0000000077898980: 08181d0a 80054002 04004240 0400c400
|
||||
0000000077898990: 11300142 00215002 80004200 00000020
|
||||
00000000778989A0: 13000000 01000000 00001000 80a50050
|
||||
|
||||
sleepold.exe: Starting (at 000000013F4FC288).
|
||||
SleepEx = 0000000077898980 [0000000077845300]
|
||||
0000000077898980: 05000000 0100bfff ffff7f00 b879ffc8 [0000000037890330]
|
||||
0000000077898990: 11300142 00215002 80004200 00000020
|
||||
00000000778989A0: 13000000 01000000 00001000 80a50050
|
||||
|
||||
sleepold.exe: Calling Sleep for 1 second.
|
||||
sleepold.exe: Calling SleepEx for 1 second.
|
||||
sleepold.exe: Calling Sleep again for 1 second.
|
||||
sleepold.exe: Done sleeping.
|
||||
|
||||
slept64.dll: Detoured SleepEx().
|
||||
slept64.dll: Removed SleepEx() detour (0), slept 1000 ticks.
|
||||
|
||||
-------- Replacing slept64.dll with dslept64.dll in sleepold.exe ------------
|
||||
..\..\bin.IA64\setdll.exe -r ..\..\bin.IA64\sleepold.exe
|
||||
Removing extra DLLs from binary files.
|
||||
..\..\bin.IA64\sleepold.exe:
|
||||
KERNEL32.dll -> KERNEL32.dll
|
||||
..\..\bin.IA64\setdll.exe -d:..\..\bin.IA64\dslept64.dll ..\..\bin.IA64\sleepold.exe
|
||||
Adding c:\Code\Detours\bin.IA64\dslept64.dll to binary files.
|
||||
..\..\bin.IA64\sleepold.exe:
|
||||
c:\Code\Detours\bin.IA64\dslept64.dll
|
||||
KERNEL32.dll -> KERNEL32.dll
|
||||
|
||||
-------- Should load dslept64.dll instead of slept64.dll --------------------
|
||||
..\..\bin.IA64\sleepold.exe
|
||||
dslept64.dll: Starting.
|
||||
SleepEx = 0000000077898980 [0000000077845300]
|
||||
0000000077898980: 08181d0a 80054002 04004240 0400c400
|
||||
0000000077898990: 11300142 00215002 80004200 00000020
|
||||
00000000778989A0: 13000000 01000000 00001000 80a50050
|
||||
|
||||
EntryPoint = 000000013F12D580 [000000013F16CAB0]
|
||||
000000013F12D580: 01080d06 80050002 00620040 04080084
|
||||
000000013F12D590: 13000000 01000000 00001000 90eb0050
|
||||
000000013F12D5A0: 13080044 00210000 00001000 c0fcff58
|
||||
EntryPoint after attach = 000000013F12D580 [000000013F16CAB0]
|
||||
000000013F12D580: 05000000 0100bfff ffff7f00 b82dffc8 [00000000FF120330]
|
||||
000000013F12D590: 13000000 01000000 00001000 90eb0050
|
||||
000000013F12D5A0: 13080044 00210000 00001000 c0fcff58
|
||||
EntryPoint trampoline = 00000000FF120300 [00000000FF1203B0]
|
||||
00000000FF120300: 05000000 01003f01 00000020 00f00267
|
||||
00000000FF120310: 01080d06 80050002 00620040 04080084
|
||||
00000000FF120320: 05000000 01004000 00000000 78d200c0 [000000013F12D590]
|
||||
dslept64.dll: Detoured EntryPoint().
|
||||
dslept64.dll: Detoured SleepEx().
|
||||
SleepEx = 0000000077898980 [0000000077845300]
|
||||
0000000077898980: 05000000 0100bfff ffff7f00 b879ffc8 [0000000037890330]
|
||||
0000000077898990: 11300142 00215002 80004200 00000020
|
||||
00000000778989A0: 13000000 01000000 00001000 80a50050
|
||||
|
||||
dslept64.dll: Calling EntryPoint
|
||||
sleepold.exe: Starting (at 000000013F16C288).
|
||||
SleepEx = 0000000077898980 [0000000077845300]
|
||||
0000000077898980: 05000000 0100bfff ffff7f00 b879ffc8 [0000000037890330]
|
||||
0000000077898990: 11300142 00215002 80004200 00000020
|
||||
00000000778989A0: 13000000 01000000 00001000 80a50050
|
||||
|
||||
sleepold.exe: Calling Sleep for 1 second.
|
||||
sleepold.exe: Calling SleepEx for 1 second.
|
||||
sleepold.exe: Calling Sleep again for 1 second.
|
||||
sleepold.exe: Done sleeping.
|
||||
|
||||
dslept64.dll: Removed Sleep() detours (0), slept 1000 ticks.
|
||||
|
||||
-------- Removing dslept64.dll from sleepold.exe --------------------------
|
||||
..\..\bin.IA64\setdll.exe -r ..\..\bin.IA64\sleepold.exe
|
||||
Removing extra DLLs from binary files.
|
||||
..\..\bin.IA64\sleepold.exe:
|
||||
KERNEL32.dll -> KERNEL32.dll
|
||||
|
||||
-------- Should not load dslept64.dll or slept64.dll ------------------------
|
||||
..\..\bin.IA64\sleepold.exe
|
||||
sleepold.exe: Starting (at 000000013FCEC288).
|
||||
SleepEx = 0000000077898980 [0000000077845300]
|
||||
0000000077898980: 08181d0a 80054002 04004240 0400c400
|
||||
0000000077898990: 11300142 00215002 80004200 00000020
|
||||
00000000778989A0: 13000000 01000000 00001000 80a50050
|
||||
|
||||
sleepold.exe: Calling Sleep for 1 second.
|
||||
sleepold.exe: Calling SleepEx for 1 second.
|
||||
sleepold.exe: Calling Sleep again for 1 second.
|
||||
sleepold.exe: Done sleeping.
|
||||
|
||||
|
||||
-------- Should load slept64.dll dynamically using withdll.exe ------------
|
||||
..\..\bin.IA64\withdll.exe -d:..\..\bin.IA64\slept64.dll ..\..\bin.IA64\sleepold.exe
|
||||
withdll.exe: Starting: `..\..\bin.IA64\sleepold.exe'
|
||||
withdll.exe: with `c:\Code\Detours\bin.IA64\slept64.dll'
|
||||
slept64.dll: Starting.
|
||||
slept64.dll: ExeEntry=000000013FBFCAB0, DllEntry=000006FAEE9F6D80
|
||||
SleepEx = 0000000077898980 [0000000077845300]
|
||||
0000000077898980: 08181d0a 80054002 04004240 0400c400
|
||||
0000000077898990: 11300142 00215002 80004200 00000020
|
||||
00000000778989A0: 13000000 01000000 00001000 80a50050
|
||||
|
||||
sleepold.exe: Starting (at 000000013FBFC288).
|
||||
SleepEx = 0000000077898980 [0000000077845300]
|
||||
0000000077898980: 05000000 0100bfff ffff7f00 b879ffc8 [0000000037890330]
|
||||
0000000077898990: 11300142 00215002 80004200 00000020
|
||||
00000000778989A0: 13000000 01000000 00001000 80a50050
|
||||
|
||||
sleepold.exe: Calling Sleep for 1 second.
|
||||
sleepold.exe: Calling SleepEx for 1 second.
|
||||
sleepold.exe: Calling Sleep again for 1 second.
|
||||
sleepold.exe: Done sleeping.
|
||||
|
||||
slept64.dll: Detoured SleepEx().
|
||||
slept64.dll: Removed SleepEx() detour (0), slept 1030 ticks.
|
||||
|
||||
-------- Test completed. ------------------------------------------------
|
||||
202
test/Detours/samples/slept/NORMAL_X64.TXT
Normal file
202
test/Detours/samples/slept/NORMAL_X64.TXT
Normal file
@@ -0,0 +1,202 @@
|
||||
-------- Reseting test binaries to initial state. -----------------------
|
||||
..\..\bin.X64\setdll.exe -r ..\..\bin.X64\sleepold.exe
|
||||
Removing extra DLLs from binary files.
|
||||
..\..\bin.X64\sleepold.exe:
|
||||
KERNEL32.dll -> KERNEL32.dll
|
||||
|
||||
-------- Should load detour self ----------------------------------------
|
||||
..\..\bin.X64\sleepbed.exe
|
||||
sleepbed.exe: Starting.
|
||||
sleepbed.exe: ExeEntry=000000013FE863E0, DllEntry=000000013FE9E610
|
||||
SleepEx = 000007FEFD541150 [0000000076912B60]
|
||||
000007FEFD541150: 4c8bdc
|
||||
000007FEFD541153: 49895b08
|
||||
000007FEFD541157: 89542410
|
||||
|
||||
sleepbed.exe: Detoured SleepEx().
|
||||
sleepbed.exe: After detour.
|
||||
SleepEx = 000007FEFD541150 [0000000076912B60]
|
||||
000007FEFD541150: e923f0ff bf [000007FEBD540178]
|
||||
000007FEFD541155: cc [FFFFFFFFFFFFFFFF]
|
||||
000007FEFD541156: cc [FFFFFFFFFFFFFFFF]
|
||||
|
||||
sleepbed.exe: Calling Sleep for 1 second.
|
||||
sleepbed.exe: Calling SleepEx for 1 second.
|
||||
sleepbed.exe: Calling Sleep again for 1 second.
|
||||
sleepbed.exe: Calling TimedSleepEx for 1 second.
|
||||
sleepbed.exe: Calling UntimedSleepEx for 1 second.
|
||||
sleepbed.exe: Done sleeping.
|
||||
|
||||
sleepbed.exe: Removed SleepEx() detour (0), slept 4056 ticks.
|
||||
sleepbed.exe: GetSleptTicks() = 4056
|
||||
|
||||
|
||||
-------- Should load slept64.dll statically -------------------------------
|
||||
..\..\bin.X64\sleepnew.exe
|
||||
slept64.dll: Starting.
|
||||
slept64.dll: ExeEntry=000000013F56484C, DllEntry=000007FEF2E78B74
|
||||
SleepEx = 000007FEFD541150 [0000000076912B60]
|
||||
000007FEFD541150: 4c8bdc
|
||||
000007FEFD541153: 49895b08
|
||||
000007FEFD541157: 89542410
|
||||
|
||||
sleepnew.exe: Starting.
|
||||
SleepEx = 000007FEFD541150 [0000000076912B60]
|
||||
000007FEFD541150: e923f0ff bf [000007FEBD540178]
|
||||
000007FEFD541155: cc [FFFFFFFFFFFFFFFF]
|
||||
000007FEFD541156: cc [FFFFFFFFFFFFFFFF]
|
||||
|
||||
sleepnew.exe: Calling Sleep for 1 second.
|
||||
sleepnew.exe: Calling SleepEx for 1 second.
|
||||
sleepnew.exe: Calling Sleep again for 1 second.
|
||||
sleepnew.exe: Calling TimedSleep for 1 second.
|
||||
sleepnew.exe: Calling UntimedSleep for 1 second.
|
||||
sleepnew.exe: Done sleeping.
|
||||
|
||||
sleepnew.exe: GetSleptTicks() = 4056
|
||||
|
||||
slept64.dll: Detoured SleepEx().
|
||||
slept64.dll: Removed SleepEx() detour (0), slept 4056 ticks.
|
||||
|
||||
-------- Should not load slept64.dll --------------------------------------
|
||||
..\..\bin.X64\sleepold.exe
|
||||
sleepold.exe: Starting (at 000000013FEF1350).
|
||||
SleepEx = 000007FEFD541150 [0000000076912B60]
|
||||
000007FEFD541150: 4c8bdc
|
||||
000007FEFD541153: 49895b08
|
||||
000007FEFD541157: 89542410
|
||||
|
||||
sleepold.exe: Calling Sleep for 1 second.
|
||||
sleepold.exe: Calling SleepEx for 1 second.
|
||||
sleepold.exe: Calling Sleep again for 1 second.
|
||||
sleepold.exe: Done sleeping.
|
||||
|
||||
|
||||
-------- Adding slept64.dll to sleepold.exe -------------------------------
|
||||
..\..\bin.X64\setdll.exe -d:..\..\bin.X64\slept64.dll ..\..\bin.X64\sleepold.exe
|
||||
Adding c:\Code\detours\bin.X64\slept64.dll to binary files.
|
||||
..\..\bin.X64\sleepold.exe:
|
||||
c:\Code\detours\bin.X64\slept64.dll
|
||||
KERNEL32.dll -> KERNEL32.dll
|
||||
|
||||
-------- Should load slept64.dll statically -------------------------------
|
||||
..\..\bin.X64\sleepold.exe
|
||||
slept64.dll: Starting.
|
||||
slept64.dll: ExeEntry=000000013F554ADC, DllEntry=000007FEF2E78B74
|
||||
SleepEx = 000007FEFD541150 [0000000076912B60]
|
||||
000007FEFD541150: 4c8bdc
|
||||
000007FEFD541153: 49895b08
|
||||
000007FEFD541157: 89542410
|
||||
|
||||
sleepold.exe: Starting (at 000000013F551350).
|
||||
SleepEx = 000007FEFD541150 [0000000076912B60]
|
||||
000007FEFD541150: e923f0ff bf [000007FEBD540178]
|
||||
000007FEFD541155: cc [FFFFFFFFFFFFFFFF]
|
||||
000007FEFD541156: cc [FFFFFFFFFFFFFFFF]
|
||||
|
||||
sleepold.exe: Calling Sleep for 1 second.
|
||||
sleepold.exe: Calling SleepEx for 1 second.
|
||||
sleepold.exe: Calling Sleep again for 1 second.
|
||||
sleepold.exe: Done sleeping.
|
||||
|
||||
slept64.dll: Detoured SleepEx().
|
||||
slept64.dll: Removed SleepEx() detour (0), slept 3042 ticks.
|
||||
|
||||
-------- Replacing slept64.dll with dslept64.dll in sleepold.exe ------------
|
||||
..\..\bin.X64\setdll.exe -r ..\..\bin.X64\sleepold.exe
|
||||
Removing extra DLLs from binary files.
|
||||
..\..\bin.X64\sleepold.exe:
|
||||
KERNEL32.dll -> KERNEL32.dll
|
||||
..\..\bin.X64\setdll.exe -d:..\..\bin.X64\dslept64.dll ..\..\bin.X64\sleepold.exe
|
||||
Adding c:\Code\detours\bin.X64\dslept64.dll to binary files.
|
||||
..\..\bin.X64\sleepold.exe:
|
||||
c:\Code\detours\bin.X64\dslept64.dll
|
||||
KERNEL32.dll -> KERNEL32.dll
|
||||
|
||||
-------- Should load dslept64.dll instead of slept64.dll --------------------
|
||||
..\..\bin.X64\sleepold.exe
|
||||
dslept64.dll: Starting.
|
||||
SleepEx = 000007FEFD541150 [0000000076912B60]
|
||||
000007FEFD541150: 4c8bdc
|
||||
000007FEFD541153: 49895b08
|
||||
000007FEFD541157: 89542410
|
||||
|
||||
EntryPoint = 000000013FB24ADC
|
||||
000000013FB24ADC: 4883ec28
|
||||
000000013FB24AE0: e8875f00 00 [000000013FB2AA6C]
|
||||
000000013FB24AE5: 4883c428
|
||||
EntryPoint after attach = 000000013FB24ADC
|
||||
000000013FB24ADC: e997b6ff bf [00000000FFB20178]
|
||||
000000013FB24AE1: cc [FFFFFFFFFFFFFFFF]
|
||||
000000013FB24AE2: cc [FFFFFFFFFFFFFFFF]
|
||||
EntryPoint trampoline = 00000000FFB20120
|
||||
00000000FFB20120: 4883ec28
|
||||
00000000FFB20124: e843a900 40 [000000013FB2AA6C]
|
||||
00000000FFB20129: ff253900 0000
|
||||
dslept64.dll: Detoured EntryPoint().
|
||||
dslept64.dll: Detoured SleepEx().
|
||||
SleepEx = 000007FEFD541150 [0000000076912B60]
|
||||
000007FEFD541150: e923f0ff bf [000007FEBD540178]
|
||||
000007FEFD541155: cc [FFFFFFFFFFFFFFFF]
|
||||
000007FEFD541156: cc [FFFFFFFFFFFFFFFF]
|
||||
|
||||
dslept64.dll: Calling EntryPoint
|
||||
sleepold.exe: Starting (at 000000013FB21350).
|
||||
SleepEx = 000007FEFD541150 [0000000076912B60]
|
||||
000007FEFD541150: e923f0ff bf [000007FEBD540178]
|
||||
000007FEFD541155: cc [FFFFFFFFFFFFFFFF]
|
||||
000007FEFD541156: cc [FFFFFFFFFFFFFFFF]
|
||||
|
||||
sleepold.exe: Calling Sleep for 1 second.
|
||||
sleepold.exe: Calling SleepEx for 1 second.
|
||||
sleepold.exe: Calling Sleep again for 1 second.
|
||||
sleepold.exe: Done sleeping.
|
||||
|
||||
dslept64.dll: Removed Sleep() detours (0), slept 3042 ticks.
|
||||
|
||||
-------- Removing dslept64.dll from sleepold.exe --------------------------
|
||||
..\..\bin.X64\setdll.exe -r ..\..\bin.X64\sleepold.exe
|
||||
Removing extra DLLs from binary files.
|
||||
..\..\bin.X64\sleepold.exe:
|
||||
KERNEL32.dll -> KERNEL32.dll
|
||||
|
||||
-------- Should not load dslept64.dll or slept64.dll ------------------------
|
||||
..\..\bin.X64\sleepold.exe
|
||||
sleepold.exe: Starting (at 000000013F551350).
|
||||
SleepEx = 000007FEFD541150 [0000000076912B60]
|
||||
000007FEFD541150: 4c8bdc
|
||||
000007FEFD541153: 49895b08
|
||||
000007FEFD541157: 89542410
|
||||
|
||||
sleepold.exe: Calling Sleep for 1 second.
|
||||
sleepold.exe: Calling SleepEx for 1 second.
|
||||
sleepold.exe: Calling Sleep again for 1 second.
|
||||
sleepold.exe: Done sleeping.
|
||||
|
||||
|
||||
-------- Should load slept64.dll dynamically using withdll.exe ------------
|
||||
..\..\bin.X64\withdll.exe -d:..\..\bin.X64\slept64.dll ..\..\bin.X64\sleepold.exe
|
||||
withdll.exe: Starting: `..\..\bin.X64\sleepold.exe'
|
||||
withdll.exe: with `c:\Code\detours\bin.X64\slept64.dll'
|
||||
slept64.dll: Starting.
|
||||
slept64.dll: ExeEntry=000000013FE84ADC, DllEntry=000007FEF3108B74
|
||||
SleepEx = 000007FEFD541150 [0000000076912B60]
|
||||
000007FEFD541150: 4c8bdc
|
||||
000007FEFD541153: 49895b08
|
||||
000007FEFD541157: 89542410
|
||||
|
||||
sleepold.exe: Starting (at 000000013FE81350).
|
||||
SleepEx = 000007FEFD541150 [0000000076912B60]
|
||||
000007FEFD541150: e923f0ff bf [000007FEBD540178]
|
||||
000007FEFD541155: cc [FFFFFFFFFFFFFFFF]
|
||||
000007FEFD541156: cc [FFFFFFFFFFFFFFFF]
|
||||
|
||||
sleepold.exe: Calling Sleep for 1 second.
|
||||
sleepold.exe: Calling SleepEx for 1 second.
|
||||
sleepold.exe: Calling Sleep again for 1 second.
|
||||
sleepold.exe: Done sleeping.
|
||||
|
||||
slept64.dll: Detoured SleepEx().
|
||||
slept64.dll: Removed SleepEx() detour (0), slept 3042 ticks.
|
||||
|
||||
-------- Test completed. ------------------------------------------------
|
||||
202
test/Detours/samples/slept/NORMAL_X86.TXT
Normal file
202
test/Detours/samples/slept/NORMAL_X86.TXT
Normal file
@@ -0,0 +1,202 @@
|
||||
-------- Reseting test binaries to initial state. -----------------------
|
||||
..\..\bin.X86\setdll.exe -r ..\..\bin.X86\sleepold.exe
|
||||
Removing extra DLLs from binary files.
|
||||
..\..\bin.X86\sleepold.exe:
|
||||
KERNEL32.dll -> KERNEL32.dll
|
||||
|
||||
-------- Should load detour self ----------------------------------------
|
||||
..\..\bin.X86\sleepbed.exe
|
||||
sleepbed.exe: Starting.
|
||||
sleepbed.exe: ExeEntry=00B1572E, DllEntry=00000000
|
||||
SleepEx = 74F51215
|
||||
74F51215: 8bff
|
||||
74F51217: 55
|
||||
74F51218: 8bec
|
||||
|
||||
sleepbed.exe: Detoured SleepEx().
|
||||
sleepbed.exe: After detour.
|
||||
SleepEx = 74F51215
|
||||
74F51215: e95600bc 8b [00B11270]
|
||||
74F5121A: 5d
|
||||
74F5121B: ebed [74F5120A]
|
||||
|
||||
sleepbed.exe: Calling Sleep for 1 second.
|
||||
sleepbed.exe: Calling SleepEx for 1 second.
|
||||
sleepbed.exe: Calling Sleep again for 1 second.
|
||||
sleepbed.exe: Calling TimedSleepEx for 1 second.
|
||||
sleepbed.exe: Calling UntimedSleepEx for 1 second.
|
||||
sleepbed.exe: Done sleeping.
|
||||
|
||||
sleepbed.exe: Removed SleepEx() detour (0), slept 2028 ticks.
|
||||
sleepbed.exe: GetSleptTicks() = 2028
|
||||
|
||||
|
||||
-------- Should load slept32.dll statically -------------------------------
|
||||
..\..\bin.X86\sleepnew.exe
|
||||
slept32.dll: Starting.
|
||||
slept32.dll: ExeEntry=012D3B1A, DllEntry=7248702E
|
||||
SleepEx = 74F51215
|
||||
74F51215: 8bff
|
||||
74F51217: 55
|
||||
74F51218: 8bec
|
||||
|
||||
sleepnew.exe: Starting.
|
||||
SleepEx = 74F51215
|
||||
74F51215: e9560053 fd [72481270]
|
||||
74F5121A: 5d
|
||||
74F5121B: ebed [74F5120A]
|
||||
|
||||
sleepnew.exe: Calling Sleep for 1 second.
|
||||
sleepnew.exe: Calling SleepEx for 1 second.
|
||||
sleepnew.exe: Calling Sleep again for 1 second.
|
||||
sleepnew.exe: Calling TimedSleep for 1 second.
|
||||
sleepnew.exe: Calling UntimedSleep for 1 second.
|
||||
sleepnew.exe: Done sleeping.
|
||||
|
||||
sleepnew.exe: GetSleptTicks() = 2028
|
||||
|
||||
slept32.dll: Detoured SleepEx().
|
||||
slept32.dll: Removed SleepEx() detour (0), slept 2028 ticks.
|
||||
|
||||
-------- Should not load slept32.dll --------------------------------------
|
||||
..\..\bin.X86\sleepold.exe
|
||||
sleepold.exe: Starting (at 00971260).
|
||||
SleepEx = 74F51215
|
||||
74F51215: 8bff
|
||||
74F51217: 55
|
||||
74F51218: 8bec
|
||||
|
||||
sleepold.exe: Calling Sleep for 1 second.
|
||||
sleepold.exe: Calling SleepEx for 1 second.
|
||||
sleepold.exe: Calling Sleep again for 1 second.
|
||||
sleepold.exe: Done sleeping.
|
||||
|
||||
|
||||
-------- Adding slept32.dll to sleepold.exe -------------------------------
|
||||
..\..\bin.X86\setdll.exe -d:..\..\bin.X86\slept32.dll ..\..\bin.X86\sleepold.exe
|
||||
Adding c:\Code\detours\bin.X86\slept32.dll to binary files.
|
||||
..\..\bin.X86\sleepold.exe:
|
||||
c:\Code\detours\bin.X86\slept32.dll
|
||||
KERNEL32.dll -> KERNEL32.dll
|
||||
|
||||
-------- Should load slept32.dll statically -------------------------------
|
||||
..\..\bin.X86\sleepold.exe
|
||||
slept32.dll: Starting.
|
||||
slept32.dll: ExeEntry=00AF3D4C, DllEntry=7248702E
|
||||
SleepEx = 74F51215
|
||||
74F51215: 8bff
|
||||
74F51217: 55
|
||||
74F51218: 8bec
|
||||
|
||||
sleepold.exe: Starting (at 00AF1260).
|
||||
SleepEx = 74F51215
|
||||
74F51215: e9560053 fd [72481270]
|
||||
74F5121A: 5d
|
||||
74F5121B: ebed [74F5120A]
|
||||
|
||||
sleepold.exe: Calling Sleep for 1 second.
|
||||
sleepold.exe: Calling SleepEx for 1 second.
|
||||
sleepold.exe: Calling Sleep again for 1 second.
|
||||
sleepold.exe: Done sleeping.
|
||||
|
||||
slept32.dll: Detoured SleepEx().
|
||||
slept32.dll: Removed SleepEx() detour (0), slept 1014 ticks.
|
||||
|
||||
-------- Replacing slept32.dll with dslept32.dll in sleepold.exe ------------
|
||||
..\..\bin.X86\setdll.exe -r ..\..\bin.X86\sleepold.exe
|
||||
Removing extra DLLs from binary files.
|
||||
..\..\bin.X86\sleepold.exe:
|
||||
KERNEL32.dll -> KERNEL32.dll
|
||||
..\..\bin.X86\setdll.exe -d:..\..\bin.X86\dslept32.dll ..\..\bin.X86\sleepold.exe
|
||||
Adding c:\Code\detours\bin.X86\dslept32.dll to binary files.
|
||||
..\..\bin.X86\sleepold.exe:
|
||||
c:\Code\detours\bin.X86\dslept32.dll
|
||||
KERNEL32.dll -> KERNEL32.dll
|
||||
|
||||
-------- Should load dslept32.dll instead of slept32.dll --------------------
|
||||
..\..\bin.X86\sleepold.exe
|
||||
dslept32.dll: Starting.
|
||||
SleepEx = 74F51215
|
||||
74F51215: 8bff
|
||||
74F51217: 55
|
||||
74F51218: 8bec
|
||||
|
||||
EntryPoint = 00263D4C
|
||||
00263D4C: e8d75400 00 [00269228]
|
||||
00263D51: e995feff ff [00263BEB]
|
||||
00263D56: 3b0d8412 2800
|
||||
EntryPoint after attach = 00263D4C
|
||||
00263D4C: e96fd502 72 [722912C0]
|
||||
00263D51: e995feff ff [00263BEB]
|
||||
00263D56: 3b0d8412 2800
|
||||
EntryPoint trampoline = 402500D8
|
||||
402500D8: e84b9101 c0 [00269228]
|
||||
402500DD: e96f3c01 c0 [00263D51]
|
||||
402500E2: cc [FFFFFFFF]
|
||||
dslept32.dll: Detoured EntryPoint().
|
||||
dslept32.dll: Detoured SleepEx().
|
||||
SleepEx = 74F51215
|
||||
74F51215: e9560034 fd [72291270]
|
||||
74F5121A: 5d
|
||||
74F5121B: ebed [74F5120A]
|
||||
|
||||
dslept32.dll: Calling EntryPoint
|
||||
sleepold.exe: Starting (at 00261260).
|
||||
SleepEx = 74F51215
|
||||
74F51215: e9560034 fd [72291270]
|
||||
74F5121A: 5d
|
||||
74F5121B: ebed [74F5120A]
|
||||
|
||||
sleepold.exe: Calling Sleep for 1 second.
|
||||
sleepold.exe: Calling SleepEx for 1 second.
|
||||
sleepold.exe: Calling Sleep again for 1 second.
|
||||
sleepold.exe: Done sleeping.
|
||||
|
||||
dslept32.dll: Removed Sleep() detours (0), slept 1014 ticks.
|
||||
|
||||
-------- Removing dslept32.dll from sleepold.exe --------------------------
|
||||
..\..\bin.X86\setdll.exe -r ..\..\bin.X86\sleepold.exe
|
||||
Removing extra DLLs from binary files.
|
||||
..\..\bin.X86\sleepold.exe:
|
||||
KERNEL32.dll -> KERNEL32.dll
|
||||
|
||||
-------- Should not load dslept32.dll or slept32.dll ------------------------
|
||||
..\..\bin.X86\sleepold.exe
|
||||
sleepold.exe: Starting (at 00E01260).
|
||||
SleepEx = 74F51215
|
||||
74F51215: 8bff
|
||||
74F51217: 55
|
||||
74F51218: 8bec
|
||||
|
||||
sleepold.exe: Calling Sleep for 1 second.
|
||||
sleepold.exe: Calling SleepEx for 1 second.
|
||||
sleepold.exe: Calling Sleep again for 1 second.
|
||||
sleepold.exe: Done sleeping.
|
||||
|
||||
|
||||
-------- Should load slept32.dll dynamically using withdll.exe ------------
|
||||
..\..\bin.X86\withdll.exe -d:..\..\bin.X86\slept32.dll ..\..\bin.X86\sleepold.exe
|
||||
withdll.exe: Starting: `..\..\bin.X86\sleepold.exe'
|
||||
withdll.exe: with `c:\Code\detours\bin.X86\slept32.dll'
|
||||
slept32.dll: Starting.
|
||||
slept32.dll: ExeEntry=011A3D4C, DllEntry=7248702E
|
||||
SleepEx = 74F51215
|
||||
74F51215: 8bff
|
||||
74F51217: 55
|
||||
74F51218: 8bec
|
||||
|
||||
sleepold.exe: Starting (at 011A1260).
|
||||
SleepEx = 74F51215
|
||||
74F51215: e9560053 fd [72481270]
|
||||
74F5121A: 5d
|
||||
74F5121B: ebed [74F5120A]
|
||||
|
||||
sleepold.exe: Calling Sleep for 1 second.
|
||||
sleepold.exe: Calling SleepEx for 1 second.
|
||||
sleepold.exe: Calling Sleep again for 1 second.
|
||||
sleepold.exe: Done sleeping.
|
||||
|
||||
slept32.dll: Detoured SleepEx().
|
||||
slept32.dll: Removed SleepEx() detour (0), slept 1014 ticks.
|
||||
|
||||
-------- Test completed. ------------------------------------------------
|
||||
141
test/Detours/samples/slept/dslept.cpp
Normal file
141
test/Detours/samples/slept/dslept.cpp
Normal file
@@ -0,0 +1,141 @@
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Detour Test Program (dslept.cpp of dslept.dll)
|
||||
//
|
||||
// Microsoft Research Detours Package
|
||||
//
|
||||
// Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
//
|
||||
// An example dynamically detouring a function.
|
||||
//
|
||||
#include <stdio.h>
|
||||
#include <windows.h>
|
||||
#include "detours.h"
|
||||
#include "slept.h"
|
||||
|
||||
#include "verify.cpp"
|
||||
|
||||
LONG dwSlept = 0;
|
||||
|
||||
static DWORD (WINAPI * TrueSleepEx)(DWORD dwMilliseconds, BOOL bAlertable) = NULL;
|
||||
static int (WINAPI * TrueEntryPoint)(VOID) = NULL;
|
||||
static int (WINAPI * RawEntryPoint)(VOID) = NULL;
|
||||
|
||||
DWORD WINAPI UntimedSleepEx(DWORD dwMilliseconds, BOOL bAlertable)
|
||||
{
|
||||
if (TrueSleepEx != NULL) {
|
||||
return TrueSleepEx(dwMilliseconds, bAlertable);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
DWORD WINAPI TimedSleepEx(DWORD dwMilliseconds, BOOL bAlertable)
|
||||
{
|
||||
DWORD dwBeg = GetTickCount();
|
||||
DWORD ret = TrueSleepEx(dwMilliseconds, bAlertable);
|
||||
DWORD dwEnd = GetTickCount();
|
||||
|
||||
InterlockedExchangeAdd(&dwSlept, dwEnd - dwBeg);
|
||||
return ret;
|
||||
}
|
||||
|
||||
DWORD WINAPI GetSleptTicks(VOID)
|
||||
{
|
||||
return dwSlept;
|
||||
}
|
||||
|
||||
int WINAPI TimedEntryPoint(VOID)
|
||||
{
|
||||
// We couldn't call LoadLibrary in DllMain,
|
||||
// so we detour SleepEx here...
|
||||
LONG error;
|
||||
|
||||
TrueSleepEx = (DWORD (WINAPI *)(DWORD, BOOL))
|
||||
DetourFindFunction("kernel32.dll", "SleepEx");
|
||||
|
||||
DetourTransactionBegin();
|
||||
DetourUpdateThread(GetCurrentThread());
|
||||
DetourAttach(&(PVOID&)TrueSleepEx, TimedSleepEx);
|
||||
error = DetourTransactionCommit();
|
||||
|
||||
if (error == NO_ERROR) {
|
||||
printf("dslept" DETOURS_STRINGIFY(DETOURS_BITS) ".dll: "
|
||||
" Detoured SleepEx().\n");
|
||||
|
||||
}
|
||||
else {
|
||||
printf("dslept" DETOURS_STRINGIFY(DETOURS_BITS) ".dll: "
|
||||
" Error detouring SleepEx(): %ld\n", error);
|
||||
}
|
||||
|
||||
Verify("SleepEx", (PVOID)SleepEx);
|
||||
printf("\n");
|
||||
fflush(stdout);
|
||||
|
||||
printf("dslept" DETOURS_STRINGIFY(DETOURS_BITS) ".dll: "
|
||||
" Calling EntryPoint\n");
|
||||
fflush(stdout);
|
||||
|
||||
return TrueEntryPoint();
|
||||
}
|
||||
|
||||
BOOL WINAPI DllMain(HINSTANCE hinst, DWORD dwReason, LPVOID reserved)
|
||||
{
|
||||
LONG error;
|
||||
(void)hinst;
|
||||
(void)reserved;
|
||||
|
||||
if (DetourIsHelperProcess()) {
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
if (dwReason == DLL_PROCESS_ATTACH) {
|
||||
DetourRestoreAfterWith();
|
||||
|
||||
printf("dslept" DETOURS_STRINGIFY(DETOURS_BITS) ".dll: "
|
||||
" Starting.\n");
|
||||
Verify("SleepEx", (PVOID)SleepEx);
|
||||
printf("\n");
|
||||
fflush(stdout);
|
||||
|
||||
// NB: DllMain can't call LoadLibrary, so we hook the app entry point.
|
||||
TrueEntryPoint = (int (WINAPI *)(VOID))DetourGetEntryPoint(NULL);
|
||||
RawEntryPoint = TrueEntryPoint;
|
||||
|
||||
Verify("EntryPoint", RawEntryPoint);
|
||||
|
||||
DetourTransactionBegin();
|
||||
DetourUpdateThread(GetCurrentThread());
|
||||
DetourAttach(&(PVOID&)TrueEntryPoint, TimedEntryPoint);
|
||||
error = DetourTransactionCommit();
|
||||
|
||||
Verify("EntryPoint after attach", RawEntryPoint);
|
||||
Verify("EntryPoint trampoline", TrueEntryPoint);
|
||||
|
||||
if (error == NO_ERROR) {
|
||||
printf("dslept" DETOURS_STRINGIFY(DETOURS_BITS) ".dll: "
|
||||
" Detoured EntryPoint().\n");
|
||||
}
|
||||
else {
|
||||
printf("dslept" DETOURS_STRINGIFY(DETOURS_BITS) ".dll: "
|
||||
" Error detouring EntryPoint(): %ld\n", error);
|
||||
}
|
||||
}
|
||||
else if (dwReason == DLL_PROCESS_DETACH) {
|
||||
DetourTransactionBegin();
|
||||
DetourUpdateThread(GetCurrentThread());
|
||||
if (TrueSleepEx != NULL) {
|
||||
DetourDetach(&(PVOID&)TrueSleepEx, (PVOID)TimedSleepEx);
|
||||
}
|
||||
DetourDetach(&(PVOID&)TrueEntryPoint, TimedEntryPoint);
|
||||
error = DetourTransactionCommit();
|
||||
|
||||
printf("dslept" DETOURS_STRINGIFY(DETOURS_BITS) ".dll: "
|
||||
" Removed Sleep() detours (%ld), slept %ld ticks.\n", error, dwSlept);
|
||||
|
||||
fflush(stdout);
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
//
|
||||
///////////////////////////////////////////////////////////////// End of File.
|
||||
17
test/Detours/samples/slept/dslept.rc
Normal file
17
test/Detours/samples/slept/dslept.rc
Normal file
@@ -0,0 +1,17 @@
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Version information for dslept.rc.
|
||||
//
|
||||
// Microsoft Research Detours Package
|
||||
//
|
||||
// Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
//
|
||||
|
||||
#include "detver.h"
|
||||
|
||||
#define VER_INTERNALNAME_STR "dslept" DETOURS_STRINGIFY(DETOURS_BITS)
|
||||
#define VER_ORIGINALFILENAME_STR "dslept" DETOURS_STRINGIFY(DETOURS_BITS) ".dll"
|
||||
#define VER_FILEDESCRIPTION_STR "Detours Sleep Interception Module"
|
||||
#define VER_COMPANYNAME_STR "Microsoft Corporation"
|
||||
|
||||
#include "common.ver"
|
||||
103
test/Detours/samples/slept/sleepbed.cpp
Normal file
103
test/Detours/samples/slept/sleepbed.cpp
Normal file
@@ -0,0 +1,103 @@
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Detour Test Program (sleepbed.cpp of sleepbed.exe)
|
||||
//
|
||||
// Microsoft Research Detours Package
|
||||
//
|
||||
// Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
//
|
||||
|
||||
#include <windows.h>
|
||||
#include <stdio.h>
|
||||
|
||||
#include "verify.cpp"
|
||||
|
||||
static BOOL fBroke = FALSE;
|
||||
static LONG dwSlept = 0;
|
||||
static DWORD (WINAPI * TrueSleepEx)(DWORD dwMilliseconds, BOOL bAlertable)
|
||||
= SleepEx;
|
||||
|
||||
DWORD WINAPI UntimedSleepEx(DWORD dwMilliseconds, BOOL bAlertable)
|
||||
{
|
||||
return TrueSleepEx(dwMilliseconds, bAlertable);
|
||||
}
|
||||
|
||||
DWORD WINAPI TimedSleepEx(DWORD dwMilliseconds, BOOL bAlertable)
|
||||
{
|
||||
DWORD dwBeg = GetTickCount();
|
||||
DWORD ret = TrueSleepEx(dwMilliseconds, bAlertable);
|
||||
DWORD dwEnd = GetTickCount();
|
||||
|
||||
if (!fBroke) {
|
||||
fBroke = TRUE;
|
||||
// DebugBreak();
|
||||
}
|
||||
|
||||
InterlockedExchangeAdd(&dwSlept, dwEnd - dwBeg);
|
||||
return ret;
|
||||
}
|
||||
|
||||
DWORD WINAPI GetSleptTicks(VOID)
|
||||
{
|
||||
return dwSlept;
|
||||
}
|
||||
|
||||
//
|
||||
///////////////////////////////////////////////////////////////// End of File.
|
||||
|
||||
int __cdecl main(void)
|
||||
{
|
||||
int error = 0;
|
||||
|
||||
printf("sleepbed.exe: Starting.\n");
|
||||
PVOID pbExeEntry = DetourGetEntryPoint(NULL);
|
||||
printf("sleepbed.exe: ExeEntry=%p\n", pbExeEntry);
|
||||
|
||||
Verify("SleepEx", (PVOID)SleepEx);
|
||||
printf("\n");
|
||||
fflush(stdout);
|
||||
|
||||
DetourTransactionBegin();
|
||||
DetourUpdateThread(GetCurrentThread());
|
||||
DetourAttach(&(PVOID&)TrueSleepEx, TimedSleepEx);
|
||||
error = DetourTransactionCommit();
|
||||
|
||||
if (error == NO_ERROR) {
|
||||
printf("sleepbed.exe: Detoured SleepEx().\n");
|
||||
}
|
||||
else {
|
||||
printf("sleepbed.exe: Error detouring SleepEx(): %d\n", error);
|
||||
return error;
|
||||
}
|
||||
fflush(stdout);
|
||||
|
||||
printf("sleepbed.exe: After detour.\n");
|
||||
Verify("SleepEx", (PBYTE)SleepEx);
|
||||
printf("\n");
|
||||
fflush(stdout);
|
||||
|
||||
printf("sleepbed.exe: Calling Sleep for 1 second.\n");
|
||||
Sleep(1000);
|
||||
printf("sleepbed.exe: Calling SleepEx for 1 second.\n");
|
||||
SleepEx(1000, true);
|
||||
printf("sleepbed.exe: Calling Sleep again for 1 second.\n");
|
||||
Sleep(1000);
|
||||
printf("sleepbed.exe: Calling TimedSleepEx for 1 second.\n");
|
||||
TimedSleepEx(1000, false);
|
||||
printf("sleepbed.exe: Calling UntimedSleepEx for 1 second.\n");
|
||||
UntimedSleepEx(1000, false);
|
||||
printf("sleepbed.exe: Done sleeping.\n\n");
|
||||
|
||||
DetourTransactionBegin();
|
||||
DetourUpdateThread(GetCurrentThread());
|
||||
DetourDetach(&(PVOID&)TrueSleepEx, TimedSleepEx);
|
||||
error = DetourTransactionCommit();
|
||||
printf("sleepbed.exe: Removed SleepEx() detour (%d), slept %ld ticks.\n",
|
||||
error, dwSlept);
|
||||
fflush(stdout);
|
||||
|
||||
printf("sleepbed.exe: GetSleptTicks() = %ld\n\n", GetSleptTicks());
|
||||
return error;
|
||||
}
|
||||
//
|
||||
///////////////////////////////////////////////////////////////// End of File.
|
||||
76
test/Detours/samples/slept/sleepnew.cpp
Normal file
76
test/Detours/samples/slept/sleepnew.cpp
Normal file
@@ -0,0 +1,76 @@
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Detour Test Program (sleepnew.cpp of sleepnew.exe)
|
||||
//
|
||||
// Microsoft Research Detours Package
|
||||
//
|
||||
// Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
//
|
||||
|
||||
#include <windows.h>
|
||||
#include <stdio.h>
|
||||
#include "slept.h"
|
||||
|
||||
#include "verify.cpp"
|
||||
|
||||
int __cdecl main(void)
|
||||
{
|
||||
printf("sleepnew.exe: Starting.\n");
|
||||
Verify("SleepEx", (PBYTE)SleepEx);
|
||||
printf("\n");
|
||||
fflush(stdout);
|
||||
|
||||
printf("sleepnew.exe: Calling Sleep for 1 second.\n");
|
||||
Sleep(1000);
|
||||
printf("sleepnew.exe: Calling SleepEx for 1 second.\n");
|
||||
SleepEx(1000, true);
|
||||
printf("sleepnew.exe: Calling Sleep again for 1 second.\n");
|
||||
Sleep(1000);
|
||||
printf("sleepnew.exe: Calling TimedSleep for 1 second.\n");
|
||||
TimedSleepEx(1000, FALSE);
|
||||
printf("sleepnew.exe: Calling UntimedSleep for 1 second.\n");
|
||||
UntimedSleepEx(1000, FALSE);
|
||||
printf("sleepnew.exe: Done sleeping.\n\n");
|
||||
|
||||
#if 0
|
||||
// This code enumerates the virtual address space and attempts to reserve
|
||||
// all unused space below 8GB.
|
||||
//
|
||||
for (PBYTE pbTry = (PBYTE)0x10000; pbTry < (PBYTE)0x200000000;) {
|
||||
MEMORY_BASIC_INFORMATION mbi;
|
||||
|
||||
if (!VirtualQuery(pbTry, &mbi, sizeof(mbi))) {
|
||||
break;
|
||||
}
|
||||
|
||||
if (mbi.State == MEM_FREE && mbi.RegionSize > 0x10000) {
|
||||
PBYTE pbBase = (PBYTE)((((ULONG_PTR)pbTry) + 0xffff) & 0xffffffffffff0000);
|
||||
SIZE_T cbTry = mbi.RegionSize & 0xffffffffffff0000;
|
||||
if (cbTry > 0x40000000) {
|
||||
cbTry = 0x40000000;
|
||||
}
|
||||
PVOID pvRegion = VirtualAlloc(pbBase, cbTry,
|
||||
MEM_RESERVE,
|
||||
PAGE_NOACCESS);
|
||||
if (pvRegion == NULL) {
|
||||
printf("---%p..%p failed.\n", pbBase, mbi.RegionSize - 0x10000);
|
||||
}
|
||||
else {
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
printf(" %p..%p %6x [%p]\n",
|
||||
mbi.BaseAddress, (PBYTE)mbi.BaseAddress + mbi.RegionSize - 1,
|
||||
mbi.State,
|
||||
pbTry);
|
||||
|
||||
pbTry = (PBYTE)mbi.BaseAddress + mbi.RegionSize;
|
||||
}
|
||||
#endif
|
||||
|
||||
printf("sleepnew.exe: GetSleptTicks() = %ld\n\n", GetSleptTicks());
|
||||
return 0;
|
||||
}
|
||||
//
|
||||
///////////////////////////////////////////////////////////////// End of File.
|
||||
69
test/Detours/samples/slept/sleepold.cpp
Normal file
69
test/Detours/samples/slept/sleepold.cpp
Normal file
@@ -0,0 +1,69 @@
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Detour Test Program (sleepold.cpp of sleepold.exe)
|
||||
//
|
||||
// Microsoft Research Detours Package
|
||||
//
|
||||
// Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
//
|
||||
|
||||
#include <windows.h>
|
||||
#include <stdio.h>
|
||||
|
||||
#include "verify.cpp"
|
||||
|
||||
int __cdecl main(int argc, char **argv)
|
||||
{
|
||||
BOOL fQuiet = FALSE;
|
||||
|
||||
if (argc == 2 && _stricmp(argv[1], "-quiet") == 0) {
|
||||
fQuiet = TRUE;
|
||||
}
|
||||
|
||||
//
|
||||
// Verify what the code looks like.
|
||||
//
|
||||
printf("sleepold.exe: Starting (at %p).\n", main);
|
||||
if (!fQuiet) {
|
||||
Verify("SleepEx", (PBYTE)SleepEx);
|
||||
printf("\n");
|
||||
}
|
||||
fflush(stdout);
|
||||
|
||||
//
|
||||
// See if another process wants us to wait on a shared event.
|
||||
// This helps in testing loading a DLL into a new process.
|
||||
|
||||
if (argc == 2 && _stricmp(argv[1], "-wait") == 0) {
|
||||
HANDLE hEvent = OpenEventA(SYNCHRONIZE, FALSE, "detours_load_test_event");
|
||||
if (hEvent) {
|
||||
printf("sleepold.exe: Waiting for detours_load_test_event to be set.\n");
|
||||
fflush(stdout);
|
||||
WaitForSingleObject(hEvent, INFINITE);
|
||||
}
|
||||
else {
|
||||
printf("sleepold.exe: Couldn't open detours_load_test_event.\n");
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
// Try out sleep (which may be detours).
|
||||
//
|
||||
printf("sleepold.exe: Calling Sleep for 1 second.\n");
|
||||
Sleep(1000);
|
||||
|
||||
printf("sleepold.exe: Calling SleepEx for 1 second.\n");
|
||||
SleepEx(1000, false);
|
||||
|
||||
printf("sleepold.exe: Calling Sleep again for 1 second.\n");
|
||||
Sleep(1000);
|
||||
|
||||
// DebugBreak();
|
||||
|
||||
printf("sleepold.exe: Done sleeping.\n\n");
|
||||
fflush(stdout);
|
||||
|
||||
return 0;
|
||||
}
|
||||
//
|
||||
///////////////////////////////////////////////////////////////// End of File.
|
||||
130
test/Detours/samples/slept/slept.cpp
Normal file
130
test/Detours/samples/slept/slept.cpp
Normal file
@@ -0,0 +1,130 @@
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Detour Test Program (slept.cpp of slept.dll)
|
||||
//
|
||||
// Microsoft Research Detours Package
|
||||
//
|
||||
// Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
//
|
||||
#include <stdio.h>
|
||||
#include <windows.h>
|
||||
#include "detours.h"
|
||||
#include "slept.h"
|
||||
|
||||
#include "verify.cpp"
|
||||
|
||||
static BOOL fBroke = FALSE;
|
||||
static LONG dwSlept = 0;
|
||||
static DWORD (WINAPI * TrueSleepEx)(DWORD dwMilliseconds, BOOL bAlertable) = SleepEx;
|
||||
|
||||
DWORD WINAPI UntimedSleepEx(DWORD dwMilliseconds, BOOL bAlertable)
|
||||
{
|
||||
return TrueSleepEx(dwMilliseconds, bAlertable);
|
||||
}
|
||||
|
||||
DWORD WINAPI TimedSleepEx(DWORD dwMilliseconds, BOOL bAlertable)
|
||||
{
|
||||
DWORD dwBeg = GetTickCount();
|
||||
DWORD ret = TrueSleepEx(dwMilliseconds, bAlertable);
|
||||
DWORD dwEnd = GetTickCount();
|
||||
|
||||
if (!fBroke) {
|
||||
fBroke = TRUE;
|
||||
// DebugBreak();
|
||||
}
|
||||
|
||||
InterlockedExchangeAdd(&dwSlept, dwEnd - dwBeg);
|
||||
return ret;
|
||||
}
|
||||
|
||||
DWORD WINAPI GetSleptTicks(VOID)
|
||||
{
|
||||
return dwSlept;
|
||||
}
|
||||
|
||||
DWORD WINAPI TestTicks(VOID)
|
||||
{
|
||||
return TestTicksEx(0);
|
||||
}
|
||||
|
||||
DWORD WINAPI TestTicksEx(DWORD Add)
|
||||
{
|
||||
PDWORD pdw = new DWORD [Add + 1];
|
||||
|
||||
if (pdw != NULL) {
|
||||
pdw[0] = dwSlept;
|
||||
for (DWORD n = 1; n < Add + 1; n++) {
|
||||
pdw[n] = pdw[n-1] + 1;
|
||||
}
|
||||
|
||||
for (DWORD n = 1; n < Add + 1; n++) {
|
||||
pdw[n-1] = pdw[n-1] - 1;
|
||||
}
|
||||
|
||||
for (DWORD n = 1; n < Add + 1; n++) {
|
||||
pdw[n] = pdw[n-1] + 1;
|
||||
}
|
||||
|
||||
Add = pdw[Add] - Add;
|
||||
|
||||
delete [] pdw;
|
||||
}
|
||||
else {
|
||||
Add = dwSlept + Add;
|
||||
}
|
||||
|
||||
return Add;
|
||||
}
|
||||
|
||||
BOOL WINAPI DllMain(HINSTANCE hinst, DWORD dwReason, LPVOID reserved)
|
||||
{
|
||||
LONG error;
|
||||
(void)hinst;
|
||||
(void)reserved;
|
||||
|
||||
if (DetourIsHelperProcess()) {
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
if (dwReason == DLL_PROCESS_ATTACH) {
|
||||
DetourRestoreAfterWith();
|
||||
|
||||
printf("slept" DETOURS_STRINGIFY(DETOURS_BITS) ".dll: "
|
||||
" Starting.\n");
|
||||
PVOID pbExeEntry = DetourGetEntryPoint(NULL);
|
||||
PVOID pbDllEntry = DetourGetEntryPoint(hinst);
|
||||
printf("slept" DETOURS_STRINGIFY(DETOURS_BITS) ".dll: "
|
||||
" ExeEntry=%p, DllEntry=%p\n", pbExeEntry, pbDllEntry);
|
||||
|
||||
Verify("SleepEx", (PVOID)SleepEx);
|
||||
printf("\n");
|
||||
fflush(stdout);
|
||||
|
||||
DetourTransactionBegin();
|
||||
DetourUpdateThread(GetCurrentThread());
|
||||
DetourAttach(&(PVOID&)TrueSleepEx, TimedSleepEx);
|
||||
error = DetourTransactionCommit();
|
||||
|
||||
if (error == NO_ERROR) {
|
||||
printf("slept" DETOURS_STRINGIFY(DETOURS_BITS) ".dll: "
|
||||
" Detoured SleepEx() @ %p.\n", TrueSleepEx);
|
||||
}
|
||||
else {
|
||||
printf("slept" DETOURS_STRINGIFY(DETOURS_BITS) ".dll: "
|
||||
" Error detouring SleepEx(): %ld\n", error);
|
||||
}
|
||||
}
|
||||
else if (dwReason == DLL_PROCESS_DETACH) {
|
||||
DetourTransactionBegin();
|
||||
DetourUpdateThread(GetCurrentThread());
|
||||
DetourDetach(&(PVOID&)TrueSleepEx, TimedSleepEx);
|
||||
error = DetourTransactionCommit();
|
||||
printf("slept" DETOURS_STRINGIFY(DETOURS_BITS) ".dll: "
|
||||
" Removed SleepEx() detour (%ld), slept %ld ticks.\n", error, dwSlept);
|
||||
fflush(stdout);
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
//
|
||||
///////////////////////////////////////////////////////////////// End of File.
|
||||
18
test/Detours/samples/slept/slept.h
Normal file
18
test/Detours/samples/slept/slept.h
Normal file
@@ -0,0 +1,18 @@
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Detour Test Program (slept.h of slept.dll)
|
||||
//
|
||||
// Microsoft Research Detours Package
|
||||
//
|
||||
// Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
//
|
||||
#pragma once
|
||||
|
||||
DWORD WINAPI UntimedSleepEx(DWORD dwMilliseconds, BOOL bAlertable);
|
||||
DWORD WINAPI TimedSleepEx(DWORD dwMilliseconds, BOOL bAlertable);
|
||||
DWORD WINAPI GetSleptTicks(VOID);
|
||||
DWORD WINAPI TestTicks(VOID);
|
||||
DWORD WINAPI TestTicksEx(DWORD Add);
|
||||
|
||||
//
|
||||
///////////////////////////////////////////////////////////////// End of File.
|
||||
17
test/Detours/samples/slept/slept.rc
Normal file
17
test/Detours/samples/slept/slept.rc
Normal file
@@ -0,0 +1,17 @@
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Version information for sleep.rc.
|
||||
//
|
||||
// Microsoft Research Detours Package
|
||||
//
|
||||
// Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
//
|
||||
|
||||
#include "detver.h"
|
||||
|
||||
#define VER_INTERNALNAME_STR "sleep" DETOURS_STRINGIFY(DETOURS_BITS)
|
||||
#define VER_ORIGINALFILENAME_STR "sleep" DETOURS_STRINGIFY(DETOURS_BITS) ".dll"
|
||||
#define VER_FILEDESCRIPTION_STR "Detours Sleep Test Module"
|
||||
#define VER_COMPANYNAME_STR "Microsoft Corporation"
|
||||
|
||||
#include "common.ver"
|
||||
74
test/Detours/samples/slept/verify.cpp
Normal file
74
test/Detours/samples/slept/verify.cpp
Normal file
@@ -0,0 +1,74 @@
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Detour Test Program (verify.cpp)
|
||||
//
|
||||
// Microsoft Research Detours Package
|
||||
//
|
||||
// Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
//
|
||||
|
||||
#include <detours.h>
|
||||
|
||||
static VOID Dump(PBYTE pbBytes, LONG nBytes, PBYTE pbTarget)
|
||||
{
|
||||
for (LONG n = 0; n < nBytes; n += 16) {
|
||||
printf(" %p: ", pbBytes + n);
|
||||
for (LONG m = n; m < n + 16; m++) {
|
||||
if (m >= nBytes) {
|
||||
printf(" ");
|
||||
}
|
||||
else {
|
||||
printf("%02x", pbBytes[m]);
|
||||
}
|
||||
if (m % 4 == 3) {
|
||||
printf(" ");
|
||||
}
|
||||
}
|
||||
if (n == 0 && pbTarget != DETOUR_INSTRUCTION_TARGET_NONE) {
|
||||
printf(" [%p]", pbTarget);
|
||||
}
|
||||
printf("\n");
|
||||
}
|
||||
}
|
||||
|
||||
static VOID Decode(PCSTR pszDesc, PBYTE pbCode, PBYTE pbOther, PBYTE pbPointer, LONG nInst)
|
||||
{
|
||||
if (pbCode != pbPointer) {
|
||||
printf(" %s = %p [%p]\n", pszDesc, pbCode, pbPointer);
|
||||
}
|
||||
else {
|
||||
printf(" %s = %p\n", pszDesc, pbCode);
|
||||
}
|
||||
|
||||
if (pbCode == pbOther) {
|
||||
printf(" ... unchanged ...\n");
|
||||
return;
|
||||
}
|
||||
|
||||
PBYTE pbSrc = pbCode;
|
||||
PBYTE pbEnd;
|
||||
PVOID pbTarget;
|
||||
for (LONG n = 0; n < nInst; n++) {
|
||||
pbEnd = (PBYTE)DetourCopyInstruction(NULL, NULL, pbSrc, &pbTarget, NULL);
|
||||
Dump(pbSrc, (int)(pbEnd - pbSrc), (PBYTE)pbTarget);
|
||||
pbSrc = pbEnd;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
VOID WINAPI Verify(PCHAR pszFunc, PVOID pvPointer)
|
||||
{
|
||||
PVOID pvCode = DetourCodeFromPointer(pvPointer, NULL);
|
||||
|
||||
Decode(pszFunc, (PBYTE)pvCode, NULL, (PBYTE)pvPointer, 3);
|
||||
}
|
||||
|
||||
VOID WINAPI VerifyEx(PCHAR pszFunc, PVOID pvPointer, LONG nInst)
|
||||
{
|
||||
PVOID pvCode = DetourCodeFromPointer(pvPointer, NULL);
|
||||
|
||||
Decode(pszFunc, (PBYTE)pvCode, NULL, (PBYTE)pvPointer, nInst);
|
||||
}
|
||||
|
||||
//
|
||||
///////////////////////////////////////////////////////////////// End of File.
|
||||
Reference in New Issue
Block a user