自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

  • 博客(26)
  • 资源 (3)
  • 收藏
  • 关注

原创 PCI配置空间访问

当0xCF8-CFB作为单独的Byte使用时,往0xCFB的bit0写1意味着使用PCIconf1,写0使用PCI conf2,conf2已经废弃不用 WritePortByte(0xCFB, 0x01);2、I/O Address Space ,io端口,0~0xFFFF(64K),通过in、out 指令直接访问,PCI配置空间访问有4种方式:pci_bios、pci_conf1、pci_conf2、pci_mmcfg。在reactos0.17中有完整的代码。pci_mmcfg应该是MMIO方式,

2024-04-30 21:59:35 347

原创 wdm驱动原理1

也就是说VideoPortInitialize 的前两个参数是vga.sys的DriverEntry收到的两个参数,之后初始化。第三个参数,第四个参数均是0,再调用videoprtr的VideoPortInitialize函数。3、调用 videoprt.sys的函数VideoPortInitialize。操作系统启动时,遍历硬件设备,再找到对应的驱动程序,调用相应的sys文件。videoprtr的DriverEntry没有具体的内容。一个正常的驱动程序,应在该函数做以下事情。IDA分析的函数定义。

2024-04-25 15:42:04 178

原创 山寨windows

5、.bss区段:包含未初始化的全局和静态变量,该区段在文件中不占用空间,只在内存中分配。因此只需要将文件分段加载至内存,再处理好导入表,还有一些重定位等需要处理,就可以正常运行。6、.idata区段:包含导入表,用于存储程序运行时需要动态链接的外部函数和库的信息。现在要处理是驱动程序 sys的加载与调用,主要是内核api的资料比较少,还在试验当中。7、.rsrc区段:包含资源数据,如图标、位图、字符串等。1、文件头,包含DOS文件头、PE文件头、段信息等。以上过程均已通过代码实验成功。

2024-04-08 16:03:39 184

原创 自写系统运行windows程序

运行已经基本正常了。

2024-03-21 14:03:48 184

原创 操作系统DC分析1

显示窗口,即将窗口对应的内容写入显卡内存,因此窗口需要指向一个地址,该地址可以是内存也可以是显存。放在系统内存好处是系统刷新窗口不用切换进程,坏处是系统空间只有2G,窗口多了是否够用,是放堆内,还是另外申请空间,还有建立DC时需切换至内核态;2、起点(x0,y0),窗口与DC的不同,顶级窗口起点为屏幕窗口的相对位置,子窗口为顶级窗口的相对位置,如果是孙子窗口,则需考虑父窗口的位置。3、窗口内存与DC内存指向同一块地址,除部分操作(移动,)其他窗口大部分操作都是通过DC操作,本次采用的写内存方法,

2024-03-18 12:12:00 388

原创 pe文件运行过程

一、pe入口为 _WinMainCRTStartup (ida6.5显示的函数名,下面是ida7.5转的C代码),简单来说,就是先调用HeapCreate建立一个可变大小的堆,在该堆上申请几块内存用于管理小内存变量,如果是变量较大则调用HeapAlloc。运行之后 p1=0x00560000 p2=0x01f30000 e=0x005607e0。运行之后,p=0x003f0000,e=0x003f07e0,此时堆应该变大了。分析vc6 生成的hello world 程序,

2024-03-18 11:20:23 397

原创 pe文件资源查找

资源结构表有四层,前三层的偏移地址从本段基地址开始,前三层结构相同,为IMAGE_RESOURCE_DIRECTORY+IMAGE_RESOURCE_DIRECTORY_ENTRY组成。IMAGE_DOS_HEADER+IMAGE_NT_HEADERS +IMAGE_SECTION_HEADER+数据。0x409="utf-8"资源段为IMAGE_DIRECTORY_ENTRY_RESOURCE。IMAGE_SECTION_HEADER为段描述结构。第二层 ID为资源ID,字串ID=真实ID/16+1;

2024-03-18 10:55:26 430

原创 pe文件加载0

读取pe文件图标正常,运行过程还存在问题,继续努力!

2024-03-15 12:07:42 326 1

