521 lines
		
	
	
		
			16 KiB
		
	
	
	
		
			NASM
		
	
	
	
			
		
		
	
	
			521 lines
		
	
	
		
			16 KiB
		
	
	
	
		
			NASM
		
	
	
	
| ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 | |
| ;;
 | |
| ;;  Detours Test Program (x64.asm/disas.exe)
 | |
| ;;
 | |
| ;;  Microsoft Research Detours Package
 | |
| ;;
 | |
| ;;  Copyright (c) Microsoft Corporation.  All rights reserved.
 | |
| ;;
 | |
| 
 | |
| .xlist
 | |
| .list
 | |
| .code
 | |
| 
 | |
| PUBLIC  TestCodes
 | |
| 
 | |
| _TEXT   SEGMENT
 | |
| 
 | |
| TestCodes   PROC
 | |
| 
 | |
| begin:
 | |
| faraway:
 | |
|         int 3
 | |
|         nop
 | |
|         int 3
 | |
|         db      066h,090h ; // 2-byte NOP.
 | |
|         int 3
 | |
|         db      00fh, 01fh, 000h ; // 3-byte NOP.
 | |
|         int 3
 | |
|         db      00fh, 01fh, 040h, 000h ; // 4-byte NOP.
 | |
|         int 3
 | |
|         db      00fh, 01fh, 044h, 000h, 000h ; // 5-byte NOP.
 | |
|         int 3
 | |
|         db      066h, 00fh, 01fh, 044h, 000h, 000h ; // 6-byte NOP.
 | |
|         int 3
 | |
|         db      00fh, 01fh, 080h, 000h, 000h, 000h, 000h ; // 7-byte NOP.
 | |
|         int 3
 | |
|         db      00fh, 01fh, 084h, 000h, 000h, 000h, 000h, 000h ; // 8-byte NOP.
 | |
|         int 3
 | |
|         db      066h, 00fh, 01fh, 084h, 000h, 000h, 000h, 000h, 000h ; // 9-byte NOP.
 | |
|         int 3
 | |
|         mov     rax, cr8
 | |
|         int 3
 | |
|         mov     rcx, cr8
 | |
|         int 3
 | |
|         mov     rdx, cr8
 | |
|         int 3
 | |
|         mov     rbx, cr8
 | |
|         int 3
 | |
|         mov     rsp, cr8
 | |
|         int 3
 | |
|         mov     rbp, cr8
 | |
|         int 3
 | |
|         mov     rsi, cr8
 | |
|         int 3
 | |
|         mov     rdi, cr8
 | |
|         int 3
 | |
|         mov     r8, cr8
 | |
|         int 3
 | |
|         mov     r9, cr8
 | |
|         int 3
 | |
|         mov     r10, cr8
 | |
|         int 3
 | |
|         mov     r11, cr8
 | |
|         int 3
 | |
|         mov     r12, cr8
 | |
|         int 3
 | |
|         mov     r13, cr8
 | |
|         int 3
 | |
|         mov     r14, cr8
 | |
|         int 3
 | |
|         mov     r15, cr8
 | |
|         int 3
 | |
|         mov     cr8, rax
 | |
|         int 3
 | |
|         mov     cr8, rcx
 | |
|         int 3
 | |
|         mov     cr8, rdx
 | |
|         int 3
 | |
|         mov     cr8, rbx
 | |
|         int 3
 | |
|         mov     cr8, rsp
 | |
|         int 3
 | |
|         mov     cr8, rbp
 | |
|         int 3
 | |
|         mov     cr8, rsi
 | |
|         int 3
 | |
|         mov     cr8, rdi
 | |
|         int 3
 | |
|         mov     cr8, r8
 | |
|         int 3
 | |
|         mov     cr8, r9
 | |
|         int 3
 | |
|         mov     cr8, r10
 | |
|         int 3
 | |
|         mov     cr8, r11
 | |
|         int 3
 | |
|         mov     cr8, r12
 | |
|         int 3
 | |
|         mov     cr8, r13
 | |
|         int 3
 | |
|         mov     cr8, r14
 | |
|         int 3
 | |
|         mov     cr8, r15
 | |
|         int 3
 | |
