Вы находитесь на странице: 1из 7

Apunte sobre Bochs

Programacin de Sistemas Operativos o 1er Cuatrimestre 2011

Indice
1. Introduccin o 1.1. bochs - VM con Debugger . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2. Bochs 2.1. Instalacin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . o 2.2. Menu de bochs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.3. Archivo de conguracin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . o 3. Arranque de la mquina virtual a 4. Debug en bochs 4.1. Referencia breve . . . . . . . . 4.1.1. Next y Step . . . . . . . 4.1.2. Registros de uso general 4.1.3. Memory Dump . . . . . 4.1.4. Memory Disassemble . . 4.1.5. Breakpoints . . . . . . . 4.1.6. Watchs . . . . . . . . . 4.1.7. Infos . . . . . . . . . . . 4.1.8. Registros de Segmento . 4.1.9. Registros de Control . . 1 2 2 2 3 3 4 4 5 5 5 6 6 6 7 7 7 7

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

1.

Introduccin o

El procesador posee intrucciones de lenguaje ensamblador y tablas internas que slo se pueden o ejecutar en nivel privilegio elevado o anillo 0. No es posible acceder a estos mecanismos desde un proceso de usuario comn y corriente, dado que ejecuta en un nivel de privilegio bajo. Entonces, es u necesario ejecutar cdigo en el sistema operativo, para realizar cosas como: o Utilizar instrucciones de nivel privilegiado Acceder a los mecanismos de manejo de memoria Cambiar los modos del procesador Controlar interrupciones Para ejecutar nuestro sistema operativo vamos a usar una Virtual Machine.

1.1.

bochs - VM con Debugger

Un debugger como gdb es un proceso ms del sistema operativo. Por lo tanto, no puede monitorear a el funcionamiento interno del sistema operativo, instruccin por instruccin. Entonces, es necesario o o utilizar un debugger dentro del sistema operativo, pero sin ayuda de ste, dado que ser el objeto de e a anlisis. a Para esto, es necesario un debugger a ms bajo nivel: un debugger en la Virtual Machine. a

Bochs + Debugger

2.
2.1.

Bochs
Instalacin o

Bochs es un simulador de una computadora entera, por lo que nos permite ejecutar instruccin o por instruccin el procesador, incluyendo las instrucciones ejecutadas por el sistema operativo. o Pero su versin ocial no est compilada con esta posibilidad. Para usarla, hay que compilarlo a mano. o a Manos a la obra! 1. bajar de: http://sourceforge.net/projects/bochs/files/bochs/2.4.6/ el archivo bochs-2.4.6.tar.gz 2. descomprimir: tar -xvzf bochs-2.4.6.tar.gz 3. en el directorio descomprimido hacer: ./configure --enable-debugger --enable-disasm --disable-docbook --prefix=/home/<usuario> /bochs-2.4.6/ make make install En caso de instalar el bochs en la home del usuario (requiere poner la opcin --prefix mencionada o arriba), podemos usar bochs desde cualquier path incluyndolo en la lista de path del sistema. e Hacemos esto, agregando en el archivo ~/.bashrc la linea que incluye tal path. Agregar en el archivo /home/< usuario >/.bashrc export PATH+=":/home/< usuario >/bochs-2.4.6/bin/" Esto cargar el path correcto la prxima vez que iniciemos una consola. Para que carge los cambios a o en nuestra consola actual, ejecutamos: source .bashrc

Como alternativa a la instalacin en la home del usuario se puede instalar en el sistema. Esta o opcin es ms simple y recomendada, pero para esto es necesario contar con permisos de administrador o a de la mquina en cuestin. En este caso, los pasos del tercer punto no incluyen la opcin --prefix, a o o quedando as :
./configure --enable-debugger --enable-disasm --disable-docbook make sudo make install

Esto instala el programa en la ruta por omisin /usr/local/bin. Es recomendable para este caso o desinstalar cualquier versin de bochs que fuera previamente instalada como parte de la distribucin o o de linux utilizada.

2.2.

Menu de bochs

Al ejecutar el bochs vemos una pantalla como la siguiente:

-----------------------------Bochs Configuration: Main Menu -----------------------------This is the Bochs Configuration Interface, where you can describe the machine that you want to simulate. Bochs has already searched for a configuration file (typically called bochsrc.txt) and loaded it if it could be found. When you are satisfied with the configuration, go ahead and start the simulation. You can also start bochs with the -q option to skip these menus. 1. 2. 3. 4. 5. 6. 7. Restore factory default configuration Read options from... Edit options Save options to... Restore the Bochs state from... Begin simulation Quit now

