c语言中0x13,int0x13常用功能详解

c语⾔中0x13,int0x13常⽤功能详解
1、 int 0x13 的扩展读(ah = 0x42)
int 0x13 的 0x42 号功能从磁盘读 n 个 sectors 到 buffer 中。我的青春我的爱
⼊⼝参数:ah = 0x42, dl = 磁盘号(0x80 为硬盘), ds:si = buffer
读⼊的 buffer 结构,⽤ c 描述为:
struct buffer_packet
{
short buffer_packet_size;        /* struct's size(可以为 0x10 或 0x18)*/
short sectors;                    /* 读多少个 sectors */
char *buffer;                    /* buffer address */
long long start_sectors;          /* 从哪个 sector 开始读 */
long long *l_buffer;              /* 64 位的 buffer address */
} buffer;
这个 buffer_packet 结构⼤⼩可以为 16 bytes 或者 24 bytes
当 buffer_packet_size 设置为 0x10,最后的 l_buffer ⽆效。 buffer_packet_size 设为 0x18 时,l_buffer 需要提供
注意:
buffer_packet 结构⾥的 buffer 地址,它是个逻辑地址,即:segment:offset
低 word 放着 offset 值,⾼ word 放着 segment 值。
切记!
下⾯是摘⾃ windows 7 的 MBR 中的典型⽤法
典型的 int 0x13 第 0x42 号功能⽤法:
/* 以下是使⽤ int 0x13 扩展功能读 disk */2012重庆高考英语
00000061  666800000000      push dword 0x000000067  66FF7608          push dword [bp+0x8]  /* start sectors for read */
0000006B  680000            push word 0x0
0000006E  68007C            push word 0x7c00  /* buffer address */
00000071  680100            push word 0x1
00000074  681000            push word 0x10  /* 使⽤ 16 bytes 的结构,即不需要 64 位 buffer address */
00000077  B442              mov ah,0x42
00000079  8A5600            mov dl,[bp+0x0]      /* hard disk = 0x80 */
0000007C  8BF4              mov si,sp            /* buffer_packet 的 address(ds:si) */
0000007E  CD13              int 0x13
2、 int 0x13 获取磁盘参数(ah = 0x48)
获取的磁盘参数保存在提供的 buffer ⾥,这些参数包括:
★ 磁盘的 cylinders 数量
★ 磁盘的 heads 数量
电冰箱保护器>党的十五大报告全文★ 每道的 sectors 数
萝卜硫素
★ 磁盘总共有多少扇区
★ 每个扇区有多少字节
这个 buffer 结构,⽤ c 描述如下:
struct driver_parameters
{
short buf_size;              /* 缓冲区结构的⼤⼩ */
short flags;                /* 标志 */
邓小弟int cylinders;              /* cylinders 数量 */
int heads;                  /* heads 数量 */
int sectors_per_track;      /* 每道的 sectors 数 */
long long sectors;          /* 磁盘总共的 sectors 数 */
short bytes_per_sector;      /* 每个扇区的 bytes 数 */
} buffer;
下⾯是摘⾃ windows 7 的 DBR 中的典型⽤法:
典型的 int 0x13 第 0x48 号功能⽤法:
0000008D  1E                push ds
0000008E  83EC18            sub sp,byte +0x18      /* 预留 0x18 个空间 */ 00000091  681A00            push word 0x1a        /* 写 buffer 的第 1 个 word ,即:buf_size = 0x1a */00000094  B448              mov ah,0x48 00000096  8A160E00        mov dl,[0xe]          /* 驱动器 ID,即:0x80 */ 0000009A  8B
F4              mov si,sp 0000009C  16                push ss 0000009D  1F                pop ds 0000009E  CD13              int 0x13              /* 获取 driver 参数 */

本文发布于:2024-09-21 03:19:12,感谢您对本站的认可!

本文链接:https://www.17tex.com/xueshu/103092.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:磁盘   参数   获取   功能   提供   保存   逻辑   高考
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议