首页 > 编程语言 >基于元神操作系统编程写USB扇区

基于元神操作系统编程写USB扇区

时间:2024-09-01 19:52:39浏览次数:15  
标签:fs U盘 equ mov 扇区 API 元神 USB

1. 背景

本文介绍了“调用元神操作系统API向U盘扇区写数据”的程序实现及测试结果。

2. 方法

(1)调用元神操作系统API读U盘扇区

本部分内容已在前面的文章中进行介绍,详细内容请参考“编写程序调用元神操作系统的API”。

(2)调用元神操作系统API写U盘扇区

本例通过调用系统API来向U盘扇区写数据,代码如下所示:

sector_buff: times 512 db 1
demo_write_usb:
	pusha
	mov edi, API_PARAM
	mov dword [fs:edi], API_WRITE_USB_SECTOR
	mov dword [fs:edi+4], 2		;2 parameters
	mov dword [fs:edi+8], 3		;parameter_1: sector no.
	xor eax, eax
	mov ax, ds
	add eax, SEG_BASE
	mov bh,byte [fs:eax+7]
    mov bl,byte [fs:eax+4]
    shl ebx,16
    mov bx,word [fs:eax+2]
	add ebx, sector_buff
	mov dword [fs:edi+12], ebx	;parameter_2: start address of buffer
	
	call pword [fs:OS_API]

	popa
	ret

代码中先定义了变量sector_buff,用于存储要写入U盘扇区的数据,本例为512个1。然后在代码中如前述文章所描述的那般进行参数设置,将API类型设置为API_WRITE_USB_SECTOR,该API需要2个参数,第一个参数是要写数据的扇区的LBA号(本例要写3号扇区),第二个参数为保存要写入数据的缓冲区起始地址(本例为sector_buff)。设置好参数后通过“call pword [fs:OS_API]”进行API调用、完成写扇区操作。

本例和前述系统API调用的主要差别在于新的API类型和缓冲区地址转换,新增的定义如下:


SEG_BASE     equ     0x00040000
API_WRITE_USB_SECTOR	equ	0x00000007

其中,SEG_BASE表示的是保护模式下GDT的起始地址,通过它和DS中的段选择子定位到本demo程序加载到内存的位置,并提取出其起始地址,再加上sector_buff的偏移,得到该变量的真实地址,最后才将该地址赋给调用参数。

(3)附属程序

本例先读取3号扇区的内容并打印到屏幕上,然后将新的数据写入3号扇区,最后再重新读取3号扇区并打印到屏幕上,代码如下所示:

use32

START:
	pusha
	
	call demo_read_usb
	call demo_write_usb
	call demo_read_usb
	
	popa
	iret

include 'api_def.inc'

OS_API equ 0x00030C16
API_PARAM equ 0x03000000
SEG_BASE equ 0x00040000
cursor_x equ 0x02004B10
cursor_y equ 0x02004B12

代码中的demo_read_usb函数直接采用前述文章中的实现代码即可,具体可参考前述文章。

(4)运行程序

将以上的代码保存为DEMO.ASM,编译生成DEMO.BIN,并将该可执行文件复制到装有元神操作系统的U盘中,之后用该U盘开机进入元神系统并输入命令“ZX DEMO.BIN”执行程序如下:

可以看到,U盘3号扇区的内容已经成功修改,改成了全1的512个字节数据。

3. 总结

本文介绍的方法成功地向U盘的目标扇区写入了数据。但是,写扇区须谨慎,以免错写某些文件已经占用的扇区从而导致文件出错。

标签:fs,U盘,equ,mov,扇区,API,元神,USB
From: https://blog.csdn.net/wangdechang119/article/details/141646582

