Sí, esta es la tarea, y no, yo no estoy pidiendo a usted para hacer mi tarea. Necesito ayuda con la fase 3 de este binario de la bomba. Yo no tuve ningún problema con las fases 1 y 2, pero la fase 3 es simplemente demasiado para mí. Entiendo que no debe ser de 3 entradas. Estoy bastante seguro de que uno de ellos es un personaje de entrada y dos de ellos son enteros, pero no estoy seguro de en qué orden.
En primer lugar, aquí está el código desensamblado:

0x0000000000401163 <phase_3+0>: sub    $0x18,%rsp
0x0000000000401167 <phase_3+4>: lea    0xf(%rsp),%rcx
0x000000000040116c <phase_3+9>: lea    0x14(%rsp),%rdx
0x0000000000401171 <phase_3+14>:        lea    0x10(%rsp),%r8
0x0000000000401176 <phase_3+19>:        mov    $0x402650,%esi
0x000000000040117b <phase_3+24>:        mov    $0x0,%eax
0x0000000000401180 <phase_3+29>:        callq  0x400b80 <[email protected]>
0x0000000000401185 <phase_3+34>:        cmp    $0x2,%eax
0x0000000000401188 <phase_3+37>:        jg     0x40118f <phase_3+44>
0x000000000040118a <phase_3+39>:        callq  0x4014b1 <explode_bomb>
0x000000000040118f <phase_3+44>:        cmpl   $0x7,0x14(%rsp)
0x0000000000401194 <phase_3+49>:        ja     0x401294 <phase_3+305>
0x000000000040119a <phase_3+55>:        mov    0x14(%rsp),%eax
0x000000000040119e <phase_3+59>:        xchg   %ax,%ax
0x00000000004011a0 <phase_3+61>:        jmpq   *0x402660(,%rax,8)
0x00000000004011a7 <phase_3+68>:        cmpl   $0x2c4,0x10(%rsp)
0x00000000004011af <phase_3+76>:        nop
0x00000000004011b0 <phase_3+77>:        je     0x4012a2 <phase_3+319>
0x00000000004011b6 <phase_3+83>:        callq  0x4014b1 <explode_bomb>
0x00000000004011bb <phase_3+88>:        mov    $0x7a,%eax
0x00000000004011c0 <phase_3+93>:        jmpq   0x4012a7 <phase_3+324>
0x00000000004011c5 <phase_3+98>:        mov    $0x6a,%eax
---Type <return> to continue, or q <return> to quit---
0x00000000004011ca <phase_3+103>:       cmpl   $0x327,0x10(%rsp)
0x00000000004011d2 <phase_3+111>:       je     0x4012a7 <phase_3+324>
0x00000000004011d8 <phase_3+117>:       callq  0x4014b1 <explode_bomb>
0x00000000004011dd <phase_3+122>:       mov    $0x6a,%eax
0x00000000004011e2 <phase_3+127>:       jmpq   0x4012a7 <phase_3+324>
0x00000000004011e7 <phase_3+132>:       mov    $0x66,%eax
0x00000000004011ec <phase_3+137>:       cmpl   $0x136,0x10(%rsp)
0x00000000004011f4 <phase_3+145>:       je     0x4012a7 <phase_3+324>
0x00000000004011fa <phase_3+151>:       callq  0x4014b1 <explode_bomb>
0x00000000004011ff <phase_3+156>:       mov    $0x66,%eax
0x0000000000401204 <phase_3+161>:       jmpq   0x4012a7 <phase_3+324>
0x0000000000401209 <phase_3+166>:       mov    $0x75,%eax
0x000000000040120e <phase_3+171>:       cmpl   $0x252,0x10(%rsp)
0x0000000000401216 <phase_3+179>:       je     0x4012a7 <phase_3+324>
0x000000000040121c <phase_3+185>:       callq  0x4014b1 <explode_bomb>
0x0000000000401221 <phase_3+190>:       mov    $0x75,%eax
0x0000000000401226 <phase_3+195>:       jmpq   0x4012a7 <phase_3+324>
0x000000000040122b <phase_3+200>:       mov    $0x70,%eax
0x0000000000401230 <phase_3+205>:       cmpl   $0x240,0x10(%rsp)
0x0000000000401238 <phase_3+213>:       je     0x4012a7 <phase_3+324>
0x000000000040123a <phase_3+215>:       callq  0x4014b1 <explode_bomb>
0x000000000040123f <phase_3+220>:       mov    $0x70,%eax
0x0000000000401244 <phase_3+225>:       jmp    0x4012a7 <phase_3+324>
---Type <return> to continue, or q <return> to quit---
0x0000000000401246 <phase_3+227>:       cmpl   $0x269,0x10(%rsp)
0x000000000040124e <phase_3+235>:       xchg   %ax,%ax
0x0000000000401250 <phase_3+237>:       je     0x4012a2 <phase_3+319>
0x0000000000401252 <phase_3+239>:       callq  0x4014b1 <explode_bomb>
0x0000000000401257 <phase_3+244>:       mov    $0x7a,%eax
0x000000000040125c <phase_3+249>:       jmp    0x4012a7 <phase_3+324>
0x000000000040125e <phase_3+251>:       mov    $0x6b,%eax
0x0000000000401263 <phase_3+256>:       cmpl   $0x201,0x10(%rsp)
0x000000000040126b <phase_3+264>:       je     0x4012a7 <phase_3+324>
0x000000000040126d <phase_3+266>:       callq  0x4014b1 <explode_bomb>
0x0000000000401272 <phase_3+271>:       mov    $0x6b,%eax
0x0000000000401277 <phase_3+276>:       jmp    0x4012a7 <phase_3+324>
0x0000000000401279 <phase_3+278>:       mov    $0x74,%eax
0x000000000040127e <phase_3+283>:       cmpl   $0x358,0x10(%rsp)
0x0000000000401286 <phase_3+291>:       je     0x4012a7 <phase_3+324>
0x0000000000401288 <phase_3+293>:       callq  0x4014b1 <explode_bomb>
0x000000000040128d <phase_3+298>:       mov    $0x74,%eax
0x0000000000401292 <phase_3+303>:       jmp    0x4012a7 <phase_3+324>
0x0000000000401294 <phase_3+305>:       callq  0x4014b1 <explode_bomb>
0x0000000000401299 <phase_3+310>:       mov    $0x75,%eax
0x000000000040129e <phase_3+315>:       xchg   %ax,%ax
0x00000000004012a0 <phase_3+317>:       jmp    0x4012a7 <phase_3+324>
0x00000000004012a2 <phase_3+319>:       mov    $0x7a,%eax
---Type <return> to continue, or q <return> to quit---
0x00000000004012a7 <phase_3+324>:       cmp    0xf(%rsp),%al
0x00000000004012ab <phase_3+328>:       je     0x4012b2 <phase_3+335>
0x00000000004012ad <phase_3+330>:       callq  0x4014b1 <explode_bomb>
0x00000000004012b2 <phase_3+335>:       add    $0x18,%rsp
0x00000000004012b6 <phase_3+339>:       retq