|         xor     rax, rax
 | |
|         int 3
 | |
|         xor     rcx, rcx
 | |
|         int 3
 | |
|         xor     rdx, rdx
 | |
|         int 3
 | |
|         xor     rbx, rbx
 | |
|         int 3
 | |
|         xor     rsp, rsp
 | |
|         int 3
 | |
|         xor     rbp, rbp
 | |
|         int 3
 | |
|         xor     rsi, rsi
 | |
|         int 3
 | |
|         xor     rdi, rdi
 | |
|         int 3
 | |
|         xor     r8, r8
 | |
|         int 3
 | |
|         xor     r9, r9
 | |
|         int 3
 | |
|         xor     r10, r10
 | |
|         int 3
 | |
|         xor     r11, r11
 | |
|         int 3
 | |
|         xor     r12, r12
 | |
|         int 3
 | |
|         xor     r13, r13
 | |
|         int 3
 | |
|         xor     r14, r14
 | |
|         int 3
 | |
|         xor     r15, r15
 | |
|         int 3
 | |
|         jmp     rax
 | |
|         int 3
 | |
|         jmp     rbx
 | |
|         int 3
 | |
|         jmp     rcx
 | |
|         int 3
 | |
|         jmp     rdx
 | |
|         int 3
 | |
|         push    rax
 | |
|         int 3
 | |
|         push    rbx
 | |
|         int 3
 | |
|         push    rcx
 | |
|         int 3
 | |
|         push    rdx
 | |
|         int 3
 | |
|         push    0
 | |
|         int 3
 | |
|         pop     rax
 | |
|         int 3
 | |
|         pop     rbx
 | |
|         int 3
 | |
|         pop     rcx
 | |
|         int 3
 | |
|         pop     rdx
 | |
|         int 3
 | |
|         mov     rax,[value]
 | |
|         int 3
 | |
|         sub     rsp,0418h
 | |
|         int 3
 | |
|         mov     [rsp+0410h],rbx
 | |
|         int 3
 | |
|         mov     [rsp+0408h],rsi
 | |
|         int 3
 | |
|         mov     [rsp+0400h],rdi
 | |
|         int 3
 | |
|         mov     [rsp+03f8h],r12
 | |
|         int 3
 | |
|         mov     [rsp+03f0h],r13
 | |
|         int 3
 | |
|         mov     [rsp+03e8h],r14
 | |
|         int 3
 | |
|         mov     [rsp+03e0h],r15
 | |
|         int 3
 | |
|         add     [rax],al                                ; 0000
 | |
|         int 3
 | |
|         add     [rcx],al                                ; 0001
 | |
|         int 3
 | |
|         add     [rbx],al                                ; 0003
 | |
|         int 3
 | |
|         add     [rax+rax],al                            ; 000400
 | |
|         int 3
 | |
|         add     [rdi],al                                ; 0007
 | |
|         int 3
 | |
|         add     [rax],cl                                ; 0008
 | |
|         int 3
 | |
|         add     [rdi],cl                                ; 000f
 | |
|         int 3
 | |
|         add     [rax],dl                                ; 0010
 | |
|         int 3
 | |
|         add     [rdi],bl                                ; 001f
 | |
|         int 3
 | |
|         add     [rax],ah                                ; 0020
 | |
|         int 3
 | |
|         add     [rdi],bh                                ; 003f
 | |
|         int 3
 | |
|         add     [rax+03bh],cl                           ; 00483b
 | |
|         int 3
 | |
|         add     [rdi],bh                                ; 007f00
 | |
|         int 3
 | |
|         add     [rax+040000000h],al                     ; 008000000040
 | |
|         int 3
 | |
|         add     bh,bh                                   ; 00ff
 | |
|         int 3
 | |
|         add     [rax],eax                               ; 0100
 | |
|         int 3
 | |
|         add     al,[rax]                                ; 0200
 | |
|         int 3
 | |
|         add     eax,06603ebc3h                          ; 05c3eb0366
 | |
|         int 3
 | |
|         syscall                                         ; 0f05
 | |
|         int 3
 | |
|         prefetchw      byte ptr [rcx]                   ; 0f0d09
 | |
|         int 3
 | |
