<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1"> <!-- The above 3 meta tags *must* come first in the head; any other head content must come *after* these tags --> <title>Assembly Voyageur</title> <!-- Bootstrap --> <link href="/static/css/bootstrap.min.css" rel="stylesheet"> <!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries --> <!-- WARNING: Respond.js doesn't work if you view the page via file:// --> <!--[if lt IE 9]> <script src="https://oss.maxcdn.com/html5shiv/3.7.3/html5shiv.min.js"></script> <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script> <![endif]--> </head> <body> <div class="container"> <h1>Assembly Voyager: Embark on Your Journey</h1> <div class="voyage mb-1"> <div class="voyage-body"> <label>Voyage Directions:</label> <div> <h2>i386 Island</h2> You start off your voyage at i386 island. You find a map, but you're not sure how to interpret it. Before we go, we should check on the supplies. It looks like we've got enough of most things: <ul> <li>0x28cb958d EAX's</li> <li>0xb643052 EBX's</li> <li>0x8e44508f ECX's</li> <li>0x10231413 EDX's</li> <li>0xcbb6536f ESI's</li> <li>0x4ab7291d EDI's</li> </ul> Perhaps you can help us decode the map:<br/> <textarea cols="80" rows="10" disabled="true">lea ecx, [esi+8*edx-3605] sub esi, ebx shr esi, 4 not edi or ecx, ebx andn ebx, edx, eax rol edx, 8 and ecx, esi je label_qwqthrijuy mov edx, esi label_qwqthrijuy: lea eax, [ecx+3101] lea esi, [ebx+4*ecx+1359] shl ecx, 14 xor ebx, eax sal ecx, 8 lea ecx, [edi+4*esi+1864] add edi, edx cmpxchg ebx, ecx and edi, eax shl eax, 6 andn edi, ebx, esi and eax, 0x1f sarx edi, edx, eax rol esi, 11 shr esi, 12 lea ebx, [edx+8*eax-3202] and ebx, 0x1f shlx edi, edx, ebx </textarea> </div> <br/> <div> <h2>x86_64 Caves</h2> Next, we'll stop by the x86_64 caves and do some spelunking. Unfortunately, we didn't pack any clothes for the 64 degree temperatures in the caves. Thankfully we know how to convert our supplies from i386 island though: <ul> <li>X86_64.RAX = i386.EAX</li> <li>X86_64.RBX = i386.EBX</li> <li>X86_64.RCX = i386.ECX</li> <li>X86_64.RDX = i386.EDX</li> <li>X86_64.RSI = i386.RSI</li> <li>X86_64.RDI = i386.EDI</li> </ul> However, the map is still confusing to me. Can you help us scout out how to get to our next location?<br/> <textarea cols="80" rows="10" disabled="true">xor rsi, rdi lea rcx, [rbx+2*rax-2074] rorx rdi, rax, 11 xor rdx, rax and rdi, 0x1f sarx rdx, rbx, rdi test rsi, rax setz bl sar rax, 4 ror rax, 7 dec rsi and rsi, 0x1f shlx rdx, rbx, rsi or rbx, rax and rcx, 0x1f1f bextr rdi, rbx, rcx and rax, 0x1f shrx rdx, rdi, rax shl rcx, 4 test rdi, rcx setne al lea rax, [rdi+4*rsi+3292] and rcx, 0x1f sarx rdx, rax, rcx popcnt rcx, rsi test rax, rdx cmovne rcx, rax bswap rax sar rdx, 2 inc rax and rcx, 0x1f1f bextr rdx, rdi, rcx cmp rax, rsi jnz label_iabbhypsko mov rdi, rsi label_iabbhypsko: and rsi, 0x1f shlx rax, rcx, rsi sub rdx, rbx lea rcx, [rdi+2*rax-1854] test rdi, rbx cmovz rcx, rbx ror rdi, 3 test rdx, rdi cmovne rcx, rdx lea rsi, [rdx+1863] lea rdi, [rbx+4*rcx+1648] shl rbx, 11 shl rdi, 10 test rdx, rdi jnz label_xnleuwvlyx mov rcx, rdi label_xnleuwvlyx: shl rdi, 11 xor rax, rcx lea rdx, [rax+1234] lea rbx, [rax+3561] sal rsi, 6 andn rcx, rsi, rdx test rbx, rcx cmovne rdi, rbx and rax, 0x1f sarx rcx, rbx, rax and rdx, 0x1f shlx rsi, rdi, rdx mul rsi and rdx, 0x1f1f bextr rax, rbx, rdx inc rax sar rax, 8 xor rax, rcx and rcx, 0x1f sarx rdi, rsi, rcx </textarea> </div> <br/> <div> <h2>AARCH64 Forest</h2> After making it out of the x86_64 caves, we'll have to make our way through the treacherous AARCH64 forest. We'll need to trade our spelunking gear for some hiking equipment, using this guide: <ul> <li>AARCH64.X1 = X86_64.RAX</li> <li>AARCH64.X2 = X86_64.RBX</li> <li>AARCH64.X3 = X86_64.RCX</li> <li>AARCH64.X4 = X86_64.RDX</li> <li>AARCH64.X5 = X86_64.RSI</li> <li>AARCH64.X6 = X86_64.RDI</li> </ul> The map for the AARCH64 forest isn't exactly easy to read, but with luck we'll make it through.<br/> <textarea cols="80" rows="10" disabled="true">msub x2, x2, x3, x5 ubfx x2, x3, 10, 7 sub x2, x6, x4, LSR #7 sub x2, x3, x4, ASR #3 add x2, x4, x1, ASR #12 bfi x4, x2, 1, 16 add x6, x4, x2, LSL #8 sub x6, x1, x2, LSL #6 add x4, x3, x1, LSL #11 clz x3, x6 rev x5, x6 sub x2, x5, x4, LSL #15 eon x3, x1, x6 cbnz x2, label_tfuqxxauwf mov x4, x6 label_tfuqxxauwf: sub x2, x5, x6, LSL #16 clz x6, x5 add x1, x2, x6, LSR #13 mul x5, x1, x4 msub x1, x1, x2, x6 ubfx x1, x6, 15, 10 mneg x5, x6, x1 sub x4, x1, x2 sub x3, x1, x2, LSL #13 mneg x3, x1, x6 eon x6, x1, x2, LSR 15 sub x1, x5, x4, ASR #15 add x6, x3, x2 clz x1, x2 mov x2, x4, ROR #6 bfi x2, x4, 3, 2 madd x1, x2, x4, x1 orr x3, x5, x2 add x2, x3, x1, ASR #2 neg x1, x3 orr x2, x1, x4 msub x3, x3, x1, x5 eon x5, x4, x6, ASR 14 mov x5, x4, LSR #14 cls x4, x2 rbit x5, x1 mneg x6, x1, x2 cls x2, x1 mov x6, x3, ROR #10 rbit x3, x2 eon x1, x6, x3 madd x2, x6, x5, x2 </textarea> </div> <br/> <div> <h2>MIPS Mountain</h2> Next, we'll stop by MIPS mountain and see if we can scale its peaks. Once again, we'll need to convert our remaining supplies: <ul> <li>MIPS.S1 = AARCH64.X1 & 0xffffffff</li> <li>MIPS.S2 = AARCH64.X2 & 0xffffffff</li> <li>MIPS.S3 = AARCH64.X3 & 0xffffffff</li> <li>MIPS.S4 = AARCH64.X4 & 0xffffffff</li> <li>MIPS.S5 = AARCH64.X5 & 0xffffffff</li> <li>MIPS.S6 = AARCH64.X6 & 0xffffffff</li> </ul> I don't think I'll ever figure these maps out.<br/> <textarea cols="80" rows="10" disabled="true">beq s3, s4, label_rhmsacvjgb move s4, s5 label_rhmsacvjgb: sll s4, s3, 6 beqz s5, label_pvvtecjlyb move s3, s4 label_pvvtecjlyb: sra s3, s4, 9 xori s3, s5, 642 nor s1, s2 and s4, s5 srl s2, s4, 14 andi s2, s3, 2728 nor s4, s6 sltu s2, s1, s3 mult s6, s1 mflo s4 mfhi s1 sltu s1, s3, s2 beqz s4, label_ewplgbepmf move s5, s2 label_ewplgbepmf: sra s6, s2, 3 srl s6, s1, 6 bne s2, s1, label_wpdbcphkav move s1, s6 label_wpdbcphkav: addu s2, s3 mult s1, s6 mflo s1 mfhi s3 bne s6, 2526, label_eykkyuibne move s5, s4 label_eykkyuibne: and s6, s3 mult s1, s3 mflo s1 mfhi s5 </textarea> </div> <br/> <div> <h2>PowerPC Peninsula</h2> We're almost there. Our final task is to cross the PowerPC peninsula. Thankfully our mountaineering gear can be repurposed for crossing the peninsula. <ul> <li>PowerPC.R1 = MIPS.S1</li> <li>PowerPC.R2 = MIPS.S2</li> <li>PowerPC.R3 = MIPS.S3</li> <li>PowerPC.R4 = MIPS.S4</li> <li>PowerPC.R5 = MIPS.S5</li> <li>PowerPC.R6 = MIPS.S6</li> </ul> See if you can interpret the map and help us reach the treasure.<br/> <textarea cols="80" rows="10" disabled="true">xor r1, r5, r2 or r2, r1, r6 orc r5, r6, r2 andc r2, r1, r6 cmpwi 7, r6, 2679 bne 7, label_juuectiolu mr r1, r2 label_juuectiolu: nor r5, r2, r1 addis r1, r4, 821 mulli r5, r6, 2337 rlwnm r4, r6, r1, 14, 11 cntlzw r1, r5 rlwnm r5, r2, r6, 15, 3 rlwimi r6, r3, 13, 3, 1 cmpwi 7, r4, 975 bne 7, label_eaocdljhcl mr r6, r1 label_eaocdljhcl: andc r6, r3, r5 andc r3, r4, r6 or r5, r1, r3 cmpw 7, r6, r4 beq 7, label_wcaboevbqt mr r4, r2 label_wcaboevbqt: or r5, r1, r3 xor r4, r1, r5 add r3, r6, r2 rlwimi r2, r5, 16, 16, 10 xor r2, r1, r3 cmpwi 7, r6, 695 beq 7, label_pvpgobidcm mr r3, r5 label_pvpgobidcm: nand r2, r4, r6 and r2, r4, r5 cmpw 7, r1, r5 beq 7, label_pgwfipkbae mr r5, r3 label_pgwfipkbae: add r5, r6, r1 orc r2, r5, r1 rlwnm r6, r1, r2, 7, 11 </textarea> </div> <br/> <div> </div> Once you've reached your destination, <a href="/voyage?id=7">let us know what you find.</a> <br/> </div> </div> </body> </html>