Me ingresado algo así como 4 112 z, sólo para probar y ejecutar a través de los pasos.

El código se ejecuta hasta 0x0000000000401230 <phase_3+205>: cmpl $0x240,0x10(%rsp)

De lo que realmente estoy confundido acerca de que es lo que 0x10(%der) indica. Miré el valor decimal almacenados en el rsp y en los negativos.
Parece que la primera entrada de 4 salió bien, y el código seguía corriendo, pero me pregunto por qué es la comparación de rsp 576, y lo que el 0x10 en frente de ella indica.
Cualquier tipo de conocimiento sería de gran ayuda.

  • No es la comparación de rsp con 576, es comparar el valor de 32 bits almacenados en (rsp + 0x10) con 576.
InformationsquelleAutor Man Person | 2013-09-23

2 Comentarios

  1. 3

    No es la comparación de %rsp a 0x240. Más bien, es la comparación de lo que se almacena en la ubicación de memoria %rsp + 0x10 a 0x240, en otras palabras, es comparar una constante a lo que se llama una «variable local» en la mayoría de los idiomas.

  2. 2

    Una nota acerca de scanf… la cadena de entrada es generalmente en algún lugar en la memoria (por ejemplo, «%d %d %c %s»)… Recuerdo que los argumentos se inserta en la pila antes de llamar a una función. Si ves a una dirección de memoria colocada en algún lugar en la pila, utilice el x /s 0x…. comando para ver qué hay allí. En mi bomba fue la instrucción «mov 0x804a27d, 0x4(%esp)» yo solía x /s 0x804a27d para ver la cadena de entrada. Esto revela no sólo el orden, sino también los tipos de datos de la respuesta.

Dejar respuesta

Please enter your comment!
Please enter your name here