Requisitos de software
Los ejercicios de la primera parte del curso serán mayormente sobre binarios de linux. Para tener resultados uniformes, vamos a instalar todosla misma versión de una máquina virtual Lubuntu 22.04 que se encuentra a través de https://www.linuxvmimages.com/images/lubuntu-2204/. Una vez instalada, el username/password es: lubuntu/lubuntu.
Instala Virtual Box
Para correr la máquina virtual debes tener instalado Virtual Box en tu computadora. Sigue las instrucciones en https://www.virtualbox.org/wiki/Downloads.
Descarga e instala el VM
El link directo es https://www.linuxvmimages.com/images/lubuntu-2204/
Descomprime el archivo que descargó. Debe crear un directorio llamado Lubuntu_22.04_VB
que dentro debe tener un archivo con extensión .vdi.
En VirtualBox. Crea un nuevo VM, dale un nombre que refleje el nombre y versión del VM (algo así como Lubuntu22.04). Luego debes especificar que el disco duro que usará el VM es el archivo vdi (Lubuntu_22.04_VB_LinuxVMImages.COM.vdi) que descomprimiste anteriormente.
Corre el VM. La pantalla se ve minuscula pero lo vamos a arreglar pronto. Logueate usando el password lubuntu
y abre un terminal (System Tools -> QTerminal). Alli escribe:
sudo apt update
Seguido de..
sudo apt upgrade -y
Este paso tomará varios minutos en completarse. Además de actualizar las programas del VM, correrá los llamados "Guest Additions" de Virtual Box y logrará que cuando de restart la pantalla se pueda ver en dimensiones adecuadas. Da el siguiente comando para "restart" el VM.
sudo shutdown -r now
Si el display del VM todavía se ve minúsculo, ve a los Settings de Display del VM en Virtual Box y ajusta su Scale Factor a 200%.
Instalar programas adicionales
Ejecuta los siguientes comandos para que instales algunos de los programas relacionados a compilación y debugging.
sudo apt update
sudo apt install gcc dbg git wget curl bless ascii gcc-multilib readelf
Ejecuta los siguientes comandos para que instales sublime text y/o visual studio code.
sudo snap install sublime-text --classic
sudo snap install code --classic
Una vez instalados puedes correr subl
desde el terminal para correr sublime o code
para correr Visual Studio Code.
Instalar funcionalidades adicionales para el debugger
Hoy día, usar gdb en su estado vainilla es considerado un deporte extremo solo apto para masoquistas de verdad. Como tendremos muchas otras cosas en que rompernos la cabeza durante el semestre, vamos a instalar gdb-peda un ambiente para gdb que facilitar un poco su uso.
git clone https://github.com/longld/peda.git ~/peda
echo "source ~/peda/peda.py" >> ~/.gdbinit
Prueba las herramientas
-
Abre el editor de código de tu preferencia, copia el siguiente programa y guardalo como hw.c.
#include <stdio.h> int main() { printf("Hola 4702!\n"); return 0; }
-
Desde el terminal, compílalo usando
gcc -o hw hw.c -m32
-
Ejecútalo usando:
./hw
-
Abre el ejecutable usando gdb con el siguiente comando:
gdb hw
-
En gdb da el comando
b main
seguido der
.. Debes ver una pantalla como la siguiente:EFLAGS: 0x282 (carry parity adjust zero SIGN trap INTERRUPT direction overflow) [-------------------------------------code-------------------------------------] 0x565561a8 <main+11>: mov ebp,esp 0x565561aa <main+13>: push ebx 0x565561ab <main+14>: push ecx => 0x565561ac <main+15>: call 0x565561d9 <__x86.get_pc_thunk.ax> 0x565561b1 <main+20>: add eax,0x2e27 0x565561b6 <main+25>: sub esp,0xc 0x565561b9 <main+28>: lea edx,[eax-0x1fd0] 0x565561bf <main+34>: push edx Guessed arguments: arg[0]: 0xffffd120 --> 0x1 arg[1]: 0xf7fa1000 --> 0x225dac arg[2]: 0xf7ffd020 --> 0xf7ffda40 --> 0x56555000 --> 0x464c457f arg[3]: 0xf7d9c519 (add esp,0x10) [------------------------------------stack-------------------------------------] 0000| 0xffffd100 --> 0xffffd120 --> 0x1 0004| 0xffffd104 --> 0xf7fa1000 --> 0x225dac 0008| 0xffffd108 --> 0xf7ffd020 --> 0xf7ffda40 --> 0x56555000 --> 0x464c457f 0012| 0xffffd10c --> 0xf7d9c519 (add esp,0x10) 0016| 0xffffd110 --> 0xffffd3ae ("/tmp/hw") 0020| 0xffffd114 --> 0x70 ('p') 0024| 0xffffd118 --> 0xf7ffd000 --> 0x36f2c 0028| 0xffffd11c --> 0xf7d9c519 (add esp,0x10) [------------------------------------------------------------------------------] Legend: code, data, rodata, value Breakpoint 1, 0x565561ac in main ()
-
Sal de gdb dando
exit
-
Probaremos el resto de los programas según los vayamos necesitando.