diff options
Diffstat (limited to 'ext/detours/samples/disas/arm.asm')
-rw-r--r-- | ext/detours/samples/disas/arm.asm | 232 |
1 files changed, 232 insertions, 0 deletions
diff --git a/ext/detours/samples/disas/arm.asm b/ext/detours/samples/disas/arm.asm new file mode 100644 index 0000000..10073b7 --- /dev/null +++ b/ext/detours/samples/disas/arm.asm @@ -0,0 +1,232 @@ +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; 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 |