Please choose one: [6]

Para saltear esta pantalla se puede ejecutar el bochs utilizando la opcin -q: o bochs -q

2.3.

Archivo de conguracin o

La conguracin de las opciones de bochs se realiza a travs de un archivo de conguracin o e o llamado bochsrc. En este archivo se especica la mquina a emular, indicando qu discos tiene, a e diskettes, memoria, procesador, puerto serie, etc. A continuacin hay un ejemplo de bochsrc: o

config_interface: textconfig romimage: file=$BXSHARE/BIOS-bochs-latest vgaromimage: file=$BXSHARE/VGABIOS-lgpl-latest vga: extension=vbe cpu: count=1, ips=50000000, reset_on_triple_fault=1, ignore_bad_msrs=1, msrs="msrs.def" megs: 32

floppya: image=floppy.img, status=inserted floppy_bootsig_check: disabled=0 boot: floppy log: bochsout.txt magic_break: enabled=1 debug_symbols: file="kernel.sym" parport1: enabled=1, file="parport.out" mouse: enabled=0 panic: action=ask error: action=report info: action=report debug: action=ignore debugger_log: vga_update_interval: 50000 keyboard_serial_delay: 250 keyboard_paste_delay: 100000 private_colormap: enabled=0 keyboard_mapping: enabled=0, map= i440fxsupport: enabled=1

Junto con bochs pueden encontrar un archivo bochsrc de ejemplo con comentarios detallando el funcionamiento de cada opcin. Si el programa se encuentra instalado en /usr/local/bin/ entonces o este archivo de ejemplo se puede encontrar en /usr/local/share/doc/bochs/bochsrc-sample.txt. Se puede descargar una imagen de linux de ejemplo o diskettes de http://bochs.sourceforge. net/diskimages.html .

3.

Arranque de la mquina virtual a

Cuando una computadora inicia slo existe el BIOS (Basic Input/Output system). En este momeno to es necesario realizar ciertas vericaciones bsicas del sistema, e inicializar los dispositivos f a sicos, como la pantalla de video, el teclado, etc. Esto lo realiza el BIOS. El proceso de booteo comienza ejecutando el cdigo del BIOS, ubicado en la posicin 0xFFFF0, o o en modo real. El BIOS tiene el cdigo en ROM, que realiza la inicializacin (por ejemplo, la placa de o o video) y una vericacin de la mquina (POST, Power-On Self Test). Luego busca algn dispositivo o a u de booteo: Disco r gido, Floppy, USB, etc... Normalmente las opciones de conguracin que el BIOS permite realizar se guardan en una meo moria separada del cdigo del BIOS, llamada NVRAM. De estas opciones el BIOS elige el orden en o que buscar los dispositivos de booteo. a Una vez localizado el dispositivo de arranque, carga el primer sector de 512 bytes (excepto en el caso de CDROM, cuyo tamao es 2048) en la posicin de memoria 0x07C00 y salta a esa direccin. n o o Para determinar si un dispositivo tiene una sector de arranque, el primer sector debe estar rmado, es decir, debe tener en los ultimos dos bytes el valor 0x55AA. Ahora este sector de arranque es el encargado de cargar un kernel e iniciar el sistema operativo dndole el control a este kernel. a

4.

Debug en bochs

Cuando el bochs inicia con el modo debug habilitado, arranca con el procesador detenido justo despus de cargar el BIOS, pero antes de ejecutarlo, y en la direccin 0xFFFF0. Para ver el cdigo e o o del bootloader que fue cargado en 0x07C00 debemos esperar a que lo cargue y frenar antes de que comience a ejecutarlo. A continuacin vemos un ejemplo de uso del debugger mostrando esto. o 4

1. Creamos un breakpoint en la posicin de memoria f o sica donde comenzar a cargar el bootloader a <bochs:1>break 0x07C00 2. Leemos la posicin de memoria donde deber estar la rma del bootloader una vez que carga o a en memoria principal <bochs:2>x/1x 0x07C00+510 [bochs]: 0x00007dfe <bogus+ 0>: 0x00000000 3. Continuamos la ejecucin, hasta que llegamos al breakpoint o <bochs:3>c (0) Breakpoint 1, 0x00007c00 in ?? () Next at t=49462126 (0) [0x00007c00] 0000:7c00 (unk. ctxt): cli ; fa 4. Nuevamente, podemos leer y notar que el BIOS cargo los 512bytes pertenecientes al bootloader, primer sector de la unidad <bochs:4>x/1x 0x07C00+510 [bochs]: 0x00007dfe <bogus+ 0>: 0x0000aa55

