233 lines
		
	
	
		
			6.6 KiB
		
	
	
	
		
			NASM
		
	
	
	
			
		
		
	
	
			233 lines
		
	
	
		
			6.6 KiB
		
	
	
	
		
			NASM
		
	
	
	
| ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 | |
| ;;
 | |
| ;;  Detours Test Program (rlo.asm/disas.exe)
 | |
| ;;
 | |
| ;;  Microsoft Research Detours Package
 | |
| ;;
 | |
| ;;  Copyright (c) Microsoft Corporation.  All rights reserved.
 | |
| ;;
 | |
| 
 | |
|         MACRO
 | |
|         BREAK
 | |
|         DCW 0xdefe
 | |
|         MEND
 | |
| 
 | |
|         AREA    |.text|,ALIGN=2,CODE,READONLY
 | |
| 
 | |
|         AREA    |.text|,CODE,READONLY
 | |
| 
 | |
|         ALIGN 0x1000
 | |
| 
 | |
|         EXPORT  |TestCodes|
 | |
| |TestCodes|
 | |
| 
 | |
| ;        dcw 0xf8df,0xe00e                               ; 94  = -16 = -12 ; 94 ; 98 + e = a6
 | |
| ;        BREAK                                           ; 98  = -14 = -10 ; 98 ; 9c
 | |
| ;        dcw 0xf8df,0xe00a                               ; 9a  = -12 = -8  ; 98 ; 9c + a = a6
 | |
| ;        BREAK                                           ; 9e =  -8 = -4   ; 9c ; a0
 | |
| ;        dcw 0xf8df,0xe002                               ; a0 =  -6 = -2   ; a0 ; a4 + 2 = a6
 | |
| ;        BREAK                                           ; a4 =  -2        ; a4 ; a8
 | |
| ;        movs r2, r0                                     ; a6 <===
 | |
| ;        movs r3, r0                                     ;
 | |
| ;        BREAK
 | |
| ;        BREAK
 | |
| ;
 | |
| ;        ldr     lr,=0xa98765
 | |
| ;        ldr     pc,=0xa98765
 | |
| ;        ldr     pc,=0xa98765
 | |
| ;        ldr     pc,=0xa98765
 | |
| ;        BREAK
 | |
| ;       BREAK
 | |
| 
 | |
|         BREAK
 | |
|         ldr     lr, =0xa98765
 | |
|         BREAK
 | |
|         blx     lr
 | |
| 
 | |
|         BREAK
 | |
|         pop     pc
 | |
|         BREAK
 | |
|         pop     {r11,pc}
 | |
|         BREAK
 | |
|         pop     {r10,r11,pc}
 | |
|         BREAK
 | |
|         pop     {r9,r10,r11,pc}
 | |
|         BREAK
 | |
|         pop     {r1,r2,r3,r4,r5,r6,r7,r8,r9,r10,r11,pc}
 | |
| 
 | |
|         BREAK
 | |
|         ldr.w     r0,=0xa98765
 | |
|         BREAK
 | |
|         nop
 | |
|         ldr.w     r0,=0xa98765
 | |
|         BREAK
 | |
|         nop
 | |
|         nop
 | |
|         ldr.w     r0,=0xa98765
 | |
| 
 | |
|         BREAK
 | |
|         ldr     r0,=0xa98765
 | |
|         BREAK
 | |
|         ldr.w   r0,=0xa98765
 | |
|         BREAK
 | |
|         ldr.w   r0,=0xa98765
 | |
|         BREAK
 | |
|         ldr     r0,=0xa98765
 | |
|         BREAK
 | |
|         ldr.w   r0,=0xa98765
 | |
|         BREAK
 | |
|         ldr.w   r0,=0xa98765
 | |
|         BREAK
 | |
|         ldr     r0,=0xa98765
 | |
|         BREAK
 | |
|         ldr.w   r0,=0xa98765
 | |
|         BREAK
 | |
|         ldr.w   r0,=0xa98765
 | |
| 
 | |
|         BREAK
 | |
|         ldr     r0,=0xa98765
 | |
|         BREAK
 | |
|         nop
 | |
|         ldr     r0,=0xa98765
 | |
|         BREAK
 | |
|         nop
 | |
|         nop
 | |
|         ldr     r0,=0xa98765
 | |
| 
 | |
|         BREAK
 | |
|         nop
 | |
|         ldr     r0,=0xa
 | |
|         BREAK
 | |
|         ldr     r0,=0xa9
 | |
|         BREAK
 | |
|         ldr     r0,=0xa98
 | |
|         BREAK
 | |
|         ldr     r0,=0xa987
 | |
|         BREAK
 | |
|         ldr     r0,=0xa9876
 | |
|         BREAK
 | |
|         ldr     r0,=0xa98765
 | |
|         BREAK
 | |
|         ldr     r0,=0xa987654
 | |
|         BREAK
 | |
|         ldr     r0,=0xa9876543
 | |
| 
 | |
|         ;; Simple instructions.
 | |
|         BREAK
 | |
|         adds r0,r0, #5                                  ; 1d40
 | |
|         BREAK
 | |
|         movs r2, #0                                     ; 2200
 | |
|         BREAK
 | |
|         movs r3, #0                                     ; 2300
 | |
|         BREAK
 | |
|         bx lr                                           ; 4770 [FFFFFFFF]
 | |
| 
 | |
|         ;; Known 16-bit instructions
 | |
|         BREAK
 | |
|         mov r11, sp                                     ; 46eb
 | |
|         BREAK
 | |
|         movs r2, r0                                     ; 0002
 | |