相关文章

  • USB LFPS是什么?
    USBLFPS:低功耗状态下的高速数据传输什么是USBLFPS?USBLFPS(Low-PowerSignaling)指的是USB接口在低功耗状态下的一种高速数据传输技术。传统上,USB接口在低功耗模式下,数据传输速率会大幅降低,以节省功耗。而LFPS技术则通过优化信号传输方式,使得USB设备在低功耗状态下仍能保持较高......
  • USB TCPM
    USBTCPM(Type-CPortManager)的主要作用是管理USBType-C端口的连接和电源传输协议(USBPowerDelivery,PD),确保设备正确识别、协商和切换数据传输和电源供应的角色。TCPM在USBType-C连接中起到关键管理作用,主要职责包括:管理USBType-C插拔检测:检测设备的插入和拔出事件......
  • USB相关的sysfs文件
    前言在sysfs文件系统下,查看USB设备,看到一些乱七八糟的设备显示,它们都是什么呢?今天来介绍一下。root@ATK-IMX6U:~#ls/sys/bus/usb/devices/1-0:1.01-11-1.11-1:1.01-1.1:1.01-1.1:1.11-1.31-1.3:1.01-1.3:1.1usb1目录内容详解usb1usb1表示该 SOC......
  • Android Qcom USB Driver学习(十四)
    UDC-GadgetUDC:(USBDeviceController)用于管理和控制USB设备与主机之间的通信。Gadget:Android在此层实现了adb,mtp(MediaTransferProtocol媒体传输协议),mass_storage等。早期的USB只支持单一的gadget设备,使用场景较为简单,随后加入了compositeframework,用来支持多个function......
  • 航图中的扇区数据生成
     今天简单聊一下机场扇区,最后再介绍一下《风标设计2025》航图模块中的扇区绘制功能。机场扇区是以机场基准点(ARP)或归航台为圆心,半径46km(25nm),外加9km(5nm)缓冲区构成。PBN程序扇区通常以ARP为圆心,传统程序扇区以导航台为圆心。对于中小机场,为了统一和简化扇区划设,可......
  • Android Qcom USB Driver学习(十三)
    DPMDevicePolicyManagerdealswiththeUSBPowerDeliveryresourcesusedbyoneormoreportsonthebasisofthelocaldevicepolicythebasisofthelocaldevicepolicy.OPMOSPolicyManageroperatingSoftwarethatinterfaceswiththePPMPPMPlatfor......
  • Android Qcom USB Driver学习(十二)
    keypad在suspend的过程中导致Android无法进入suspend的问题,导致整体功耗过高,其实是主机都没有进入睡眠,通过以下打log的方式最终定位到问题,pmicvbus输出的时候会有reverseboost所以pmic侧的功耗也会有增加,当pmic电量低的时候会触发uvlo导致vbus上的电断开,需要需要的话,我们可以降......
  • linux下UsbMon-WireShark之USB协议抓取分析
    usbmon配置使用usbmon抓包分的,是需要内核开启CONFIG_USB_MON=m,重新编译内核,编译ko:makeARCH=arm64CROSS_COMPILE=aarch64-himix100-linux-CONFIG_USB_MON=mM=./drivers/usb/modules设备挂载debugfs,加载ko:mount-tdebugfsdebugfs/sys/kernel/debug/insmod......
  • Windows下使用Wireshark分析USB通信
    WireShark中对USB数据捕获可以监视与主机连接的usb数据.usb设备是三段地址描述,例如1.15.1,第一个是总线,第二个是设备地址,第三个是端口.USB数据抓包分析这些是鼠标的数据包包抓包内容键盘数据包,按下一个键后抓到的数据包,查询usb标准,对照后是a。......
  • USB设置之间通信
    在电脑上连接的USB设备之间,通常不能直接通信。USB(通用串行总线)是一种主从结构的总线系统,其中只有一个USB主机(通常是电脑),而其他连接的设备都作为从机。在这种结构中,设备之间的通信必须通过USB主机进行转发,即设备不能直接与其他设备交换数据或信号。USB主机负责控制和管理所有连接......