|         prefetchnta    byte ptr [rcx]                   ; 0f1801
 | |
|         int 3
 | |
|         prefetchnta    byte ptr [rax+rdx]               ; 0f180410
 | |
|         int 3
 | |
|         jb             again                            ; 0f8247070000
 | |
|         int 3
 | |
|         jnb            again                            ; 0f8306050000
 | |
|         int 3
 | |
|         je             again                            ; 0f8432010000
 | |
|         int 3
 | |
|         jne            again                            ; 0f8508010000
 | |
|         int 3
 | |
|         jnbe           again                            ; 0f878a000000
 | |
|         int 3
 | |
|         ldmxcsr        dword ptr [rcx+034h]             ; 0fae5134
 | |
|         int 3
 | |
|         stmxcsr        dword ptr [rcx+034h]             ; 0fae5934
 | |
|         int 3
 | |
|         and            ecx,[rdx+rbx*4]                  ; 230c9a
 | |
|         int 3
 | |
|         xor            eax,eax                          ; 33c0
 | |
|         int 3
 | |
|         xor            ecx,ecx                          ; 33c9
 | |
|         int 3
 | |
|         xor            edx,ecx                          ; 33d1
 | |
|         int 3
 | |
|         xor            edx,edx                          ; 33d2
 | |
|         int 3
 | |
|         add            r10d,010001h                     ; 4181c201000100
 | |
|         int 3
 | |
|         and            r11d,0ffffh                      ; 4181e3ffff0000
 | |
|         int 3
 | |
|         mov            eax,r8d                          ; 418bc0
 | |
|         int 3
 | |
|         mov            byte ptr [r11],00h               ; 41c60300
 | |
|         int 3
 | |
|         call           qword ptr [r9+030h]              ; 41ff5130
 | |
|         int 3
 | |
|         call           qword ptr [r9+r8*8]              ; 43ff14c1
 | |
|         int 3
 | |
|         mov            [rcx+034h],r8d                   ; 44894134
 | |
|         int 3
 | |
|         mov            [rsp+030h],r9d                   ; 44894c2430
 | |
|         int 3
 | |
|         mov            r8d,[rcx]                        ; 448b01
 | |
|         int 3
 | |
|         mov            r9d,[rcx]                        ; 448b09
 | |
|         int 3
 | |
|         mov            r8d,[rax+058h]                   ; 448b4058
 | |
|         int 3
 | |
|         mov            r8d,[rsp+02ch]                   ; 448b44242c
 | |
|         int 3
 | |
|         mov            r8d,eax                          ; 448bc0
 | |
|         int 3
 | |
|         mov            r8d,edx                          ; 448bc2
 | |
|         int 3
 | |
|         xor            r8b,r8b                          ; 4532c0
 | |
|         int 3
 | |
|         mov            r9d,r8d                          ; 458bc8
 | |
|         int 3
 | |
|         lea            r11d,[r9+rax]                    ; 458d1c01
 | |
|         int 3
 | |
|         add            rdx,rcx                          ; 4803d1
 | |
|         int 3
 | |
|         or             rsi,rdx                          ; 480bf2
 | |
|         int 3
 | |
|         movnti         [rcx],rax                        ; 480fc301
 | |
|         int 3
 | |
|         and            rax,0fe000000h                   ; 4825000000fe
 | |
|         int 3
 | |
|         sub            rax,rcx                          ; 482bc1
 | |
|         int 3
 | |
|         sub            rdx,rcx                          ; 482bd1
 | |
|         int 3
 | |
|         cmp            rdi,rbp                          ; 483bfd
 | |
|         int 3
 | |
|         push           rbp                              ; 4855
 | |
|         int 3
 | |
|         add            rcx,03d0h                        ; 4881c1d0030000
 | |
|         int 3
 | |
|         add            rsp,0c8h                         ; 4881c4c8000000
 | |
|         int 3
 | |
|         and            rdx,0fe000000h                   ; 4881e2000000fe
 | |
|         int 3
 | |
|         sub            rsp,0c8h                         ; 4881ecc8000000
 | |
|         int 3
 | |
|         sub            rsp,03d0h                        ; 4881ecd0030000
 | |
|         int 3
 | |
