调试bootsect和setup和head到main

<bochs:1> b 0x0:0x7c00

<bochs:2> c

(0) Breakpoint 1, 0x7c00 in ?? ()

Next at t=16165613

(0) [0x00007c00] 0000:7c00 (unk. ctxt): mov ax, 0x7c0             ; b8c007

<bochs:3> b 0x90200

<bochs:4> c

(0) Breakpoint 2, 0x90200 in ?? ()

Next at t=16396177

(0) [0x00090200] 9020:0000 (unk. ctxt): mov ax, 0x9000            ; b80090

<bochs:5> b 0x00

<bochs:6> c

(0) Breakpoint 3, 0x0 in ?? ()

Next at t=16659024

(0) [0x00000000] 0008:00000000 (unk. ctxt): mov eax, 0x10             ; b810000000

<bochs:7> u

00000000: (                    ): mov eax, 0x10             ; b810000000

<bochs:8> b 0x5400

<bochs:9> c

(0) Breakpoint 4, 0x5400 in ?? ()

Next at t=16660345

(0) [0x00005400] 0008:00005400 (unk. ctxt): push 0x0                  ; 6a00

<bochs:12> u /10

00005400: (                    ): push 0x0                  ; 6a00

00005402: (                    ): push 0x0                  ; 6a00

00005404: (                    ): push 0x0                  ; 6a00

00005406: (                    ): push 0x5412               ; 6812540000

0000540b: (                    ): push 0x664c               ; 684c660000

00005410: (                    ): jmp 0x5450                ; eb3e

00005412: (                    ): jmp 0x5412                ; ebfe

00005414: (                    ): push ebp                  ; 55

00005415: (                    ): outsb dx, byte ptr [esi]  ; 6e

00005416: (                    ): imul ebp, dword ptr ds:[esi+0x6f], 0x77 ; 6b6e6f77

<bochs:13> b 0x5450

<bochs:14> c

(0) Breakpoint 5, 0x5450 in ?? ()

Next at t=16660351

(0) [0x00005450] 0008:00005450 (unk. ctxt): mov ecx, 0x1400           ; b900140000

<bochs:17> u /30

00005450: (                    ): mov ecx, 0x1400           ; b900140000

00005455: (                    ): xor eax, eax              ; 31c0

00005457: (                    ): xor edi, edi              ; 31ff

00005459: (                    ): cld                       ; fc

0000545a: (                    ): rep stos dword ptr [edi], eax ; f3ab

0000545c: (                    ): mov dword ptr [ds:0x0], 0x1007 ; c7050000000007100000

00005466: (                    ): mov dword ptr [ds:0x4], 0x2007 ; c7050400000007200000

00005470: (                    ): mov dword ptr [ds:0x8], 0x3007 ; c7050800000007300000

0000547a: (                    ): mov dword ptr [ds:0xc], 0x4007 ; c7050c00000007400000

00005484: (                    ): mov edi, 0x4ffc           ; bffc4f0000

00005489: (                    ): mov eax, 0xfff007         ; b807f0ff00

0000548e: (                    ): std                       ; fd

0000548f: (                    ): stos dword ptr [edi], eax ; ab

00005490: (                    ): sub eax, 0x1000           ; 2d00100000

00005495: (                    ): jnl 0x548f                ; 7df8

00005497: (                    ): xor eax, eax              ; 31c0

00005499: (                    ): mov cr3, eax              ; 0f22d8

0000549c: (                    ): mov eax, cr0              ; 0f20c0

0000549f: (                    ): or eax, 0x80000000        ; 0d00000080

000054a4: (                    ): mov cr0, eax              ; 0f22c0

000054a7: (                    ): retn                      ; c3

000054a8: (                    ): add byte ptr ds:[eax], al ; 0000

000054aa: (                    ): inc dword ptr ds:[edi]    ; ff07

000054ac: (                    ): mov eax, 0x54             ; b854000000

000054b1: (                    ): add bh, bh                ; 00ff

000054b3: (                    ): pop es                    ; 07

000054b4: (                    ): mov eax, 0x2800005c       ; b85c000028

000054b9: (                    ): push esp                  ; 54

