Destrezas para el mid-term
- 
Conocer las instrucciones escenciales: MOV, PUSH, POP, CALL, LEA, XOR, JZ, JNZ, JMP, TEST, CMP, RET, MOVZB. Poder analizar programas que las contengan. En el exámen les proveeré documentación de esas instrucciones. 
- 
Stack frame: Dado un programa en donde se invocan subrutinas poder ilustrar el estado del stack frame en cualquier punto durante la ejecución. 
- 
En una subrutina que ha sido invocada, saber cuánto espacio de stack reserva, cuáles son las variables locales vs. los argumentos, cuántos argumentos necesita. 
- 
Analizar código en assembly para detectar: - estructuras if-else
- estructuras de repetición (usando jumps y usando REPs)
 
- 
En un código cuyo main recibe argc y argv, entender cómo se accesan esos dos argumentos para tomar decisiones. 
- 
Conocer los siguientes términos (en contexto de esta clase): - export
- import
- name
- rodata
- strip
- text segment
- ELF, PE
- EBP, ESP
 
- 
Dado un programa en C y lo que conoces sobre la organización de un proceso en memoria, poder predicir el resultado del programa. Por ejemplo: 
int main() { 
    int a = 8;
    int *p = malloc(4);
    *p = a;
    printf("%x %x %x", &p, p, *p);
}
¿Cuál de los siguientes outputs sería más correcto?
a. 8 0xff909090 0xff909088
b. 0xff909090 0xff909088 8 
c. 0xff909090 8 0xff909088 
d. ninguna de las anteriores
Ejercicios de práctica:
- https://challenges.re/51/
- https://challenges.re/55/
- https://challenges.re/58/
- https://challenges.re/2/
- https://challenges.re/7/
- Seguiré poniendo otros ejercicios para que practiquen...
0804846b <dos>:
 804846b: push   ebp
 804846c: mov    ebp,esp
 804846e: mov    eax,DWORD PTR [ebp+0x8]
 8048471: imul   eax,DWORD PTR [ebp+0x8]
 8048475: pop    ebp
 8048476: ret    
08048477 <uno>:
 8048477: push   ebp
 8048478: mov    ebp,esp
 804847a: push   DWORD PTR [ebp+0x8]
 804847d: call   804846b <dos>
 8048482: add    esp,0x4
 8048485: mov    edx,eax
 8048487: mov    eax,edx
 8048489: add    eax,eax
 804848b: add    eax,edx
 804848d: leave  
 804848e: ret    
0804848f <main>:
 804848f: lea    ecx,[esp+0x4]
 8048493: and    esp,0xfffffff0
 8048496: push   DWORD PTR [ecx-0x4]
 8048499: push   ebp
 804849a: mov    ebp,esp
 804849c: push   ecx
 804849d: sub    esp,0x14
 80484a0: sub    esp,0x8
 80484a3: lea    eax,[ebp-0x10]
 80484a6: push   eax
 80484a7: push   0x8048570
 80484ac: call   8048350 <__isoc99_scanf@plt>
 80484b1: add    esp,0x10
 80484b4: mov    eax,DWORD PTR [ebp-0x10]
 80484b7: sub    esp,0xc
 80484ba: push   eax
 80484bb: call   8048477 <uno>
 80484c0: add    esp,0x10
 80484c3: mov    DWORD PTR [ebp-0xc],eax
 80484c6: sub    esp,0x8
 80484c9: push   DWORD PTR [ebp-0xc]
 80484cc: push   0x8048573
 80484d1: call   8048330 <printf@plt>
 80484d6: add    esp,0x10
 80484d9: mov    eax,0x0
 80484de: mov    ecx,DWORD PTR [ebp-0x4]
 80484e1: leave  
 80484e2: lea    esp,[ecx-0x4]
 80484e5: ret