原创 icon格式软解码

说是icon格式,实际上只是将 XOR 图直接画在窗口上,搞清格式就不,有点一相不通为什么要把数据倒过来存储。

2024-03-07 20:46:46 474

原创 绘制窗口及窗口位置变化

自制操作系统,如何处理窗口移动、关闭绘制的问题

2024-02-28 22:42:59 378 1

原创 写一个自己作主的操作系统

不记得什么时候开始想自己写一个操作系统,从引导程序开始,到现在快有10年了吧,没做事了,就写一些,忙起来就丢一边了。后来想接着写,结果发现前面写的东西都看不懂,只得又重新学一遍,主要资料难找,一点点往前写,慢慢的形成了一个框架。1、内存分页,4G平坦地址、用户态2G(由进程独占),系统态2G(所有进程、内核共享)2、实现显卡、鼠标、键盘、硬盘、GDT 、IDT、时钟的基本功能。3、进程、线程、窗口、消息、系统调用、用户态函数回调的运行和协调。4、动态DLL,应用程序EXE的加载和运行。5、窗口的正常显示。

2024-02-23 15:21:53 413 1

原创 内存管理——线性内存,进程空间

一个新进程创建后,第一个执行函数为proc_startup,该函数过程如下。1、初始化进程空间管理器,该数据放在0x7FFFF000固定位置。2、建立堆,全局变量,放在系统栈中,3、建立文件列表,全局变量,5、根据主文件加载DLL。

2024-02-21 13:58:44 572 1

原创 栈的分配与管理

