Hemos compilado un programa usando la libreria RayLib.

El programa despliega un textbox como el siguiente.

Nuestra labor es: usando gdb identificar la dirección en memoria donde se está guardando el texto que introduzcamos al textbox.

Para ello abrimos gdb y primero debemos lograr detener el programa luego de hagamos input al textbox.

gdb-peda$ b main

gdb-peda$ r

.. corre el programa pero aun no veremos la ventana dibujada, dado que lo hemos detenido justo al comienzo de main. Debemos identificar algun punto en el programa tal que no haga se detenga en cada vuelta del "game loop".

   0x00000000004013c5 <+613>:   call   0x4010f0 <IsKeyPressed@plt>
   0x00000000004013ca <+618>:   test   al,al
   0x00000000004013cc <+620>:   je     0x4013e1 <main+641>
   0x00000000004013ce <+622>:   mov    eax,0x0
   0x00000000004013d3 <+627>:   sub    ebx,0x1
   0x00000000004013d6 <+630>:   cmovs  ebx,eax

La función IsKeyPressed aparenta tener algo que ver con la entrada de texto a través del keyboard. Pondremos breakpoints en ambas rutas despues de esa función: 0x4013e1 y 0x4013ce.

gdb-peda$ b 0x4013e1
gdb-peda$ b 0x4013ce

Al continuar el programa nos damos cuenta que el breakpoint 0x4013e1 se detiene en cada vuelta. Así que lo borramos usando del _num de break_

Ahora al dar continue el programa no se detiene. Si insertamos texto en el textbox y luego damos backspace el programa se detiene en 0x4013ce. Ahora podemos buscar el string usando:

gdb-peda$ find perro stack
Searching for 'perro' in: stack ranges
Found 1 results, display max 1 items:
[stack] : 0x7ffcf455acee --> 0x6f72726570 ('perro')

donde perro fue el string que entramos en el textbox.

Una vez hemos identificado la dirección donde vive, podríamos crear una hardware breakpoint para que cada vez que se escriba a esa dirección se detenga el programa:

gdb-peda$  
gdb-peda$ watch *0x7ffcf455acee

Si damos continue entonces