000054ba: (                    ): or byte ptr ds:[eax], al  ; 0800

000054bc: (                    ): add byte ptr ds:[esi+0x54280000], cl ; 008e00002854

<bochs:18> b 0x54a7

<bochs:19> c

(0) Breakpoint 6, 0x54a7 in ?? ()

Next at t=16677775

(0) [0x000054a7] 0008:000054a7 (unk. ctxt): retn                      ; c3

<bochs:20> s

Next at t=16677776

(0) [0x0000664c] 0008:0000664c (unk. ctxt): push ebp                  ; 55

<bochs:21> u /20

0000664c: (                    ): push ebp                  ; 55

0000664d: (                    ): mov ebp, esp              ; 89e5

0000664f: (                    ): movzx ecx, word ptr [ds:0x901fc] ; 0fb70dfc010900

00006656: (                    ): mov dword ptr [ds:0x1a964], ecx ; 890d64a90100

0000665c: (                    ): mov eax, 0x90080          ; b880000900

00006661: (                    ): mov edx, 0x1dd6c          ; ba6cdd0100

00006666: (                    ): mov ecx, dword ptr ds:[eax] ; 8b08

00006668: (                    ): mov dword ptr ds:[edx], ecx ; 890a

0000666a: (                    ): mov ecx, dword ptr ds:[eax+0x4] ; 8b4804

0000666d: (                    ): mov dword ptr ds:[edx+0x4], ecx ; 894a04

00006670: (                    ): mov ecx, dword ptr ds:[eax+0x8] ; 8b4808

00006673: (                    ): mov dword ptr ds:[edx+0x8], ecx ; 894a08

00006676: (                    ): mov ecx, dword ptr ds:[eax+0xc] ; 8b480c

00006679: (                    ): mov dword ptr ds:[edx+0xc], ecx ; 894a0c

0000667c: (                    ): mov ecx, dword ptr ds:[eax+0x10] ; 8b4810

0000667f: (                    ): mov dword ptr ds:[edx+0x10], ecx ; 894a10

00006682: (                    ): mov ecx, dword ptr ds:[eax+0x14] ; 8b4814

00006685: (                    ): mov dword ptr ds:[edx+0x14], ecx ; 894a14

00006688: (                    ): mov ecx, dword ptr ds:[eax+0x18] ; 8b4818

0000668b: (                    ): mov dword ptr ds:[edx+0x18], ecx ; 894a18

<bochs:22>

时间: 2024-12-31 00:14:42

调试bootsect和setup和head到main的相关文章

bootsect及setup

BIOS和bootsect CPU加电即进入16位实模式 硬件逻辑设计为加电瞬间强行设置:CS=0xF000,IP=0xFFF0,CS:IP=0xFFFF0 而BIOS程序的入口地址即0xFFFF0,是计算机上电后CPU执行的第一条指令的地址 BIOS程序在内存中加载中断向量表和中断服务程序 调用INT 0x19中断,将软盘第一扇区(0面0磁道1扇区)的512字节即bootsect.s加载到内存0x07C00处 bootsect.s将自身复制到0x90000~0x90200,ds:si -> e

linux0.11的bootsect.s和setup.s

 1.计算机的启动 1.首先计算机的工作原理可以简单的概述为取指,执行:再取指,再执行:以此类推的过程,cpu就是一个不停取指执行不会休息的机器.  2.那么x86结构的计算机上电后是是怎么工作的呢?其实上电后(未加载操作系统代码之前)会先执行内存中一段为BIOS固化的区域,这段区域是每次开机都必须执行的,正常情况下不被我们所控,主要作用是对一些硬件环境做出检测,是否有硬件损坏.这段期间cpu处在实模式下工作.在BIOS代码执行完毕后,cpu会去磁盘的0磁道0扇区读取512字节到内存地址的0x7

STM32 使用片外外扩内存调试

紧接上一篇,如果程序改来改去还是太大对不进STM32的内存怎么办?只能用下载到flash然后调试了吗?其实还可以下载到外扩的SRAM里,这样就几乎能搞定所有的普通程序了.唯一的缺点是在这种情况下,程序会跑得比较慢,whatever,能调试才是正道. 板子还是红牛默认配置,这货带了256x16bit的SRAM一片,接在FSMC上,下面介绍怎么配置成使用这片外扩SRAM进程程序调试. 首先要知道一点,红牛这个SRAM的基址是0x68000000,于是我们就把ROM的基址设置成这个.RAM就保持0x2

《LINUX内核设计的艺术》第一章从开机家电到执行main函数之前的过程 学习笔记之一

从开机加电到实行main函数之前的过程 分为三步,目的是实现从启动盘加载操作系统程序,完成实现main函数的准备工作 启动BLOS,准备是模式下的中断向量表和中断服务程序 从启动盘加载操作系统程序到内存.加载操作系统程序就是靠第一步实现的 为实现32位的main函数做过度工作 1.1启动blos,准备实模式下的中断向量表和中断服务程序 由blos来加载软件操作系统的任务 1.1.1         BLOS的启动原理 0XFFFF0 由硬件来启动,CPU硬件设计逻辑设计为加电瞬间就强行将CS的值

电脑从开机加电到操作系统main函数之前执行的过程

总的来说在操作系统加电启动之后到main函数执行之前操作系统经历了以下3个大步骤 1.启动BIOS.这个时候位于实模式下,加载中断向量和中断服务程序 2.加载操作系统内核并为保护模式做准备.这个时候操作系统一共加载了3部分代码:引导程序bootsect,内核代码setup,内核代码system模块 3.从实模式转换为32位保护模式.这个过程要做大量重建工作,并且持续工作到操作系统main函数的执行过程.细说的话,主要包括打开32位寻址空间,打开保护模式,建立保护模式下的中断相应机制与保护模式配套

从开机加电到执行main函数之前的过程

1.启动BIOS,准备实模式下中断向量表和中断服务程序 在按下电源按钮的瞬间,CPU硬件逻辑强制将CS:IP设置为0xFFFF:0x0000,指向内存地址的0xFFFF0位置,此位置属于BIOS的地址范围.关于硬件如何指向BIOS区,这是一个纯硬件动作,在RAM实地址空间中,属于BIOS地址空间部分为空,硬件只要见到CPU发出的地址属于BIOS地址范围,直接从硬件层次将访问重定向到BIOS的ROM区中.这也就是为什么RAM中存在空洞的原因. BIOS程序在内存最开始的位置(0x00000)用1K

Linux 0.11 内核学习之main.c

1.之所以选择这么低的版本学习,答案是简单,高版本的代码量太大,对于我这样的初学者来说,就是瞎子摸象不会有什么感觉.开始吧! 2首先你需要在一个地方下载源码:OldLinux 3.分析: 1 /* 2 * linux/init/main.c 3 * 4 * (C) 1991 Linus Torvalds 5 */ 6 7 #define __LIBRARY__ //在unistd.h中,使用了#ifndef __LIBRARY__ 8 #include <unistd.h> //包含units

Linux系统内核main函数执行之前

1.linux是一个操作系统在机器加电后,需要从硬件通过一个引导程序加载os kernel,那么在os kernel的main函数运行之前,都发生了什么呢? (1)引导BIOS(存储在ROM芯片中,ROM:只读存贮器,现在一般为闪存)的启动(准备实模式下的中断向量表和中断服务程序) 实模式:Intel80x86系列的一种cpu运行模式,特点,20位地址寻址(1MB),可直接访问BIOS和周边的硬件,没有硬件支持的实时多任务和分页机制. BIOS任务:把os 加载到RAM(随机存取存储器,也就是常

Linux内核0.11 bootsect文件说明

一.总体功能介绍 这是关于Linux-kernel-0.11中boot文件夹下bootsect.s源文件的说明,其中涉及到了一些基础知识可以参考这两篇文章. 操作系统启动过程 软盘相关知识和通过BIOS中断访问软盘 bootsect.s 代码是磁盘引导块程序,存储在磁盘的第一个扇区中(0面0道1扇区),在计算机上电BIOS自检后,BIOS 会吧引导扇区代码bootsect加载到内存0x90000处开并运行. bootsect代码主要完成以下几项工作: 加载从磁盘第二个扇区开始的4个扇区的内容(由