原程序运行在用户态,中断时处理器就要到TSS处找到0级的ss和esp,然后切换堆栈,然后处理器把被中断进程的ss,esp,EFLAGS,CS,EIP,压栈,如果有错误码的话,错误码将最后被压栈(iretd指令并不会自动弹出错误码。3、 用户线程有两个状态,需要两个栈,一个是内核栈,由创建线程的程序创建(高2G),主要用于线、进程初始化和sysenter 指令,另一个是用户栈,由线程初始化程序设置(位于低2G线性空间中)。2.将IA32_SYSENTER_CS的值加上0x18+3,将其结果加载到SS中。

2024-02-21 13:50:45 425 1

原创 PE 资源表-字符串

根据 字串ID查找 PE中对应的资源,字串的ID不是显式存在,需要通过计算得出

2024-02-21 10:16:49 380 1

原创 保护模式调用BIOS中断-方式2

进入保护模式后不能直接调用BIOS中断,V86模式有的仿真器不能,因此试验了下转实模式调的方式

2023-12-22 16:49:35 426

原创 保护模式利用V86 mode 调用bios中断

进入保护模式后,可以利iret 设置eflags寄存器中VM位 从而进入V86 mode。返回保护模式是用sysenter指令返回。4、使用iret指令前要将eglags中的IOPL设置为3,这样执行iret、sysenter指令不会报错;1、V86 mode是运行在CPL 3特权下的,操作代码是16位;5、寻方式为 段:偏移,1M范围内;3、需先初始化 GDT、IDT;2、分页机制有保护标志;

2023-11-10 14:35:55 178 1

原创 内存管理——malloc

第一 建立线性内存空间管理表,将线性内存分成若干个段,除开一些特殊的段外,存在一些自由的段;第二 从自由段中抽取一块作为堆,堆初始化后,就可以通过malloc函数申请变量的存储空间了。堆可以有多个,,共享系统程序空间应建立至少一个堆,进程中也可以建立多个。malloc函数应给定堆的指针。

2023-11-09 20:34:53 69 1

原创 内存管理——线性空间,系统空间

代码由mem_sys_virtual_init,mem_virtual_alloc,mem_virtual_alloc三个函数完成。将内存分成若干块,每块标注属性,需要申请时找到合适的块,或者从大块中分割小块出来。释放时查找前后块的属性,都为空闲时合并。32位的内存空间是4G,除开些保留的、给硬件的、还有一些特殊用途的将,剩余的前2G分给应用程序,由不同的程序单独使用(用户态),后2G分给系统由所有程序共享(核心态)。系统内存管理顺序表由内核文件编译时决定存放位置,不用额外申请空间。

2023-11-08 22:49:17 92 1

原创 内存管理——物理内存

在线性内存空间里建立一个内存块(这个位置固定在系统映像+系统栈之后),每个字节用来表示一个物理内存块的状态,4KB可以标注16M线性内存,当前块使用一次则增加1,释放则减1,如果该数字为0表示为空闲块。之后为页目录(4K)、页表(13K)、系统映映像(?)、系统栈(16K)、内存map(8K)、空闲(?因为线性空间要分成两部分,一部分为内核所有进程共享,另一部分为用户进程独享,所以需要建立两个管理列表。内存管理分为物理内存管理,线性内存管理。物理内存用Map方式管理,线性内内用分块链接表方式管理。

2023-11-07 21:29:05 128

原创 操作系统启动流程

3、DBR从分区中加载引导程序+初始化程序(这两程序合并成一个文件OSKRNL)到0x20000,按文件大小全部加载。1、电脑加电后,先通过BIOS初始化硬件,然后从硬盘0磁道加载一扇区数据(MBR)到0x7C00~0x7E00内存,然后跳转到x7C00执行。2、MBR让出0x7C00~0x7E00内存,将引导分区的数据(DBR)加载至该段内存。6.5 硬盘初始化, 这之后就可以从硬盘上加载单独的驱动文件。4、OSKRNL由osloader.bin+oskrnl.exe组成。

2023-11-02 21:39:32 85

原创 x86进行进程切换

进程设计与切换

2023-07-02 22:41:57 90 1

原创 利用stm32和PC做一个示波器

单片机adc采集电压,通过 usb传输给pc后显示出来.

2022-12-18 20:45:09 1488 2

原创 利用声卡作示波器

【代码】利用声卡作示波器。

2022-12-18 11:47:34 378

原创 显存读写

vbe 提供了保护模式的接口,设置 模式可以通过基提供的端口操作。LFBMTRRvoid BgaSetVideoMode(unsigned int Width, unsigned int Height, unsigned int BitDepth, int UseLinearFrameBuffer, int ClearVideoMemory){ // VBE disablin...

2020-02-29 22:32:03 1757

原创 fat32分区引导程序

fat32分区引导程序作用读取分区内的系统初始化文件freeldr.sys/** COPYRIGHT: See COPYING in the top level directory* PROJECT: ReactOS Bootsector* FILE: boot/freeldr/bootsect/fat32.S* P...

2019-05-20 15:53:24 1052

原创 引导

硬盘引导模块主机按下启动键后,CPU读取BIOS,BIOS初始化,将启动盘的第一扇区512B数据读到内存的0x7c00-0x7d00,并跳转至0x7c00。这一段的代码的作用是: 选择要启动的分区,并将要启动分区的数据读至合适的内存位置并跳转。start:// 初始化各寄存器 cli mov ss, ax mov sp, offset start m...

2019-05-19 09:49:49 174

stm32F103c6 示波器,单片机源码Keil5

stm32F103c6 adc通过dma收集数据,再通过hid发送给pc

2023-05-07

stm32单片机示波器pc端

单片机adc采集数据,通过hid传输给PC,再显示波形 delphi代码

2022-12-18

APToolV7200(2020-03-18).rar

芯邦量产工具实际上是分为两种的,一种是UMPTool,另一种是APTool。UMPTool是常规量产工具,支持高格、低格,但无法识别这种扩容盘;而APTool仅支持高格,但可以进行黑片扩容。 所以,需要先用APTool V7000版本设置擦除量产信息,然后使用UMPTool V7000版本就可以识别并顺利量产了。

2021-05-13

BOCHS 虚拟硬盘工具

可以用命令格式建立一个BOCHS 虚拟硬盘 参数为 cylinders=20, heads=16, spt=63 imgtools.exe -o 输出文件 -mbr 0磁道引导区 -dbr 分区引导文件 -c 分区加入文件

2020-03-10

message-only windows消息窗口

建立一个消息窗口,只接受消息,处理自定义的消息

2009-02-19

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除