|         BREAK
 | |
|         push r0, r1                                     ; b403
 | |
|         BREAK
 | |
|         str r3,[r7,#0x28]                               ; 62bb
 | |
|         BREAK
 | |
|         bx r5                                           ; 4728 [FFFFFFFF]
 | |
|         BREAK
 | |
|         blx r5                                          ; 47a8
 | |
|         BREAK
 | |
|         DCW 0x4878 ;  ldr r0, [PC + 0x1E0]              ; 4878
 | |
|         BREAK
 | |
|         str r3,[r7,#0x1C]                               ; 61fb
 | |
|         BREAK
 | |
|         ldr r3,[r7,#0x38]                               ; 6bbb
 | |
|         BREAK
 | |
|         add r3,sp,#0xCC                                 ; ab33
 | |
|         BREAK
 | |
|         cbz r2,+0x56                                    ; b34a [00xx1510]
 | |
|         BREAK
 | |
|         cbnz r2,+0x56                                   ; bb4a [00xx1514]
 | |
|         BREAK
 | |
|         push {r0,r2,r4,r6,lr}                           ; b555
 | |
|         BREAK
 | |
|         nop                                             ; bf00
 | |
| 
 | |
|         ;; Placeholder for IT instruction
 | |
|         BREAK
 | |
|         bne +0x6E                                       ; d135 [00xx1538] -??? d137
 | |
|         BREAK
 | |
|         svc #0x24                                       ; df24
 | |
|         BREAK
 | |
|         b +0x7FE                                        ; e3fd [00xx1cd0] -??? e3ff
 | |
| 
 | |
|         ;; 32 bit test codes
 | |
|         BREAK
 | |
|         adds r0,r7,#8                                   ; f1170008
 | |
|         BREAK
 | |
|         str r3,[r5,#0x677]                              ; f8c53677
 | |
|         BREAK
 | |
|         ldrsh r10,[r5,#0x5A5]                           ; f9b5a5a5
 | |
|         BREAK
 | |
|         DCW 0xf89f,0x55a5 ;ldrb r5, [+0x5A5]            ; f89f55a5
 | |
|         BREAK
 | |
|         bls.w +0x86;    0xf240; 0x8043; //              ; f2408041 [00xx157A]
 | |
|         BREAK
 | |
|         bl +0xFE;    0xf7ff; 0xff80; //
 | |
|         BREAK
 | |
|         bl +0xFFE;    0xf7ff; 0xff80; //
 | |
|         BREAK
 | |
|         bl +0xFFFE;    0xf7ff; 0xff80; //
 | |
|         BREAK
 | |
|         bl +0xFFFFE;    0xf7ff; 0xff80; //
 | |
|         BREAK
 | |
|         bl +0xFFFFFE;    0xf7ff; 0xff80; //
 | |
|         BREAK
 | |
|         bl +0xF0;    0xf7ff; 0xff80; //
 | |
|         BREAK
 | |
|         bl +0xFF0;    0xf7ff; 0xff80; //
 | |
|         BREAK
 | |
|         bl +0xFFF0;    0xf7ff; 0xff80; //
 | |
|         BREAK
 | |
|         bl +0xFFFF0;    0xf7ff; 0xff80; //
 | |
|         BREAK
 | |
|         bl +0xFFFFF0;    0xf7ff; 0xff80; //
 | |
|         BREAK
 | |
|         bl +0xF00;    0xf7ff; 0xff80; //
 | |
|         BREAK
 | |
|         bl +0xFF00;    0xf7ff; 0xff80; //
 | |
|         BREAK
 | |
|         bl +0xFFF00;    0xf7ff; 0xff80; //
 | |
|         BREAK
 | |
|         bl +0xFFFF00;    0xf7ff; 0xff80; //
 | |
|         BREAK
 | |
|         DCW 0xf7ff,0xff80
 | |
|         ;bl +0xFFFFFF00;    0xf7ff; 0xff80; //
 | |
|         BREAK
 | |
|         DCW 0xf7ff,0xbe02
 | |
|         ;        b.w ;    0xf7ff; 0xbe02; //  (10053528)
 | |
|         BREAK
 | |
|         push {r7,r11,lr};    0xe92d; 0x4880; //
 | |
| 
 | |
|         ;; 32 bit expected results
 | |
|         BREAK
 | |
|         adds r0,r7,#8                                   ; 0xf1170008
 | |
|         BREAK
 | |
|         str r3,[r5,#0x677]                              ; 0xf8c53677
 | |
|         BREAK
 | |
|         ldrsh r10,[r5,#0x5A5]                           ; 0xf9b5a5a5
 | |
| 
 | |
|         BREAK
 | |
|         DCW 0xf6af,0xfbd2
 | |
|         ; bl (0008ef3c);    ResultCode(4, 0xf6af, 0xfbd2, Target(ADDRESS(&g_pTestCodes32[i*2], 0xFFFFFF00))); // 0xf7ff, 0xff80: -> 0xf6affbd2
 | |
|         BREAK
 | |
|         bl (00090300);    ResultCode(4, 0xf6af, 0xba54, Target(ADDRESS(&g_pTestCodes32[i*2], 0xFFFFFC04))); // 0xf7ff, 0xff80: -> f6afba54 bl (00090300)
 | |
|         BREAK
 | |
|         push {r7,r11,lr};    ResultCode(4, 0xe92d, 0x4880); // 0xe92d, 0x4880: //
 | |
| 
 | |
|         BREAK
 | |
|         BREAK
 | |
| 
 | |
| |TestCodes_end|
 | |
| 
 | |
|         END
 |