Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

210
Views
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
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!