|         add            rax,040h                         ; 4883c040
 | |
|         int 3
 | |
|         add            rcx,08h                          ; 4883c108
 | |
|         int 3
 | |
|         add            rcx,040h                         ; 4883c140
 | |
|         int 3
 | |
|         add            rsp,08h                          ; 4883c408
 | |
|         int 3
 | |
|         add            rsi,09h                          ; 4883c609
 | |
|         int 3
 | |
|         add            rdi,01h                          ; 4883c701
 | |
|         int 3
 | |
|         and            rcx,0f8h                         ; 4883e1f8
 | |
|         int 3
 | |
|         sub            rax,040h                         ; 4883e840
 | |
|         int 3
 | |
|         sub            rdx,08h                          ; 4883ea08
 | |
|         int 3
 | |
|         sub            rdx,040h                         ; 4883ea40
 | |
|         int 3
 | |
|         sub            rsp,08h                          ; 4883ec08
 | |
|         int 3
 | |
|         sub            rsi,08h                          ; 4883ee08
 | |
|         int 3
 | |
|         sub            rdi,01h                          ; 4883ef01
 | |
|         int 3
 | |
|         test           rax,rax                          ; 4885c0
 | |
|         int 3
 | |
|         test           rdx,rdx                          ; 4885d2
 | |
|         int 3
 | |
|         mov            [rsp],rax                        ; 48890424
 | |
|         int 3
 | |
|         mov            [rsp],rbp                        ; 48892c24
 | |
|         int 3
 | |
|         mov            [rsp],rsi                        ; 48893424
 | |
|         int 3
 | |
|         mov            [rsp],rdi                        ; 48893c24
 | |
|         int 3
 | |
|         mov            [rcx+08h],rax                    ; 48894108
 | |
|         int 3
 | |
|         mov            [rcx+078h],rax                   ; 48894178
 | |
|         int 3
 | |
|         mov            [rcx-08h],rax                    ; 488941f8
 | |
|         int 3
 | |
|         mov            [rsp+018h],rax                   ; 4889442418
 | |
|         int 3
 | |
|         mov            [rcx+010h],rdx                   ; 48895110
 | |
|         int 3
 | |
|         mov            [rsp+08h],rbx                    ; 48895c2408
 | |
|         int 3
 | |
|         mov            [rsp+018h],rsi                   ; 4889742418
 | |
|         int 3
 | |
|         mov            [rsp+08h],rdi                    ; 48897c2408
 | |
|         int 3
 | |
|         mov            [rsp+010h],rdi                   ; 48897c2410
 | |
|         int 3
 | |
|         mov            [rcx+098h],rax                   ; 48898198000000
 | |
|         int 3
 | |
|         mov            [rcx+080h],rcx                   ; 48898980000000
 | |
|         int 3
 | |
|         mov            [rcx+088h],rdx                   ; 48899188000000
 | |
|         int 3
 | |
|         mov            [rcx+090h],rbx                   ; 48899990000000
 | |
|         int 3
 | |
|         mov            [rcx+0a0h],rbp                   ; 4889a9a0000000
 | |
|         int 3
 | |
|         mov            [rcx+0a8h],rsi                   ; 4889b1a8000000
 | |
|         int 3
 | |
|         mov            [rcx+0b0h],rdi                   ; 4889b9b0000000
 | |
|         int 3
 | |
|         mov            rax,[rcx]                        ; 488b01
 | |
|         int 3
 | |
|         mov            rax,[rcx+rdx]                    ; 488b0411
 | |
|         int 3
 | |
|         mov            rax,[value]                      ; 488b05318c0100
 | |
|         int 3
 | |
|         mov            rcx,[rsp]                        ; 488b0c24
 | |
|         int 3
 | |
|         mov            rsi,[rsp]                        ; 488b3424
 | |
|         int 3
 | |
|         mov            rdi,[rsp]                        ; 488b3c24
 | |
|         int 3
 | |
|         mov            rax,[rax+018h]                   ; 488b4018
 | |
|         int 3
 | |
|         mov            rax,[rcx+078h]                   ; 488b4178
 | |
|         int 3
 | |
|         mov            rax,[rdx+020h]                   ; 488b4220
 | |
