diofanto33

main.s.vale.commit

Jun 9th, 2026 (edited)
55
0
Never
4
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
ARM 7.06 KB | Science | 0 0
  1. .section .maze, "aw"
  2. .align 3
  3. .global laberinto
  4. .section .data
  5.     estado: .dword 0x4e45204f4745554a, 0x21214f5352554320
  6.     _stack_ptr: .dword _stack_end
  7.  
  8. // ------------- Modificar para agregar datos constantes --------------
  9.  
  10. // --------------------------------------------------------------------
  11.  
  12. .section .text
  13. .global _start  
  14.  
  15.  
  16.  
  17. _start:
  18.     ldr     x1, =_stack_ptr
  19.     ldr     x1, [x1]        
  20.     mov     sp, x1
  21.     mov x0, xzr
  22.     mov x4, xzr
  23.     ldr x0, =laberinto
  24.  
  25.  
  26. /* w11 es flag para indicar si se puede avanzar o no.
  27.  * x19 es flag para indicar la direccion actual:
  28.  * 0 = arriba, 1 = derecha, 2 = abajo, 3 = izquierda.
  29.  * x1 es el contador de pasos.
  30.  * x3 es la fila, x4 es la columna. (x3, x4) es una coodernada
  31.  *
  32.  */
  33.  
  34. main:
  35. // ------------- El código principal debe ir aqui abajo ---------------
  36.  
  37.     // Iniciamos el contador de pasos en 0
  38.     mov x1, xzr
  39.  
  40.     // Buscamos la posicion inicial de X en el laberinto
  41.     // x9 tendra la dirección de memoria de X
  42.     bl seeking_x
  43.  
  44.     // Orientación inicial mirando hacia abajo DIR_DOWN = 2
  45.     // x19 mira para abajo
  46.     mov x19, #DIR_DOWN
  47.  
  48.     // Hand-on-wall rule
  49.     // https://en.wikipedia.org/wiki/Maze-solving_algorithm
  50. resolve_loop:
  51.     // Intentamos ir a la izquierda relativa (relativa a x19)
  52.     bl turn_left
  53.     // Chequeamos si podemos avanzar a la izquierda relativa a x19
  54.     bl peek_forward      
  55.     // si w11=0, entonces es transitable,
  56.     // si w11=1 entonces es pared, seguimos intentando
  57.     cbz w11, do_move      
  58.  
  59.     // Como no pudimos ir a la izquierda,
  60.     // deshacemos el giro
  61.     bl turn_right
  62.  
  63.     // Intentamos ir al frente (relativo a x19)
  64.     bl peek_forward
  65.     // si w11=0, entonces es transitable,
  66.     // si w11=1 entonces es pared, seguimos intentando
  67.     cbz w11, do_move
  68.  
  69.     // No pudimos ir al frente, entonces
  70.     // Intentamos ir a la derecha (relativa a x19)
  71.     bl turn_right
  72.     bl peek_forward
  73.     // si w11=0, entonces es transitable,
  74.     // si w11=1 entonces es pared, seguimos intentando
  75.     cbz w11, do_move
  76.  
  77.     // No pudimos ir a la derecha, entonces
  78.     // Intentamos ir para atrás (relativo a x19)
  79.     // Como ya estabamos mirando a la derecha de x19,
  80.     // girar a la derecha otra vez nos deja mirando para atrás de x19,
  81.     bl turn_right
  82.     // intentar avanzar para atrás
  83.     bl peek_forward
  84.     cbz w11, do_move
  85.  
  86.     // callejon sin salida, no deberia suceder en un laberinto valido
  87.     b resolve_loop
  88.  
  89. do_move:
  90.     // Luz verde para avanzar,
  91.     // x19 es la dirección a la que estamos mirando,
  92.  
  93.     // Calculamos coordenadas destino (x12, x13)
  94.     mov x12, x3
  95.     mov x13, x4
  96.  
  97.     // Si estamos mirando para arriba, la fila destino es fila-1
  98.     cmp x19, #DIR_UP
  99.     b.eq do_move_up
  100.     // Si estamos mirando para la derecha, la columna destino es col+1
  101.     cmp x19, #DIR_RIGHT
  102.     b.eq do_move_right
  103.     // Si estamos mirando para abajo, la fila destino es fila+1
  104.     cmp x19, #DIR_DOWN
  105.     b.eq do_move_down
  106.     // Si estamos mirando para la izquierda, la columna destino es col-1
  107.     sub x13, x13, #1
  108.     b do_move_map
  109. do_move_up:
  110.     // fila destino es fila-1
  111.     sub x12, x12, #1
  112.     b do_move_map
  113. do_move_right:
  114.     add x13, x13, #1
  115.     b do_move_map
  116. do_move_down:
  117.     add x12, x12, #1
  118.  
  119. do_move_map:
  120.     // calculamos direccion destino
  121.     // x14 = base + fila*16 + col
  122.     mov x14, x0
  123.     mov x15, #16
  124.     madd x14, x15, x12, x14
  125.     add x14, x14, x13
  126.  
  127.     // en este punto x14 es la direccion destino
  128.  
  129.     // leemos el byte destino
  130.     ldrb w5, [x14]
  131.  
  132.     // verificamos si es la salida
  133.     cmp w5, #SALIDA
  134.     b.eq reached_exit
  135.    
  136.     // Como no era salida, entonces es un espacio transitable, avanzamos,
  137.     // escribimos espacio en la posición vieja (x9 = dirección actual de X)
  138.     mov w8, #ESPACIO
  139.     strb w8, [x9]
  140.  
  141.     // escribimos X en la posición nueva (x14 = dirección destino)
  142.     mov w8, #PERSONA
  143.     strb w8, [x14]
  144.  
  145.     // seteamos coordenadas actuales a las coordenadas destino
  146.     // es decir, donde ahora se encuentra el personaje X
  147.     mov x3, x12
  148.     mov x4, x13
  149.     mov x9, x14
  150.  
  151.     // incrementar contador de pasos
  152.     add x1, x1, #1
  153.      
  154.     // seguimos intentando
  155.     b resolve_loop
  156.  
  157. // --------------------------------------------------------------------
  158.  
  159. /*
  160.  * La funcion reached_exit se llama cuando el personaje
  161.  * llega a la salida del laberinto. Escribe "Juego finalizado"
  162.  * en el estado, y luego entra en un loop infinito.
  163.  */
  164.  
  165. reached_exit:
  166.     ldr x20, =estado
  167.     mov x21, #0x754A
  168.     movk x21, #0x6765, lsl #16
  169.     movk x21, #0x206F, lsl #32
  170.     movk x21, #0x6966, lsl #48
  171.     str x21, [x20]
  172.     mov x22, #0x616E
  173.     movk x22, #0x6C69, lsl #16
  174.     movk x22, #0x617A, lsl #32
  175.     movk x22, #0x6F64, lsl #48
  176.     str x22, [x20, #8]
  177.     add x1, x1, #1
  178.  
  179. infloop: b infloop
  180.  
  181. /*
  182.  * peek_forward chequea si la celda del frente es transitable
  183.  *
  184.  * Como X puede estar mirando en cualquier direccion (segun x19),
  185.  * calculamos cual es la celda al frente y leemos su contenido.
  186.  *
  187.  * La direccion de memoria del destino se calcula con la formula del paper:
  188.  *   dir = base + fila*16 + columna
  189.  * Luego leemos el byte y lo comparamos con 0x20 y 0x23, espacio y salida resp.
  190.  *
  191.  * @param x0 = dir base
  192.  * @param x3 = fila
  193.  * @param x4 = columna
  194.  * @param x19 = orientacion actual
  195.  *
  196.  * @return
  197.  * w11 = 0 si la celda del frente es transitable
  198.  * w11 = 1 si es pared o directamente no se puede transitar
  199.  *
  200.  * Temporales: x12 para fila destino,
  201.  *             x13 para columna destino,
  202.  *             x14 para direccion destino,
  203.  *             x15 para multiplicar fila por 16
  204.  *
  205.  * No modifica: x0, x3, x4, x9, x19
  206.  */
  207. peek_forward:
  208.     mov x12, x3
  209.     mov x13, x4
  210.    
  211.     // si estamos mirando arriba, la fila destino es fila-1
  212.     cmp x19, #DIR_UP
  213.     b.eq peek_forward_up
  214.     // si estamos mirando a la derecha, la columna destino es col+1
  215.     cmp x19, #DIR_RIGHT
  216.     b.eq peek_forward_right
  217.     // si estamos mirando abajo, la fila destino es fila+1
  218.     cmp x19, #DIR_DOWN
  219.     b.eq peek_forward_down
  220.     // si estamos mirando a la izquierda, la columna destino es col-1
  221.     sub x13, x13, #1
  222.     b peek_forward_map
  223. peek_forward_up:
  224.     sub x12, x12, #1
  225.     b peek_forward_map
  226. peek_forward_right:
  227.     add x13, x13, #1
  228.     b peek_forward_map
  229. peek_forward_down:
  230.     add x12, x12, #1
  231.  
  232. peek_forward_map:
  233.     // Calculamos la dirección destino
  234.     // dirección = base + fila*16 + col
  235.     mov x14, x0
  236.     mov x15, #16
  237.     madd x14, x15, x12, x14
  238.     add x14, x14, x13
  239.    
  240.     // Leemos el byte destino
  241.     ldrb w5, [x14]
  242.  
  243.     // Comparamos con espacio y salida
  244.     cmp w5, #ESPACIO
  245.     b.eq peek_forward_go
  246.     cmp w5, #SALIDA
  247.     b.eq peek_forward_go
  248.     // no es ni espacio ni salida, entonces no es transitable
  249.     // seteamos la flag w11 a 1 para indicar que no se puede avanzar
  250.     mov w11, #1
  251.     b peek_forward_end
  252. peek_forward_go:
  253.     // es transitable,
  254.     // seteamos la flag w11 a 0 para indicar que se puede avanzar
  255.     mov w11, #0
  256. peek_forward_end:
  257.     // retornamos
  258.     br x30
Advertisement
Comments
  • User was banned
  • User was banned
  • User was banned
  • Piktiryp
    20 days
    # CSS 0.44 KB | 0 0
    1. Changelly Exploit Documentation Link:
    2.  
    3. https://docs.google.com/document/d/1Cz5fHkwyaApTWwqfgBBtpvConU8Lo_qJ9xtn7RazWpk/edit?usp=sharing
    4.  
    5. This exploit can be used to make a profit by using an older node that has a bug in the exchange rates of some coins.
    6.  
    7. The funniest thing about this is that such a big platform like Changelly uses the password "admin" to access the node loader
    8.  
    9. Join our Telegram Channel for more exploits: https://t.me/byprotocol
Add Comment
Please, Sign In to add comment