Por empezar, el tamaño de un ejecutable no puede ser de 100KB porque tiene que ser múltiplo de 8.
Las secciones están alineadas en memoria en un offset que también es múltiplo de 8, y eso es por una cuestión de la arquitectura del microprocesador.
Cuando el loader del sistema operativo carga el ejecutable en memoria crea el thread principal y comienza a ejecutar el código del punto de entrada. El punto de entrada está especificado en el registro AddressOfEntryPoint de la cabecera opcional PE. Ese offset es relativo al inicio del archivo y está dentro de la sección de código (Sección .text)
Todas las secciones están descriptas en las cabeceras de sección, que están justo después de la cabecera opcional PE. Cada cabecera de sección ocupa 42 bytes de datos (no estoy seguro porque no tengo la documentación a mano, pero creo que era eso). Los primeros 8 bytes son el nombre de la sección, que es una cadena terminada en nulo por lo que puede tener un nombre de 7 bytes como máximo, incluyendo el "." (.text, .data)
En las cabeceras de sección están los datos de dicha sección, como el offset relativo al inicio del archivo (RVA o Relative Virtual Address), tamaño, tamaño de los datos crudos, etc. Los datos crudos (raw data) son los datos de la sección en cuestión, excluyendo las tablas que se encuentran en el inicio de la sección.
Si le agrego datos a un archivo queda "inutilizable" porque se desplazan los datos más bytes hacia adelante, por consiguiente cuando el programa busque determinados datos en una posición no los encontrará. En el caso que sea código el programa va a ejecutar instrucciones no válidas y se cerrará.
El código del programa está en la sección .text, que generalmente es la primera y está en el offset 4096 decimal, pero eso depende del linker. Dentro de la sección de código está el punto de entrada, como lo dije anteriormente.
Las variables y datos no inicializados están en la seccíón .data. Para modificar el "Hola mundo" hay que buscar la tabla de cadenas, porque si por ejemplo yo escribo el siguiente código:
Sub Main()
Call MsgBox("Hola mundo")
End Sub
Cuando se compila pone "Hola mundo" en una parte del archivo y en la llamada a MsgBox reemplaza la cadena por la dirección de "Hola mundo".
Ahora tengo poco tiempo y ando sin inet, cuando puedo extiendo un poco más este tema que es muy interesante, pero lo mejor es investigar con un editor hexadecimal (recomiendo mucho el WinHex) y un debugger (OllyDbg).
Leete los siguientes documentos que postee hace un tiempo en el foro de Programación general, pueden ayudarte mucho a entender cómo trata Windows a los procesos y la memoria.
Administrador de memoria de Win32Procesos y Subprocesos en WindowsSaludos.