Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

212
Vistas
Cómo saber cuáles son los casos válidos y los que faltan en este código de ensamblaje de interruptores

Tengo esta tarea de la escuela y no consigo saber cuáles son los casos válidos y los que faltan para esta declaración de cambio. Quiero decir, sé que el primer caso va a ser 50 y tendré casos del 50 al 55, pero ¿cómo puedo saber qué afirmación corresponde al 50, 51... etc.? No entiendo esto. Gracias de antemano.

Este problema le dará la oportunidad de aplicar ingeniería inversa a una declaración de cambio del código de la máquina. En el siguiente procedimiento, se eliminó el cuerpo de la instrucción switch:

 1 int switch_prob(int x, int n) 2 { 3 int result = x; 4 5 switch(n) { 6 7 /* Fill in code here */ 8 } 9 10 return result; 11 }

La figura 3.44 muestra el código de máquina desensamblado para el procedimiento. Podemos ver en las líneas 4 y 5 que los parámetros x y n se cargan en los registros %eax y %edx , respectivamente.

La tabla de salto reside en un área diferente de la memoria. Podemos ver en el salto indirecto en la línea 9 que la tabla de saltos comienza en la dirección 0x80485d0 . Usando el depurador gdb, podemos examinar las seis palabras de memoria de 4 bytes que componen la tabla de salto con el comando x/6w 0x80485d0 . gdb imprime lo siguiente:

 (gdb) x/6w 0x80485d0 0x80485d0: 0x08048438 0x08048448 0x08048438 0x0804843d 0x80485e0: 0x08048442 0x08048445

Complete el cuerpo de la declaración de cambio con código C que tendrá el mismo comportamiento que el código de máquina.

 1 08048420 <switch_prob>: 2 8048420: 55 push %ebp 3 8048421: 89 e5 mov %esp,%ebp 4 8048423: 8b 45 08 mov 0x8(%ebp),%eax 5 8048426: 8b 55 0c mov 0xc(%ebp),%edx 6 8048429: 83 ea 32 sub $0x32,%edx 7 804842c: 83 fa 05 cmp $0x5,%edx 8 804842f: 77 17 ja 8048448 <switch_prob+0x28> 9 8048431: ff 24 95 d0 85 04 08 jmp *0x80485d0(,%edx,4) 10 8048438: c1 e0 02 shl $0x2,%eax 11 804843b: eb 0e jmp 804844b <switch_prob+0x2b> 12 804843d: c1 f8 02 sar $0x2,%eax 13 8048440: eb 09 jmp 804844b <switch_prob+0x2b> 14 8048442: 8d 04 40 lea (%eax,%eax,2),%eax 15 8048445: 0f af c0 imul %eax,%eax 16 8048448: 83 c0 0a add $0xa,%eax 17 804844b: 5d pop %ebp 18 804844c: c3 ret

Figura 3.44

over 4 years ago · Santiago Trujillo
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda