logo资料库

操作系统学习小结.pdf

第1页 / 共6页
第2页 / 共6页
第3页 / 共6页
第4页 / 共6页
第5页 / 共6页
第6页 / 共6页
资料共6页,全文预览结束
操作系统学习笔记(一) 一、目的: 本文是通过对《30 天自制操作系统》的学习所作的小结,以便于日后回顾温习。主要是针 对 helloos.img 二进制文件的一个分析。 二、知识点: 在对 helloos.img 进行分析之前需提一下二部分的知识点(引导扇区区格式,opCode) 1) 引导扇区格式: 名称 开始 字节 长 度 内容 BS_jmpBOOT BS_OEMName 0 3 BPB_BytesPerSec 11 3 一个短跳转指令 8 厂商名 2 每扇区字节数 (Bytes/Sector) 参考值 jmp Label_07c00H nop 'QingFeng' 0x200 BPB_SecPerClus 13 BPB_ResvdSecCnt 14 BPB_NumFATs 16 17 BPB_RootEntCnt BPB_TotSec16 19 21 BPB_Media BPB_FATSz16 22 BPB_SecPerTrk BPB_NumHeads BPB_HiddSec BPB_TotSec32 BS_DrvNum BS_Reserved1 BS_BootSig BS_VolID BS_VolLab BS_FileSysType 24 26 28 32 36 37 38 39 43 54 1 每簇扇区数 0x1 (Sector/Cluster) Boot 记录占用多少扇区 ox1 2 1 共有多少 FAT 表 0x2 0xE0 2 根目录区文件最大数 0xB40[2*80*18] 2 扇区总数 1 介质描述符 0xF0 2 每个 FAT 表所占扇区数 0x9 2 每磁道扇区数 0x12 则由这里给出扇区数 INT 13H 的驱动器号 (Sector/track) 2 磁头数(面数) 4 隐藏扇区数 4 如果 BPB_TotSec16=0, 1 1 保留,未使用 1 扩展引导标记(29h) 4 卷序列号 11 卷标 8 文件系统类型 0x2 0 0 0 0 0x29 0 'QingFeng' 'FAT12'
引导代码及其他内 容 结束标志 0xAA55 448 引导代码及其他数据 62 510 2 第 510 字节为 0x55,第 511 字节为 0xAA 引导代码(剩余空 间用 0 填充) 0xAA55 注:1) 引导扇区前两字节为跳转指令,即指示引导程序的开始地址 2) 引导扇区以 0xAA55 为结尾,由于系统一次的读入的能力为 512 字节,因此结 尾标志 0xAA55 需在 510 地址处,以标志当前读入的为引导扇区。 2 ) helloos.img 二进制文件分析: 2.1 根据引导扇区格式进行分析 名称 一个短跳转指令 开始 字节 0 长 度 3 内容 0xEB 0X4E 0X90 参考值 Jmp 0x4e 厂商名 3 11 每扇区字节数 (Bytes/Sector) 每簇扇区数 (Sector/Cluster) Boot 记录占用多少 扇区 共有多少 FAT 表 16 根目录区文件最大 数 17 13 14 扇区总数 介质描述符 每个 FAT 表所占扇 区数 每磁道扇区数 (Sector/track) 磁头数(面数) 隐藏扇区数 如果 BPB_TotSec16=0, 则由这里给出扇区 数 INT 13H 的驱动器 号 19 21 22 24 26 28 32 36 8 2 1 2 1 2 2 1 2 2 2 4 4 1 0xE8 0x45 0x4C 0x4F 0x49 0x50 0x4C 'HELLOIPL' 0x00 0x02 0x200 0x01 0x01 0x00 0x02 0xF0 0x00 0x40 0x0B 0xF0 0x09 0x00 0x12 0x00 0x02 0x00 0x00 0x00 0x1 0x1 0x2 0xF0 2880] 0xF0 0x9 0x12 0x2 0 0x40 0x0B 0x00 0x00 2880 0x00 0
37 保留,未使用 扩展引导标记(29h) 38 39 卷序列号 1 1 4 卷标 43 11 文件系统类型 54 8 0 0x29 0x00 0x29 0xFF 0xFF 0xFF 0xFF 0 0x48 0x45 0x4C 0x4C 0x4F 0x2D 0x4F 0x53 0x20 0x20 0x20 0x46 0x41 0x54 0x31 0x32 0x20 0x20 0x20 'HELLO-OS' 'FAT12' 引导代码及其他数 据 结束标志 0xAA55 448 引导代码及其他数据 62 510 2 第 510 字节为 0x55,第 511 字节为 0xAA 引导代码(剩余空 间用 0 填充) 0xAA55 2.2 引导代码分析: 这部分主要是根据 opCode 进行反汇编,及与汇编文件(helloos.nas)的一个比对分析 二进制代码 0xB8 0x00 0x8E 0xD0 汇编代码 Mov Ax, 0x00 0x00 Mov SS,AX 0xBC 0x00 0x7C Mov sp,0x7C00 注释 0xB8 Mov Ax,imm16(16 位立即数) 0x8E segReg, reg16/mem16 Mov SS, AX 注:以上两条指令不是对栈指针进行初始化 0xBC MOV sp,immed16 注:指示内存加载地址,此处只能是 0x7C00 0x8E 0xD8 Mov DS,AX 0x8E 0xC0 Mov ES,AX (BIOS 规范中定义) 0x8E segReg, reg16/mem16 根据 opCode 分析得 Mov DS,AX 注:对DS 寄存器的初始化 0x8E segReg, reg16/mem16 根据 opCode 分析得 Mov ES,AX 0xBE 0x74 0x7C Move si,0x74 0x7C MOV si,immed16 根据 opCode 分析得 Mov SI,0x74 0x7C 注:将0x7C74 的内存地址赋给SI,即将SI 的指 针指向要打印的字符串.由于引导程序是加载在 0x7c00 的位置,所以这里是以该地址为基础再偏 移0x74 就得到了字符串地址. 0x8A 0x04 Mov AL,[si] 0x83 0xC6 0x01 ADD SI,1 Mov reg8,reg8/mem8 注:将[si]地址的一个字符给AL 0x83 = table2
0x3C 0x00 Cmp al, 0 0xC6 根据 opCode 查得 add si, imm8 最后,得 add si, 1 Cmp al,immed8 0x74 0x09 Jz 0x09 JZ immed8 如 ZF=0 pc 指针偏移 8+2 即 0x71 地址处 0xB4 0x0E Mov ah,0x0e 0xBB 0x0F 0x00 Mov BX,15 0xCD 0x10 0xEB 0xEE Int 0x10 JMP putloop MOV ah,immed8 MOV bx,immed16 INT immed8 Jmp immed8 0xEE = -17 即 pc 指针偏移-17 至 0x5F 地址处 关于 OpCode 请参考 http://ref.x86asm.net/geek64-abc.html 最后简单讲一下 OpCode OpCode 基本有 2 部分组成(Code,modreg/rm) Code 可从 http://ref.x86asm.net/geek64-abc.html 网页上查找 Modreg/rm 为 8bit 字符,以 2:3:3(mod,reg,r/m)的型进行分组 Mod 字段与 r/m(register/memory)字段结合在一起确定另一个操作数的寻址方式, 根据 mod 字段来确定寻址方式: 如:0x8A 0x04 查 opCode 0x8A 指令为 Mov reg8,reg8/mem8 对 0x04 进行 2:3:3 分组得 00 000 100 先查 000 得 AL 100 得[SI] 因此 0x8A 0x04 = Mov AL,[SI] 16-bit ModR/M Byte r8(/r) r16(/r) r32(/r) mm(/r) xmm(/r) sreg AL CL DL BL AH CH DH BH AX CX DX BX SP BP SI DI EAX ECX EDX EBX ESP EBP ESI EDI MM0 MM1 MM2 MM3 MM4 MM5 MM6 MM7 XMM XMM 0 7 ES CS SS DS FS GS res res XMM 1 XMM 4 XMM 2 XMM 3 XMM 5 XMM 6
eee eee (In decimal) /digit (Opcode)0 (In binary) REG = Effective 聽 Address d 1 CR2 CR3 CR4 inv CR0 inv DR0 DR1 DR2 DR3 DR41DR51DR6 DR7 d 2 3 4 5 . inv d . inv d 6 7 000 001 010 011 100 101 110 111 R/ Mo Value of ModR/M Byte (in Hex) d M 00 00 0 00 08 10 18 20 28 30 38 00 1 01 09 11 19 21 29 31 39 01 0 02 0A 12 1A 22 2A 32 3A 01 1 03 0B 13 1B 23 2B 33 3B 10 0 04 0C 14 1C 24 2C 34 3C 10 1 05 0D 15 1D 25 2D 35 3D 11 0 06 0E 16 1E 26 2E 36 3E 11 1 07 0F 17 1F 27 2F 37 3F 01 00 0 40 48 50 58 60 68 70 78 00 1 41 49 51 59 61 69 71 79 01 0 42 4A 52 5A 62 6A 72 7A 01 1 43 4B 53 5B 63 6B 73 7B 10 0 44 4C 54 5C 64 6C 74 7C 10 1 45 4D 55 5D 65 6D 75 7D 11 0 46 4E 56 5E 66 6E 76 7E 11 1 47 4F 57 5F 67 6F 77 7F 10 00 0 80 88 90 98 A0 A8 B0 B8 [BX+SI] [BX+DI] [BP+SI] [BP+DI] [SI] [DI] disp16 [BX] [BX+SI]+disp8 [BX+DI]+disp8 [BP+SI]+disp8 [BP+DI]+disp8 [SI]+disp8 [DI]+disp8 [BP]+disp8 [BX]+disp8 [BX+SI]+disp16
[BX+DI]+disp16 [BP+SI]+disp16 [BP+DI]+disp16 [SI]+disp16 [DI]+disp16 [BP]+disp16 [BX]+disp16 AL/AX/EAX/ST0/MM0/XM M0 CL/CX/ECX/ST1/MM1/XM M1 DL/DX/EDX/ST2/MM2/XM M2 BL/BX/EBX/ST3/MM3/XM M3 AH/SP/ESP/ST4/MM4/XM M4 CH/BP/EBP/ST5/MM5/XM M5 DH/SI/ESI/ST6/MM6/XM M6 BH/DI/EDI/ST7/MM7/XM M7 00 1 81 89 91 99 A1 A9 B1 B9 01 0 82 8A 92 9A A2 AA B2 BA 01 1 83 8B 93 9B A3 AB B3 BB 10 0 84 8C 94 9C A4 AC B4 BC 10 1 85 8D 95 9D A5 AD B5 BD 11 0 86 8E 96 9E A6 AE B6 BE 11 1 87 8F 97 9F A7 AF B7 BF 11 00 0 C0 C8 D0 D8 E0 E8 F0 F8 00 1 C1 C9 D1 D9 E1 E9 F1 F9 01 0 C2 CA D2 DA E2 EA F2 FA 01 1 C3 CB D3 DB E3 EB F3 FB 10 0 C4 CC D4 DC E4 EC F4 FC 10 1 C5 CD D5 DD E5 ED F5 FD 11 0 C6 CE D6 DE E6 EE F6 FE 11 1 C7 CF D7 DF E7 EF F7 FF
分享到:
收藏