Reverseamos un hola mundo.

#include <stdio.h>

int main(){
	printf("Hola Mundo\n");
	return 0;
}

Aquí vemos que el compilador modifico nuestro main haciéndolo una función de tres argumentos que no son nuestros, sino del compilador, y tiene una variable. var_4 que creo el compilador la cual si hacemos las cuentas devolverá siempre 10 y la utilizara el compilador al cerrar el programa, por supuesto nada de esto es código propio, vayamos a nuestro código, propiamente dicho.

.text:004012BA mov dword ptr [esp], offset aHola ; “hola” .text:004012C1 call printf

Allí vemos que pone en el stack un puntero a la string hola que esta en la sección rdata, si hacemos click en aHola, nos muestra que esta exactamente en 403000 y que es el argumento de la funcion printf.

Dirección de memoria del hola

Si vamos a DEBUGGER y elegimos por ejemplo el debugger local de win32

Seleccionar debugger

y ponemos breakpoint alli.

breakpoint