aboutsummaryrefslogtreecommitdiffhomepage
path: root/ext/detours/samples/disas/arm.asm
diff options
context:
space:
mode:
Diffstat (limited to 'ext/detours/samples/disas/arm.asm')
-rw-r--r--ext/detours/samples/disas/arm.asm232
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