4.1.

Referencia breve

En esta seccin incluimos una referencia de los comandos que se le puede indicar al debugger del o bochs. 4.1.1. Next y Step

s | step | stepi [count] - ejecuta [count] instrucciones n | next | p - ejecuta instrucciones sin entrar a las subrutinas c | cont | continue - continua la ejecucin o q | quit | exit - sale del debugger y del emulador Ctrl-C Detiene la ejecucin y retorna al promt o 4.1.2. Registros de uso general

r | reg | regs | registers - Lista los registros del CPU y sus contenidos

<bochs:12> registers eax: 0x00000000 0 ecx: 0x00000000 0 edx: 0x00000543 1347 ebx: 0x00000000 0 esp: 0x00000000 0 ebp: 0x00000000 0 esi: 0x00000000 0 edi: 0x00000000 0 eip: 0x0000e05d eflags 0x00000046 id vip vif ac vm rf nt IOPL=0 of df if tf sf ZF af PF cf

4.1.3.

Memory Dump

x /nuf [addr] - Muestra el contenido de la direccin [addr] o xp /nuf [addr] - Muestra el contenido de la direccin sica [addr] nuf es nmero que indica o u cuantos valores se mostrarn, seguido de uno o ms de los indicadores de formato. a a x : hex d : decimal u : sin signo o : octal t : binario c : char s : ascii i : instruccin o select the size: b : byte h : word = half-word w : dobleword = word 4.1.4. Memory Disassemble

u | disasm | disassemble [count] [start] [end] - desensambla intrucciones desde la direccin lineal o [start] hasta [end] exclusive. u | disasm | disassemble switch-mode - Selecciona la sintaxis Intel o AT&T de asembler u | disasm | disassemble size = n - Setea el tamao del segmento a desensamblar 4.1.5. Breakpoints

p | pb | break | pbreak [addr] - Crea un breakpoint en la direccin f o sica [addr] vb | vbreak [seg:oset] - Crea un breakpoint en la direccin virtual [addr] o lb | lbreak [addr] - Crea un breakpoint en la direccin lineal [addr] o d | del | delete [n] - Borra el breakpoint nmero [n] u bpe [n] - Activa el breakpoint nmero [n] u bpd [n] - Desactiva el breakpoint nmero [n] u 4.1.6. Watchs

watch - Muestra el estado actual de los watchs watch stop - Detiene la simulacin cuando un watch es encontrado o watch continue - No detiene la simulacin si un wath es encontrado o watch r | read [addr] - Agrega un watch de lectura en la direccin f o sica [addr] watch w | write [addr] - Agrega un watch de escritura en la direccin f o sica [addr] 6

4.1.7.

Infos

info break - Muestra los Breakpoint creados info eags - Muestra el registro EEFLAGS info idt - Muestra el descriptor de interrupciones (idt) info ivt - Muestra la tabla de vectores de interrupcin o info gdt - Muestra la tabla global de descriptores (gdt) info tss - Muestra el segmento de estado de tarea actual (tss) info tab - Muestra la tabla de paginas 4.1.8. Registros de Segmento

sreg - Muestra los registros de segmento

<bochs:5> sreg cs:s=0xf000, dh=0xff0093ff, dl=0x0000ffff, valid=7 ds:s=0x0000, dh=0x00009300, dl=0x0000ffff, valid=7 ss:s=0x0000, dh=0x00009300, dl=0x0000ffff, valid=7 es:s=0x0000, dh=0x00009300, dl=0x0000ffff, valid=7 fs:s=0x0000, dh=0x00009300, dl=0x0000ffff, valid=7 gs:s=0x0000, dh=0x00009300, dl=0x0000ffff, valid=7 ldtr:s=0x0000, dh=0x00008200, dl=0x0000ffff, valid=1 tr:s=0x0000, dh=0x00008b00, dl=0x0000ffff, valid=1 gdtr:base=0x00000000, limit=0xffff idtr:base=0x00000000, limit=0xffff

4.1.9.

Registros de Control

creg - Muestra los registros de control

<bochs:10> creg CR0=0x60000010: pg CD NW ac wp ne ET ts em mp pe CR2=page fault laddr=0x00000000 CR3=0x00000000 PCD=page-level cache disable=0 PWT=page-level writes transparent=0 CR4=0x00000000: osxsave smx vmx osxmmexcpt osfxsr pce pge mce pae pse de tsd pvi vme

Вам также может понравиться