当前位置: 首页 > news >正文

setupldr!SlGetSectionKeyIndex函数分析

setupldr!SlGetSectionKeyIndex函数分析

//
// Load the HAL.
//

strcpy(HalDirectoryPath, BootPath);

。。。
} else {
//
// Note that on x86, the HAL may be on floppy #1 or floppy #2
//
strcat(HalDirectoryPath,HalName);
SlGetDisk(HalName);
BlOutputLoadMessage(BootDevice, HalDirectoryPath, BlFindMessage(SL_HAL_NAME));

#ifdef i386
retryhal:
#endif
Status = BlLoadImage(BootDeviceId,
LoaderHalCode,
HalDirectoryPath,
TARGET_IMAGE,
&HalBase);

kd> kc 5
#
00 setupldr!SlGetDisk
01 setupldr!SlInit
02 setupldr!BlStartup
03 setupldr!NtProcessStartup
WARNING: Frame IP not in any known module. Following frames may be wrong.
04 0x0
kd> dv
Filename = 0x8023eedd "halaacpi.dll"
FileId = 8
DiskName = 0x8023eedd "halaacpi.dll"
PlatformSpecificSection = char [128] "???"

[SourceDisksFiles.x86]


halaacpi.dll = 1,,,,,,3_,2,3,,,1,2


#if defined(ELTORITO)
if (ElToritoCDBoot) {
// for Cd boot we use the setup media path instead of a boot-media-specific path
DiskNumber = SlGetSectionKeyIndex(InfFile,PlatformSpecificSection,Filename,0);
}

kd> t
eax=00060b30 ebx=00000000 ecx=00000000 edx=00324588 esi=0032458d edi=00060b45
eip=0031b9a8 esp=00060b10 ebp=00060bb4 iopl=0 nv up di pl nz na po nc
cs=0008 ss=0010 ds=0010 es=0010 fs=0030 gs=0000 efl=00000002
setupldr!SlGetSectionKeyIndex:
0031b9a8 55 push ebp
kd> dv
INFHandle = 0x8007b0d8
SectionName = 0x00060b30 "SourceDisksFiles.x86"
Key = 0x8023eedd "halaacpi.dll"
ValueIndex = 0

if((pSection = SearchSectionByName(
(PINF)INFHandle,
SectionName
))
== (PSECTION)NULL)
return((PCHAR)NULL);

kd> p
eax=80275d90 ebx=00000000 ecx=00060b30 edx=00324588 esi=0032458d edi=00060b45
eip=0031b9b8 esp=00060b0c ebp=00060b0c iopl=0 nv up di ng nz na pe nc
cs=0008 ss=0010 ds=0010 es=0010 fs=0030 gs=0000 efl=00000086
setupldr!SlGetSectionKeyIndex+0x10:
0031b9b8 741c je setupldr!SlGetSectionKeyIndex+0x2e (0031b9d6) [br=0]
kd> dt _SECTION 80275d90
setupldr!_section
+0x000 pNext : 0x80275870 _section
+0x004 pName : 0x80275460 "SourceDisksFiles.x86"
+0x008 pLine : 0x80275da0 _line
kd> dx -r1 ((setupldr!_section *)0x80275870)
((setupldr!_section *)0x80275870) : 0x80275870 [Type: _section *]
[+0x000] pNext : 0x80273dc0 [Type: _section *]
[+0x004] pName : 0x80275297 : "SourceDisksFiles.amd64" [Type: char *]
[+0x008] pLine : 0x80275880 [Type: _line *]


if((pLine = SearchLineInSectionByKey(
pSection,
Key,
NULL
))
== (PLINE)NULL)
return((PCHAR)NULL);

kd> p
eax=80279c90 ebx=00000000 ecx=8023eedd edx=00324588 esi=0032458d edi=00060b45
eip=0031b9c7 esp=00060b0c ebp=00060b0c iopl=0 nv up di ng nz na pe nc
cs=0008 ss=0010 ds=0010 es=0010 fs=0030 gs=0000 efl=00000086
setupldr!SlGetSectionKeyIndex+0x1f:
0031b9c7 740d je setupldr!SlGetSectionKeyIndex+0x2e (0031b9d6) [br=0]
kd> dt _LINE 80279c90
setupldr!_line
+0x000 pNext : 0x80279ce0 _line
+0x004 pName : 0x80279639 "halaacpi.dll"
+0x008 InternalValues : [10] 0x80279646 "1"
+0x030 pFirstExternalValue : 0x80279cc8 _value
kd> dx -r1 (*((setupldr!char * (*)[10])0x80279c98))
(*((setupldr!char * (*)[10])0x80279c98)) [Type: char * [10]]
[0] : 0x80279646 : "1" [Type: char *]
[1] : 0x34354b : "" [Type: char *]
[2] : 0x34354b : "" [Type: char *]
[3] : 0x34354b : "" [Type: char *]
[4] : 0x34354b : "" [Type: char *]
[5] : 0x34354b : "" [Type: char *]
[6] : 0x80279648 : "3_" [Type: char *]
[7] : 0x8027964b : "2" [Type: char *]
[8] : 0x8027964d : "3" [Type: char *]
[9] : 0x34354b : "" [Type: char *]
kd> dx -r1 ((setupldr!_line *)0x80279ce0)
((setupldr!_line *)0x80279ce0) : 0x80279ce0 [Type: _line *]
[+0x000] pNext : 0x80279d30 [Type: _line *]
[+0x004] pName : 0x80279653 : "halacpi.dll" [Type: char *]
[+0x008] InternalValues [Type: char * [10]]
[+0x030] pFirstExternalValue : 0x80279d18 [Type: _value *]


if((pName = SearchValueInLine(
pLine,
ValueIndex
))
== (PCHAR)NULL)
return((PCHAR)NULL);


kd> p
eax=80279646 ebx=00000000 ecx=00000000 edx=0000000a esi=0032458d edi=00060b45
eip=0031b9da esp=00060b0c ebp=00060b0c iopl=0 nv up di ng nz na po nc
cs=0008 ss=0010 ds=0010 es=0010 fs=0030 gs=0000 efl=00000082
setupldr!SlGetSectionKeyIndex+0x32:
0031b9da 50 push eax
kd> db 80279646
80279646 31 00 33 5f 00 32 00 33-00 31 00 32 00 68 61 6c 1.3_.2.3.1.2.hal

http://www.jsqmd.com/news/381178/

相关文章:

  • WuliArt Qwen-Image Turbo动态效果:连续Prompt微调生成风格渐变序列
  • 腾讯混元7B翻译模型实测:Hunyuan-MT Pro效果惊艳展示
  • 5款降AI工具处理速度实测对比:最快的只要3分钟
  • FireRedASR-AED-L自主部署:支持Kubernetes集群化部署,横向扩展千路并发识别
  • Qwen3-ASR-0.6B体验:支持多种音频格式的语音识别
  • 一键生成专业报告:AgentCPM使用全攻略
  • 轧钢加热炉加热能力计算
  • RexUniNLU教程:DeBERTa-v2-chinese-base模型权重加载与热更新方案
  • 大润发购物卡回收教程:简单几步完成兑换! - 团团收购物卡回收
  • YOLO12 WebUI使用技巧:提升检测精度的5个方法
  • 【IEEE出版 | EI检索】2026年信息通信、物联网技术与智慧城市国际学术会议(IITS 2026)
  • 计算机网络原理在Qwen3-ForcedAligner-0.6B分布式部署中的应用
  • 从此告别拖延!降AI率工具 千笔·专业降AI率智能体 VS speedai 专科生专属
  • SPIRAN ART SUMMONER入门指南:从FFX剧情台词中提取祈祷词语义模板
  • 2026儿童液体钙十大品牌实测,液体钙哪个牌子最安全?高吸收无添加蓝帽品牌推荐 - 博客万
  • 综述不会写?9个AI论文平台深度测评,本科生毕业论文写作必备
  • GLM-Image开源模型教程:HuggingFace Transformers接口直连调用示例
  • 用DeepSeek和Claude写论文被查出AI率?降到安全线的攻略在这
  • 什么洗发水能真正防脱增发?实测口碑最好的十款防脱洗发水,国货榜首天然草本,密发固发双在线 - 博客万
  • 对比一圈后! 更贴合专科生的降AI率平台,千笔·降AIGC助手 VS 云笔AI
  • QwQ-32B文本生成体验:一键安装即刻创作
  • 评测育发液排行榜前十名,评测育发液哪个牌子好?脱发党实测top1不踩雷 - 博客万
  • 精量排种控制,输入,速度,株距,处理,计算排种脉冲频率,输出,电机控制信号。
  • SikuliX深度学习引擎:重新定义视觉回归测试的精准边界
  • 2026十大维生素d3品牌,维生素d3哪个牌子最靠谱?FDA认证安全高效 - 博客万
  • 建议收藏|千笔ai写作,本科生论文写作神器
  • 认真准备了晋升答辩结果没通过,后来才发现晋升名单早定好了,答辩只是走个过场,n能否晋升还是看领导有没有帮你争取,而不是靠实力说话
  • 别再瞎找了!10个AI论文网站测评:本科生毕业论文+科研写作必备工具推荐
  • VLA架构细节分析 - 实践
  • 杨建允基本介绍、贡献成就及行业影响 - 博客万