wintoflash 发表于 2020-7-2 15:19:28

boot.sdi 的制作方法

本帖最后由 wintoflash 于 2020-7-2 15:20 编辑

目前网上好像没有 NT6+ boot.sdi 的制作教程,花了半天的时间研究了一下。
1GB 的 boot.sdi 下载:

SDI 文件结构:

文件头 (至少 4096 字节)
struct SDI_header
{
char magic; // '$SDI'
char version; // '0001'
uint64_t MDBtype; // 0x00
uint64_t BootCodeOffset; // 0x00
uint64_t BootCodeSize; // 0x00
uint64_t VendorID; // 0x00
uint64_t DeviceID; // 0x00
guid_t DeviceModel;// 0x00
uint64_t DeviceRole; // 0x00
uint64_t Reserved1; // 0x00
guid_t RuntimeGUID; // 0x00
uint64_t RuntimeOEMrev; // 0x00
uint64_t Reserved2; // 0x00
uint64_t PageAlignment; // BLOB alignment value in pages
uint64_t Reserved3; // 0x00
uint64_t Checksum;
} __attribute__ ((packed));
对于 NT6+ 的 boot.sdi,除了 checksum 和 PageAlignment ,其他的全部填零。
官方的 boot.sdi,PageAlignment 为 2 (8192),校验码为 0x39,

300KB 的 boot.sdi,PageAlignment 为 1 (4096),校验码为 0x3a,


BLOB 目录,位于 0x400 处
struct SDI_TOC_record
{
char BLOBtype; // 3-4 bytes UPPERCASE value, 0-padded
uint64_t Attr; //0x00
uint64_t Offset;
uint64_t Size;
uint64_t BaseAddress;
uint64_t Reserved;
} __attribute__ ((packed));
每条记录的长度均为 0x40,以一个空的记录作为目录的结尾。
BLOBtype 为 blob 的类型,例如 PART,WIM。
Offset 是 blob 在 boot.sdi 中的偏移。
Size 是 blob 的大小除以 256,注意对齐。
对于 PART 类型的 blob,BaseAddress 记录了分区镜像的文件系统 ID,NTFS 为 0x07。
在 boot.sdi 中,一共只有两个 blob 条目。
第一个是 ntfs 镜像,

第二个是 wim 镜像,

WIM镜像的 Offset 填 boot.sdi 的总长度,Size 填 0。

接下来是 ntfs 镜像,如果 sdi 文件的长度不满足对齐要求,必须填充一些空数据。
dd if=/dev/zero of=sdi.img bs=1M count=1024
mkfs.ntfs -F sdi.img
最后依次合并如下文件,按 sdi.header, sdi.toc, sdi.img, sdi.end 的顺序,生成 boot.sdi
cat sdi.header sdi.toc sdi.img sdi.end > boot.sdi


参考:
https://skolk.livejournal.com/1591.html
https://skolk.livejournal.com/1320.html


朱玛12345678 发表于 2020-7-2 15:41:51

前排支持 {:1_186:}

2012andyle113 发表于 2020-7-2 16:31:06

本帖最后由 2012andyle113 于 2020-7-2 16:35 编辑

技术党,不明觉厉,还以为什么情况,1G的boot.sdi,原来是做了个1G大小的文件


plusv 发表于 2020-7-2 16:49:24

SDI 怪格式,
收入侦测文件格式.

lianmeng 发表于 2020-7-2 21:05:37

感谢分享

红毛樱木 发表于 2020-7-2 21:54:49

x86启动的WIM文件有大小限制,是不是也是BOOT.SDI判断的?还有X盘最大容量x86也只是1G,和这个有关没?

wplin 发表于 2020-7-3 00:11:05

感謝大大學習中

2011ohte 发表于 2020-7-3 08:17:20

希望此信息足以编写您自己的sdimgr开源版本

wintoflash 发表于 2020-7-3 10:40:58

红毛樱木 发表于 2020-7-2 21:54
x86启动的WIM文件有大小限制,是不是也是BOOT.SDI判断的?还有X盘最大容量x86也只是1G,和这个有关没?

没看出来 X盘容量和 boot.sdi 的大小有明显关系。

friend8179 发表于 2020-7-3 10:51:40

做这么大一个是啥用途?

wintoflash 发表于 2020-7-3 11:12:44

friend8179 发表于 2020-7-3 10:51
做这么大一个是啥用途?

做实验
http://bbs.wuyou.net/forum.php?mod=viewthread&tid=421202&extra=

MC阿虎 发表于 2020-7-3 13:25:59

感谢分享

wintoflash 发表于 2020-7-4 15:35:27

13978951985 发表于 2020-7-4 14:48
谢谢分享

机器人刷帖?

黑中见白 发表于 2020-7-4 18:51:11

干啥用的,
弄pe启动?

wintoflash1 发表于 2020-7-5 11:21:36

test

caige518 发表于 2020-10-12 19:20:33

很好,所交

a888 发表于 2020-10-26 11:16:00

前排支持

201287zr 发表于 2020-11-9 17:53:39

大神能不能具体介绍一下这个文件的用法,用到什么地方,有什么特别的地方,注意的地方等,联合Grub4dos一起用怎么使用等等。期待大神的帖子。

mrzhonghb 发表于 2020-11-9 18:23:58

感谢分享

NOS 发表于 2020-12-1 12:37:35

好好学习

wjia 发表于 2020-12-8 20:05:27

那我就再回一贴的了滴了滴了滴了。。。

Acronis2014 发表于 2021-1-23 14:11:04

正在找呢,前排支持。

18958925900 发表于 2021-1-31 16:14:21

一直对这个不了解,涨姿势了。

sanshen3 发表于 2021-2-6 17:36:39

学习一下,了解{:1_193:}

童心学艺 发表于 2021-2-12 08:59:15


感谢分享

wom087 发表于 2021-2-24 22:27:05

谢谢分享

JC_2019 发表于 2021-2-28 22:19:20


谢谢分享

金神主 发表于 2021-5-15 11:09:28

学习了,感谢

cbmkj 发表于 2021-5-26 21:55:02

楼主辛苦

doable 发表于 2021-7-7 17:08:45

很厉害的分析
页: [1] 2
查看完整版本: boot.sdi 的制作方法