|         int 3
 | |
|         mov            rax,[rsp+08h]                    ; 488b442408
 | |
|         int 3
 | |
|         mov            rcx,[rcx+08h]                    ; 488b4908
 | |
|         int 3
 | |
|         mov            rcx,[rsp+020h]                   ; 488b4c2420
 | |
|         int 3
 | |
|         mov            rdx,[rsp+08h]                    ; 488b542408
 | |
|         int 3
 | |
|         mov            rdi,[rsp+08h]                    ; 488b7c2408
 | |
|         int 3
 | |
|         mov            rax,[rcx+098h]                   ; 488b8198000000
 | |
|         int 3
 | |
|         mov            rax,[rcx+0f8h]                   ; 488b81f8000000
 | |
|         int 3
 | |
|         cmp            ebx,0                            ;
 | |
|         int 3
 | |
|         cmp            rbx,0                            ;
 | |
|         int 3
 | |
|         cmp            byte ptr [value],77h             ; 803d........77
 | |
|         int 3
 | |
|         cmp            dword ptr [value],77h            ; 833d........77
 | |
|         int 3
 | |
|         cmp            qword ptr [value],77h            ; 48833d........77
 | |
|         int 3
 | |
|         cmp            dword ptr [value],77777777h      ; 813d........77777777
 | |
|         int 3
 | |
|         cmp            qword ptr [value],77777777h      ; 48813d........77777777
 | |
|         int 3
 | |
| nearby:
 | |
|         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
 | |
|         jmp     nearby                                  ; ebxx
 | |
| 
 | |
|         int 3
 | |
|         jo      faraway                                 ; 0f80xxxxxxxx
 | |
|         int 3
 | |
|         jno     faraway                                 ; 0f81xxxxxxxx
 | |
|         int 3
 | |
|         jb      faraway                                 ; 0f82xxxxxxxx
 | |
|         int 3
 | |
|         jae     faraway                                 ; 0f83xxxxxxxx
 | |
|         int 3
 | |
|         je      faraway                                 ; 0f84xxxxxxxx
 | |
|         int 3
 | |
|         jne     faraway                                 ; 0f85xxxxxxxx
 | |
|         int 3
 | |
|         jbe     faraway                                 ; 0f86xxxxxxxx
 | |
|         int 3
 | |
|         ja      faraway                                 ; 0f87xxxxxxxx
 | |
|         int 3
 | |
|         js      faraway                                 ; 0f88xxxxxxxx
 | |
|         int 3
 | |
|         jns     faraway                                 ; 0f89xxxxxxxx
 | |
|         int 3
 | |
|         jp      faraway                                 ; 0f8axxxxxxxx
 | |
|         int 3
 | |
|         jnp     faraway                                 ; 0f8bxxxxxxxx
 | |
|         int 3
 | |
|         jl      faraway                                 ; 0f8cxxxxxxxx
 | |
|         int 3
 | |
|         jge     faraway                                 ; 0f8dxxxxxxxx
 | |
|         int 3
 | |
|         jle     faraway                                 ; 0f8exxxxxxxx
 | |
|         int 3
 | |
|         jg      faraway                                 ; 0f8fxxxxxxxx
 | |
|         int 3
 | |
|         jmp     faraway                                 ; e9xxxxxxxx
 | |
| 
 | |
|         int 3
 | |
|         lea     rax,[rsp]                               ; 488d0424        
 | |
|         int 3
 | |
|         mov rcx,0BADC0DEBA5Eh                           ;  48b95ebadec0ad0b0000 
 | |
|         int 3
 | |
|         cmp     rax,rcx                                 ;  483bc1
 | |
| 
 | |
|         int 3
 | |
|         sub rsp, 28h
 | |
|         int 3
 | |
|         add rsp,28h
 | |
|         int 3
 | |
|         ret
 | |
|         int 3
 | |
| 
 | |
| 
 | |
| ;; The list is terminated by two "int 3" in a row.
 | |
| again:
 | |
|         int 3
 | |
|         int 3
 | |
| TestCodes   ENDP
 | |
| 
 | |
| value   QWORD   0
 | |
| 
 | |
| _TEXT   ENDS
 | |
| END
 |