185 lines
		
	
	
		
			5.0 KiB
		
	
	
	
		
			C++
		
	
	
	
		
		
			
		
	
	
			185 lines
		
	
	
		
			5.0 KiB
		
	
	
	
		
			C++
		
	
	
	
|  | /////////////////////////////////////////////////////////////////////////////
 | ||
|  | //
 | ||
|  | //  Detours Test Program (x86.asm of disas.exe)
 | ||
|  | //
 | ||
|  | //  Microsoft Research Detours Package
 | ||
|  | //
 | ||
|  | //  Copyright (c) Microsoft Corporation.  All rights reserved.
 | ||
|  | //
 | ||
|  | 
 | ||
|  | static int value = 0; | ||
|  | 
 | ||
|  | extern "C" void __declspec(naked) TestCodes() | ||
|  | { | ||
|  |     __asm { | ||
|  | // Each instruction is proceeded by an "int 3".
 | ||
|  |       faraway: | ||
|  |         int 3; | ||
|  |         nop;        // 1-byte NOP.
 | ||
|  |         int 3; | ||
|  |         _emit 0x66; // 2-byte NOP.
 | ||
|  |         _emit 0x90; | ||
|  |         int 3; | ||
|  |         _emit 0x0f; // 3-byte NOP.
 | ||
|  |         _emit 0x1f; | ||
|  |         _emit 0x00; | ||
|  |         int 3; | ||
|  |         _emit 0x0f; // 4-byte NOP.
 | ||
|  |         _emit 0x1f; | ||
|  |         _emit 0x40; | ||
|  |         _emit 0x00; | ||
|  |         int 3; | ||
|  |         _emit 0x0f; // 5-byte NOP.
 | ||
|  |         _emit 0x1f; | ||
|  |         _emit 0x44; | ||
|  |         _emit 0x00; | ||
|  |         _emit 0x00; | ||
|  |         int 3; | ||
|  |         _emit 0x66; // 6-byte NOP.
 | ||
|  |         _emit 0x0f; | ||
|  |         _emit 0x1f; | ||
|  |         _emit 0x44; | ||
|  |         _emit 0x00; | ||
|  |         _emit 0x00; | ||
|  |         int 3; | ||
|  |         _emit 0x0f; // 7-byte NOP.
 | ||
|  |         _emit 0x1f; | ||
|  |         _emit 0x80; | ||
|  |         _emit 0x00; | ||
|  |         _emit 0x00; | ||
|  |         _emit 0x00; | ||
|  |         _emit 0x00; | ||
|  |         int 3; | ||
|  |         _emit 0x0f; // 8-byte NOP.
 | ||
|  |         _emit 0x1f; | ||
|  |         _emit 0x84; | ||
|  |         _emit 0x00; | ||
|  |         _emit 0x00; | ||
|  |         _emit 0x00; | ||
|  |         _emit 0x00; | ||
|  |         _emit 0x00; | ||
|  |         int 3; | ||
|  |         _emit 0x66; // 9-byte NOP.
 | ||
|  |         _emit 0x0f; | ||
|  |         _emit 0x1f; | ||
|  |         _emit 0x84; | ||
|  |         _emit 0x00; | ||
|  |         _emit 0x00; | ||
|  |         _emit 0x00; | ||
|  |         _emit 0x00; | ||
|  |         _emit 0x00; | ||
|  |         int 3; | ||
|  |         mov     ecx, eax; | ||
|  |         int 3; | ||
|  |         mov     ebx, 0ffff000eh; | ||
|  |         int 3; | ||
|  |         call    ebx; | ||
|  |         int 3; | ||
|  |         call    dword ptr [eax]; | ||
|  |         int 3; | ||
|  |         call    dword ptr [ebx]; | ||
|  |         int 3; | ||
|  |         call    dword ptr [ecx]; | ||
|  |         int 3; | ||
|  |         call    dword ptr [edx]; | ||
|  |         int 3; | ||
|  |         jmp     dword ptr [eax]; | ||
|  |         int 3; | ||
|  |         jmp     dword ptr [ebx]; | ||
|  |         int 3; | ||
|  |         jmp     dword ptr [ecx]; | ||
|  |         int 3; | ||
|  |         jmp     dword ptr [edx]; | ||
|  |         int 3; | ||
|  |         call    ecx; | ||
|  |         int 3; | ||
|  |         call    eax; | ||
|  |         int 3; | ||
|  |         mov     ebx, 0ffff000eh; | ||
|  |         int 3; | ||
|  |         push    eax; | ||
|  |         int 3; | ||
|  |         call    ebx; | ||
|  |         int 3; | ||
|  |         cmp     ebx, 0; | ||
|  |         int 3; | ||
|  |         cmp     byte ptr [value], 77h; | ||
|  |         int 3; | ||
|  |         cmp     dword ptr [value], 77h; | ||
|  |         int 3; | ||
|  |         cmp     dword ptr [value], 77777777h; | ||
|  |       nearby: | ||
|  |         int 3 | ||
|  |         jo      nearby                                  ; 70xx | ||
|  |         int 3 | ||
|  |         jno     nearby                                  ; 71xx | ||
|  |         int 3 | ||
|  |         jb      nearby                                  ; 72xx | ||
|  |         int 3 | ||
|  |         jae     nearby                                  ; 73xx | ||
|  |         int 3 | ||
|  |         je      nearby                                  ; 74xx | ||
|  |         int 3 | ||
|  |         jne     nearby                                  ; 75xx | ||
|  |         int 3 | ||
|  |         jbe     nearby                                  ; 76xx | ||
|  |         int 3 | ||
|  |         ja      nearby                                  ; 77xx | ||
|  |         int 3 | ||
|  |         js      nearby                                  ; 78xx | ||
|  |         int 3 | ||
|  |         jns     nearby                                  ; 79xx | ||
|  |         int 3 | ||
|  |         jp      nearby                                  ; 7axx | ||
|  |         int 3 | ||
|  |         jnp     nearby                                  ; 7bxx | ||
|  |         int 3 | ||
|  |         jl      nearby                                  ; 7cxx | ||
|  |         int 3 | ||
|  |         jge     nearby                                  ; 7dxx | ||
|  |         int 3 | ||
|  |         jle     nearby                                  ; 7exx | ||
|  |         int 3 | ||
|  |         jg      nearby                                  ; 7fxx | ||
|  | 
 | ||
|  |         int 3 | ||
|  |         jo      faraway                                 ; 0f80xx | ||
|  |         int 3 | ||
|  |         jno     faraway                                 ; 0f81xx | ||
|  |         int 3 | ||
|  |         jb      faraway                                 ; 0f82xx | ||
|  |         int 3 | ||
|  |         jae     faraway                                 ; 0f83xx | ||
|  |         int 3 | ||
|  |         je      faraway                                 ; 0f84xx | ||
|  |         int 3 | ||
|  |         jne     faraway                                 ; 0f85xx | ||
|  |         int 3 | ||
|  |         jbe     faraway                                 ; 0f86xx | ||
|  |         int 3 | ||
|  |         ja      faraway                                 ; 0f87xx | ||
|  |         int 3 | ||
|  |         js      faraway                                 ; 0f88xx | ||
|  |         int 3 | ||
|  |         jns     faraway                                 ; 0f89xx | ||
|  |         int 3 | ||
|  |         jp      faraway                                 ; 0f8axx | ||
|  |         int 3 | ||
|  |         jnp     faraway                                 ; 0f8bxx | ||
|  |         int 3 | ||
|  |         jl      faraway                                 ; 0f8cxx | ||
|  |         int 3 | ||
|  |         jge     faraway                                 ; 0f8dxx | ||
|  |         int 3 | ||
|  |         jle     faraway                                 ; 0f8exx | ||
|  |         int 3 | ||
|  |         jg      faraway                                 ; 0f8fxx | ||
|  | 
 | ||
|  | // The list is terminated by two "int 3" in a row.
 | ||
|  |         int 3; | ||
|  |         int 3; | ||
|  |         ret; | ||
|  |     } | ||
|  | } | ||
|  | 
 |