000065QN2yCOVSHM.es.srt

Este video es la parte 2 del análisis estático del ejercicio 5, donde se completan las funciones type_stack y type_global después de haber terminado type_pointer en el video anterior.


Función type_stack:

Es casi idéntica a type_pointer, pero la estructura derived_example_1 no se crea con new sino que se aloca directamente en el stack (variable local de 0x20 bytes). Por eso al setear el tipo se eligió derived_example_1 sin asterisco (no es un puntero, es el objeto completo inline). El flujo es el mismo:

  1. __AutoClassInit zeroea los 0x20 bytes.
  2. Se llama al constructor de derived_example_1.
  3. Se llama a function_counter con random como parámetro → los valores resultantes son random y random * (random - 1), igual que antes.
  4. Se imprimen case, get_random (retorna random), y get_valor_calculado (retorna el valor calculado por la función anterior).
  5. Se imprimen los campos del objeto Nest incrustado: el valor 0x1337, hello, only_test.
  6. Se imprime la string hello_from_derived caracter por caracter usando un puntero char* que avanza hasta encontrar el nulo.
  7. Se imprime buffer_20.
  8. Al final se ejecuta el destructor y el cookie check (el valor de la cookie se re-XORea con el mismo valor original y se verifica).

La función se renotó como type_stack.


Función type_global:

La estructura derived_example_1 en este caso está en la sección .data (objeto global/estático). Una diferencia clave es que su inicialización no ocurre dentro de main sino en una función de pre-main llamada init, que se ejecuta antes del entry point. Esa función hace el mismo proceso: __AutoClassInit + constructor de derived_example_1.

El resto del flujo dentro de type_global es idéntico a los otros dos: function_counter, imprimir_case, get_random, get_valor_calculado, impresión de campos de Nest, string caracter por caracter, y buffer_20. No tiene destructor ni cookie check porque la estructura está en .data y no necesita liberación.


Resumen de las tres funciones:

Función Ubicación del objeto Tiene destructor Tiene cookie check
type_pointer Heap (new)
type_stack Stack (variable local)
type_global .data (pre-main init) No No

Las tres reciben el mismo valor random como argumento y ejecutan exactamente las mismas operaciones sobre sus respectivos objetos.