首页
社区
课程
招聘
[原创] 浅谈在 Hyper-V 第二代虚拟机启动 Windows 7 Service Pack 1 的事务
发表于: 2024-12-9 21:26 4320

[原创] 浅谈在 Hyper-V 第二代虚拟机启动 Windows 7 Service Pack 1 的事务

2024-12-9 21:26
4320

注:本文已收录进毛利的 GitHub 技术文库,左转 https://github.com/MouriNaruto/MouriDocs/blob/main/docs/21/ReadMe.mdhttps://github.com/MouriNaruto/MouriDocs/blob/main/docs/21/ReadMe.zh-CN.md 以阅读英文版和中文版

注:本文中文版除了被毛利的 GitHub 技术文库收录以外,目前仅在看雪论坛发表,由于之前在看雪论坛注册后发表了第一个帖子就被设置为精品,由于我有些想保持 100% 精品率,于是导致最近这些年都不知道去看雪水什么样的话题比较好,直到最近我搞定了 Hyper-V 第二代虚拟机启动 Windows 7 Service Pack 1 的事务,感觉有了一些水贴的勇气

作为一个热衷于尽可能使用像 C/C++ 这样的高级语言编写裸机应用的人,我非常喜欢 Hyper-V 第二代虚拟机的设计,因为这是经过了时间考验的流行的半虚拟化平台之一且看起来这家伙拥有目前最激进的半虚拟化设计:

这样的设计对于我来说是极好的,我只需要编写仅支持 Hyper-V 第二代虚拟机的 UEFI 应用程序作为原型就足够我向他人展示我的一些想法了。这可以帮助我避免适配需要编写大量汇编代码的特定硬件。同时,我喜欢这样的轻量级设计 (笑)

注:Windows 自带的 Hyper-V 客户端对我来说很不好用,这使得我在是否选择 Hyper-V 作为我的裸机应用原型开发平台而陷入了犹豫。直到有一天 Ben (Bingxing) Wang 告诉我你可以使用当时还算新鲜出炉的 Hyper-V Host Compute System API 去实现一个第三方的 Hyper-V 客户端,尤其是这家伙的无状态设计会很合你的胃口,并且你可以通过 ILSpy 去学习如何使用这家伙。我用了数个月写了一个这样的家伙并且开源到了 GitHub。如果一些朋友需要使用我编写的基于 Hyper-V Host Compute System API 的第三方客户端,可以参考 NanaBox。我希望该项目能帮助到和我有类似感受的朋友们。

以 Hyper-V 第二代虚拟机的设计,支持在 Hyper-V 第二代虚拟机启动的最低版本的 Windows 操作系统是 64 位的 Windows 8 和 Windows Server 2012。并且微软在 Generation 2 FAQ 指出:

Q: Why are 64-bit versions of Windows Server 2008 R2 and Windows 7 not supported as generation 2 guest operating systems?

A: Although Windows Server 2008 R2 and Windows 7 support UEFI, they depend on a programmable interrupt controller (PIC), which is not present in generation 2 virtual machine hardware.

翻译一下中文就是:

Q: 为什么 64 位的 Windows Server 2008 R2 和 Windows 7 无法在 Hyper-V 第二代虚拟机启动?

A: 虽然 Windows Server 2008 R2 和 Windows 7 支持 UEFI,但它们需要依赖 Hyper-V 第二代虚拟机上不存在的传统可编程中断控制器 (PIC)。

但是这样的理由并不足以说服我。我大约在半年前开始做一些实验去了解其真正的缘由。最终,我意外地在 Hyper-V 第二代虚拟机上成功启动了 Windows 7 Service Pack 1。在下面的章节中,我将分享我是如何做到的。

警告:我没有编写 Windows 内核驱动程序的经验,因为我买不起 Windows 驱动程序需要的签名证书。也许我在本文中提到的方法过于狂野,希望大家见谅。

在开始之前,我们需要了解一些基本常识:

首先,我们需要支持实际上支持 Hyper-V 第二代虚拟机的最低的 Windows 客户机版本。这能帮助我们了解微软那群人是如何进行适配的。

这件事其实非常简单,毕竟我们只需要测试并找出哪个是支持在 Hyper-V 第二代虚拟机上启动的最老 Windows 版本。

众所周知,64 位 Windows 8 和 Windows Server 2012 是支持在 Hyper-V 第二代虚拟机上启动的最老版本。于是我们只需要测试 Windows 8 - BetaWikiWindows Server 2012 - BetaWiki 中提到的 Windows 版本。

我们可以把这些 Windows 版本分类成以下类别:

7990.0.fbl_core1_hyp_dev.110425-1705

在目前来看,我发现等级 3 的最小 Windows 版本是 Build 7990 (fbl_core1_hyp_dev)、Build 8027 (fbl_fun_perf) 或者 Build 8028 (winmain)。我发现的等级 2 的最小 Windows 版本是 Build 8002 (fbl_grfx_dev1)。

为了适配 Hyper-V 第二代虚拟机,我们需要了解 Hyper-V 客户机接口定义。我已经将相关信息整理成开源项目 Mile.HyperV 并且其提供了我从哪里获取相关定义的参考资料文档。

由于 Windows 不开源,于是我们需要从 ReactOS 中学习关于 hal 和 ntoskrnl 的事务。即使 ReactOS 的 x64 hal 实现哪怕对于学习来说都非常原始。

但是为了感谢该项目帮助了我学习一些基本常识,我也尝试为 ReactOS 添加了 Hyper-V 第二代虚拟机的支持。但由于 ReactOS 的实现过分原始且缺少一大堆内容,即使使用 ReactOS Longhorn 实验性分支,目前仅能亮机且没有任何的 VMBus 设备支持。当然,The_DarkFireTimo Kreuzer 在这里帮了我不少。

对于一些方便阅读 ReactOS 源代码的朋友,可以去 https://github.com/MouriNaruto/reactos/tree/remilia-hyperv-main-longhorn 了解我的魔改分支的内部实现。

由于 Hyper-V 第二代虚拟机的虚拟键盘是一个 VMBus 设备,为了体面的用户体验,我们需要使用 6.2.9200.16385 及之后版本的 Hyper-V 集成服务。于是 6.2.9200.16385 版本的 Hyper-V 集成服务的最低要求是我们选择能够进行额外适配的 Windows 版本的基准线。

让我们在了解一些基本常识之后开始我们的狂野之旅吧:

当我们完成了前置条件之后,我们需要挂载虚拟机的虚拟磁盘文件到你的宿主机用于创建UEFI 启动所需的启动文件。

假定你挂载后的 Windows 分区为 "G:" 和 EFI 系统分区为 "F:"。

首先我们需要创建 UEFI 启动所需的启动文件:

然后我们对 Windows 启动管理器启用一些调试设置:

我同时建议你将启动管理器的超时设置为 30 秒:

如果你这时启动你的虚拟机,你会发现你的 WinDbg 命令窗口中在提示分离 Windows 启动调试器后没有任何输出。并且你会发现虚拟机实例进程的 CPU 使用率很高。有些人会知道这是虚拟机内运行的操作系统内核陷入了死循环。

这里是一个使用 64 位 Windows Vista Service Pack 2 作为示例的截图:

VistaSP2_UnableToAttachKernelDebugger

其实我也是偶然发现是蓝屏导致的。我当时死马当活马医,尝试以添加 0xCC (int 3 指令的操作码) 以调试导致死锁的原因,我发现当我将该操作码添加到 ntoskrnl.exe 的 KeBugCheckEx 函数的开头时,虚拟机会发生三重故障并自动重启。

所以,修复这个问题是很容易的。我们可以将 BugCheck 错误消息报告给 Hyper-V,然后我们可以从 Windows 事件查看器中获取错误消息。

根据 Hyper-V 的 TLFS 规范提到的客户机崩溃报告相关接口,我们可以将以下 C 代码作为 KeBugCheckEx 函数的实现:

这是上面 C 代码的汇编实现:

使用一些工具将上面的汇编转换为机器码:

当我们使用类似 IDA Pro 这样的工具将 KeBugCheckEx 函数在 ntoskrnl.exe 中的实现替换为上述机器码后,使用类似 PE Tools 这样的工具重新计算 ntoskrnl.exe 的校验值,然后替换原始的 ntoskrnl.exe。我们可以从 Windows 事件查看器中获取错误消息。

根据上述错误信息,我们可以在微软文档中进行搜索,在 Bug Check 0x79: MISMATCHED_HAL 中,你会知道这个问题是 hal.dll 导致的,我们需要对其进行一些二进制修补事务去解决这个问题。

经过一些分析,我发现问题是由 hal.dll 中的 HalpInitMpInfo 函数中的以下伪代码引起的:

根据 从 Hyper-V 第二代虚拟机转储的 APIC 表 的描述,我们知道这只是检查 APIC 表中的标志。HAL 会在找不到 PC-AT 兼容性位时调用 KeBugCheckEx 函数。

我们可以通过 jmp 指令来绕过这个逻辑来修补这个问题。

例如,原始的代码片段是:

我们只需要将 "jnz short loc_7FF3C250CEA" 修改为 "jmp short loc_7FF3C250CEA"。

当然,使用类似的方法去修补 hal.dll 后,我们最终可以在 WinDbg 命令窗口中看到 Windows 内核调试器消息。

这里是一个使用 64 位 Windows Vista Service Pack 2 作为示例的截图:

VistaSP2_KernelDebuggerFixed

在现阶段,你会发现你的虚拟机陷入了死循环。

你通过 WinDbg 进行一些分析后会发现是由 hal.dll 中的 HalpScaleTimers 函数导致的。

我们需要修补 hal.dll 中的 HalpScaleTimers 函数以使其可用。

例如,原始的代码片段是:

首先我们需要做出以下更改:

然后你需要重写以下代码片段:

到这样的代码片段:

当然,使用类似的方法去修补 hal.dll 后,我们最终会发现我们成功通过了 HalpScaleTimers 阶段,但是我们会在 InitBootProcessor 函数调用 MmInitSystem 函数后看到 BugCheck 错误。

这里是一个使用 64 位 Windows Vista Service Pack 2 作为示例的截图:

VistaSP2_PassHalInitSystem

虽然 MmInitSystem 函数很复杂,但幸运的是我们有一个全局变量 MiInitFailure 用于了解 MmInitSystem 函数的失败原因。

通过 WinDbg 内存窗口,我们可以知道 MiInitFailure 的值为 14。

这里是一个使用 64 位 Windows Vista Service Pack 2 作为示例的截图:

VistaSP2_MiInitFailure

对于是谁设置了 MiInitFailure 为 14,我们可以在 MmInitNucleus 函数中找到这样的伪代码:

通过 WinDbg 内存窗口,我们可以知道 MmHighestPossiblePhysicalPage 的值比我们设置的虚拟机内存要大得多。

这里是一个使用 64 位 Windows Vista Service Pack 2 作为示例的截图:

VistaSP2_MmHighestPossiblePhysicalPage

对于是谁设置了 MmHighestPossiblePhysicalPage,我们可以在 MiFindLargestLoaderDescriptor 函数中找到这样的伪代码:

通过 WinDbg 内存窗口,我们可以知道 MmDynamicPfn 是导致问题的原因。

这里是一个使用 64 位 Windows Vista Service Pack 2 作为示例的截图:

VistaSP2_MmDynamicPfn

对于是谁设置了 MmDynamicPfn,我们可以在 MiInitializeBootDefaults 函数中找到这样的伪代码:

哦,看起来是 ntoskrnl.exe 中的动态分区策略导致了 MmInitSystem 函数失败。

这里是一个使用 64 位 Windows Vista Service Pack 2 作为示例的截图:

VistaSP2_MmDynamicMemorySupported

将 MmDynamicMemorySupported 设置为 0 并不难,只需要对 ntoskrnl.exe 中的 InitializeDynamicPartitioningPolicy 函数进行一些二进制修补事务即可。

例如,原始的代码片段是:

将 "js short loc_1404B41CB" 修改为 "jmp short loc_1404B41CB"。

我们同时也应该将 "js short loc_1404B4152" 修改为 "jmp short loc_1404B4152"。

当然,使用类似的方法去修补 ntoskrnl.exe 后,你可以从 Windows 事件查看器中获取到 ACPI BugCheck 错误消息。

但如果你尝试在 Hyper-V 第二代虚拟机上启动 Windows Vista Service Pack 2,你会遇到死锁。这是 HalInitSystem 函数中的以下伪代码片段导致的:

例如,原始的代码片段是:

将 "mov eax, 2" 修改为 "mov eax, 1"。

当然,使用类似的方法去修补 hal.dll 后,你将会看到和在 Hyper-V 第二代虚拟机启动 Windows 7 Service Pack 1 时相同的结果。

根据上述错误信息,我们可以在微软文档中进行搜索,在 Bug Check 0xA5: ACPI_BIOS_ERROR 中,你会知道这个问题是 acpi.sys 导致的,我们需要对其进行一些二进制修补事务去解决这个问题。

经过一些分析,我发现这个问题是由 acpi.sys 中的 ACPIEnableEnterACPIMode 函数的以下伪代码导致的:

我们知道 Hyper-V 第二代虚拟机是现代虚拟机,所以,我猜测 Hyper-V 第二代虚拟机中的 ACPI 全程启用并无法禁用。所以,我们只需要绕过这个逻辑。

例如,原始的代码片段是:

将下面的代码片段:

修改为:

当然,使用类似的方法去修补 acpi.sys 后,你可以从 Windows 事件查看器中获取到 BugCheck 错误消息。

根据上述错误信息,我们可以在微软文档中进行搜索,在 Bug check 0x7B: INACCESSIBLE_BOOT_DEVICE 中,我们将会知道只要能让内核找到启动设备就可以达成我们的目标了。

实际上,我们需要挂载 SYSTEM 注册表单元以修改一些注册表键:

搞定这些后,我们就可以成功地进入桌面了。

但是对于 Windows Vista Service Pack 2 和 Windows 7 Service Pack 1 的第一次启动,我们将看不到桌面,因为 Hyper-V 合成视频驱动程序没有加载。

所以,我建议在开始这次狂野之旅之前为你要适配的操作系统安装 NanaRun 中的 SynthRdp 工具,这样你就有机会使用 Hyper-V 增强会话模式了。

这是我最终的截图:

VistaSP2_Final

Win7SP1_Final

本文最终得到的原因相对于微软的 Generation 2 FAQ 中提到的还是有些复杂和不同:

原本我使用 Windows Vista Service Pack 2 作为本文的示例,只是为了验证本文中提到的步骤。但看起来 Windows Vista Service Pack 2 也可以用类似的修补方式在 Hyper-V 第二代虚拟机上成功启动。我认为这是本文的一个很好的例子。

对于 Windows XP x64 Edition Service Pack 2,我在结合 Windows Server 2008 Beta 3 Build 6001.16497 的 bootmgr 和 winload 的基础上使用了一些类似的步骤使得在 Hyper-V 第二代虚拟机上也可以使用内核调试器。但是存在导致虚拟机陷入死循环的一些问题,我目前还不知道原因。

但这些例子只是为了写这篇文章来证明我做过的事情。在我看来,如果你想使用本文中提到的方法来处理你的日常事务,至少你需要基于 EfiGuard 制作一个补丁程序。

对于一些想知道我为什么写这篇文章的人,我只是想知道为什么罢了。同时,这也可以帮助我避免使用 Windows 内置的 Hyper-V 客户端,因为它真的很难用。我终于可以使用我自己写的 Hyper-V 客户端来运行一些旧版 Windows 以测试我一些开源项目。

希望这篇文章对你有所帮助。

毛利

级别 行为
级别 0 启动失败,内核死锁
级别 1 启动失败,ACPI 报错
级别 2 需要替换 bootmgr 才能启动
级别 3 无需魔改即可启动
bcdboot G:\Windows /s F: /f UEFI
bcdboot G:\Windows /s F: /f UEFI
bcdedit /store F:\EFI\Microsoft\Boot\BCD /bootdebug {default} on
bcdedit /store F:\EFI\Microsoft\Boot\BCD /debug {default} on
bcdedit /store F:\EFI\Microsoft\Boot\BCD /set {default} sos on
bcdedit /store F:\EFI\Microsoft\Boot\BCD /dbgsettings SERIAL DEBUGPORT:1 BAUDRATE:115200 /start ACTIVE
bcdedit /store F:\EFI\Microsoft\Boot\BCD /bootdebug {default} on
bcdedit /store F:\EFI\Microsoft\Boot\BCD /debug {default} on
bcdedit /store F:\EFI\Microsoft\Boot\BCD /set {default} sos on
bcdedit /store F:\EFI\Microsoft\Boot\BCD /dbgsettings SERIAL DEBUGPORT:1 BAUDRATE:115200 /start ACTIVE
bcdedit /store F:\EFI\Microsoft\Boot\BCD /timeout 30
bcdedit /store F:\EFI\Microsoft\Boot\BCD /timeout 30
DECLSPEC_NORETURN void WINAPI KeBugCheckEx(
    ULONG BugCheckCode,
    ULONG_PTR BugCheckParameter1,
    ULONG_PTR BugCheckParameter2,
    ULONG_PTR BugCheckParameter3,
    ULONG_PTR BugCheckParameter4)
{
    // HV_X64_MSR_CRASH_P0
    __writemsr(0x40000100, BugCheckCode);
    // HV_X64_MSR_CRASH_P1
    __writemsr(0x40000101, BugCheckParameter1);
    // HV_X64_MSR_CRASH_P2
    __writemsr(0x40000102, BugCheckParameter2);
    // HV_X64_MSR_CRASH_P3
    __writemsr(0x40000103, BugCheckParameter3);
    // HV_X64_MSR_CRASH_P4
    __writemsr(0x40000104, BugCheckParameter4);
    // HV_X64_MSR_CRASH_CTL with only setting CrashNotify to 1
    __writemsr(0x40000105, 0x8000000000000000);
    _disable();
    __halt();
    return;
}
DECLSPEC_NORETURN void WINAPI KeBugCheckEx(
    ULONG BugCheckCode,
    ULONG_PTR BugCheckParameter1,
    ULONG_PTR BugCheckParameter2,
    ULONG_PTR BugCheckParameter3,
    ULONG_PTR BugCheckParameter4)
{
    // HV_X64_MSR_CRASH_P0
    __writemsr(0x40000100, BugCheckCode);
    // HV_X64_MSR_CRASH_P1
    __writemsr(0x40000101, BugCheckParameter1);
    // HV_X64_MSR_CRASH_P2
    __writemsr(0x40000102, BugCheckParameter2);
    // HV_X64_MSR_CRASH_P3
    __writemsr(0x40000103, BugCheckParameter3);
    // HV_X64_MSR_CRASH_P4
    __writemsr(0x40000104, BugCheckParameter4);
    // HV_X64_MSR_CRASH_CTL with only setting CrashNotify to 1
    __writemsr(0x40000105, 0x8000000000000000);
    _disable();
    __halt();
    return;
}
mov r10, rdx
mov eax, ecx
mov edx, ecx
mov ecx, 40000100h
shr rdx, 20h
wrmsr
 
mov rdx, r10
mov rax, r10
shr rdx, 20h
mov ecx, 40000101h
wrmsr
 
mov rdx, r8
mov rax, r8
shr rdx, 20h
mov ecx, 40000102h
wrmsr
 
mov rdx, r9
mov rax, r9
shr rdx, 20h
mov ecx, 40000103h
wrmsr
 
mov rdx, [rsp+arg_20]
mov ecx, 40000104h
mov rax, rdx
shr rdx, 20h
wrmsr
 
xor eax, eax
mov edx, 80000000h
mov ecx, 40000105h
wrmsr
 
cli
hlt
 
retn 0
mov r10, rdx
mov eax, ecx
mov edx, ecx
mov ecx, 40000100h
shr rdx, 20h
wrmsr
 
mov rdx, r10
mov rax, r10
shr rdx, 20h
mov ecx, 40000101h
wrmsr
 
mov rdx, r8
mov rax, r8
shr rdx, 20h
mov ecx, 40000102h
wrmsr
 
mov rdx, r9
mov rax, r9
shr rdx, 20h
mov ecx, 40000103h
wrmsr
 
mov rdx, [rsp+arg_20]
mov ecx, 40000104h
mov rax, rdx
shr rdx, 20h
wrmsr
 
xor eax, eax
mov edx, 80000000h
mov ecx, 40000105h
wrmsr
 
cli
hlt
 
retn 0
49 89 D2
89 C8
89 CA
B9 00 01 00 40
48 C1 EA 20
0F 30
 
4C 89 D2
4C 89 D0
48 C1 EA 20
B9 01 01 00 40
0F 30
 
4C 89 C2
4C 89 C0
48 C1 EA 20
B9 02 01 00 40
0F 30
 
4C 89 CA
4C 89 C8
48 C1 EA 20
B9 03 01 00 40
0F 30
 
48 8B 54 24 28
B9 04 01 00 40
48 89 D0
48 C1 EA 20
0F 30
 
31 C0
BA 00 00 00 80
B9 05 01 00 40
0F 30
 
FA
F4
 
C2 00 00
49 89 D2
89 C8
89 CA
B9 00 01 00 40
48 C1 EA 20
0F 30
 
4C 89 D2
4C 89 D0
48 C1 EA 20
B9 01 01 00 40
0F 30
 
4C 89 C2
4C 89 C0
48 C1 EA 20
B9 02 01 00 40
0F 30
 
4C 89 CA
4C 89 C8
48 C1 EA 20
B9 03 01 00 40
0F 30
 
48 8B 54 24 28
B9 04 01 00 40
48 89 D0
48 C1 EA 20
0F 30
 
31 C0
BA 00 00 00 80
B9 05 01 00 40
0F 30
 
FA
F4
 
C2 00 00
<Event xmlns="http://schemas.microsoft.com/win/2004/08/events/event">
  <System>
    <Provider Name="Microsoft-Windows-Hyper-V-Worker" Guid="{51ddfa29-d5c8-4803-be4b-2ecb715570fe}" />
    <EventID>18590</EventID>
    <Version>0</Version>
    <Level>1</Level>
    <Task>0</Task>
    <Opcode>0</Opcode>
    <Keywords>0x8000000000000000</Keywords>
    <TimeCreated SystemTime="2024-12-09T11:31:23.2356205Z" />
    <EventRecordID>35726</EventRecordID>
    <Correlation />
    <Execution ProcessID="1268" ThreadID="3476" />
    <Channel>Microsoft-Windows-Hyper-V-Worker-Admin</Channel>
    <Computer>DESKTOP-OLUNT6J</Computer>
    <Security UserID="S-1-5-83-1-3655396106-1351506743-3915871121-3476744365" />
  </System>
  <UserData>
    <VmlEventLog xmlns="http://www.microsoft.com/Windows/Virtualization/Events">
      <VmName>Virtual Machine</VmName>
      <VmId>D9E0EB0A-5B37-508E-9173-67E9ADE83ACF</VmId>
      <VmErrorCode0>0x79</VmErrorCode0>
      <VmErrorCode1>0x6</VmErrorCode1>
      <VmErrorCode2>0x0</VmErrorCode2>
      <VmErrorCode3>0x0</VmErrorCode3>
      <VmErrorCode4>0x0</VmErrorCode4>
      <VmErrorMessage>
      </VmErrorMessage>
    </VmlEventLog>
  </UserData>
</Event>
<Event xmlns="http://schemas.microsoft.com/win/2004/08/events/event">
  <System>
    <Provider Name="Microsoft-Windows-Hyper-V-Worker" Guid="{51ddfa29-d5c8-4803-be4b-2ecb715570fe}" />
    <EventID>18590</EventID>
    <Version>0</Version>
    <Level>1</Level>
    <Task>0</Task>
    <Opcode>0</Opcode>
    <Keywords>0x8000000000000000</Keywords>
    <TimeCreated SystemTime="2024-12-09T11:31:23.2356205Z" />
    <EventRecordID>35726</EventRecordID>
    <Correlation />
    <Execution ProcessID="1268" ThreadID="3476" />
    <Channel>Microsoft-Windows-Hyper-V-Worker-Admin</Channel>
    <Computer>DESKTOP-OLUNT6J</Computer>
    <Security UserID="S-1-5-83-1-3655396106-1351506743-3915871121-3476744365" />
  </System>
  <UserData>
    <VmlEventLog xmlns="http://www.microsoft.com/Windows/Virtualization/Events">
      <VmName>Virtual Machine</VmName>
      <VmId>D9E0EB0A-5B37-508E-9173-67E9ADE83ACF</VmId>
      <VmErrorCode0>0x79</VmErrorCode0>
      <VmErrorCode1>0x6</VmErrorCode1>
      <VmErrorCode2>0x0</VmErrorCode2>
      <VmErrorCode3>0x0</VmErrorCode3>
      <VmErrorCode4>0x0</VmErrorCode4>
      <VmErrorMessage>
      </VmErrorMessage>
    </VmlEventLog>
  </UserData>
</Event>
if ( (*(_BYTE *)(HalpApicTable + 40) & 1) == 0 )
    KeBugCheckEx(0x79u, 6ui64, 0i64, 0i64, 0i64);
if ( (*(_BYTE *)(HalpApicTable + 40) & 1) == 0 )
    KeBugCheckEx(0x79u, 6ui64, 0i64, 0i64, 0i64);
PAGELK:000007FF3C250CC2 33 FF                                   xor     edi, edi
PAGELK:000007FF3C250CC4 41 F6 44 24 28 01                       test    byte ptr [r12+28h], 1
PAGELK:000007FF3C250CCA 4D 8B F8                                mov     r15, r8
PAGELK:000007FF3C250CCD 44 8B F2                                mov     r14d, edx
PAGELK:000007FF3C250CD0 75 18                                   jnz     short loc_7FF3C250CEA
PAGELK:000007FF3C250CD2 8D 57 06                                lea     edx, [rdi+6]    ; BugCheckParameter1
PAGELK:000007FF3C250CD5 8D 4F 79                                lea     ecx, [rdi+79h]  ; BugCheckCode
PAGELK:000007FF3C250CD8 45 33 C9                                xor     r9d, r9d        ; BugCheckParameter3
PAGELK:000007FF3C250CDB 45 33 C0                                xor     r8d, r8d        ; BugCheckParameter2
PAGELK:000007FF3C250CDE 48 89 7C 24 20                          mov     [rsp+68h+BugCheckParameter4], rdi ; BugCheckParameter4
PAGELK:000007FF3C250CE3 FF 15 1F 88 FE FF                       call    cs:__imp_KeBugCheckEx
PAGELK:000007FF3C250CE3                         ; ---------------------------------------------------------------------------
PAGELK:000007FF3C250CE9 CC                                      align 2
PAGELK:000007FF3C250CEA
PAGELK:000007FF3C250CEA                         loc_7FF3C250CEA:                        ; CODE XREF: HalpInitMpInfo+38↑j
PAGELK:000007FF3C250CEA 3B D7                                   cmp     edx, edi
PAGELK:000007FF3C250CEC 0F 85 75 02 00 00                       jnz     loc_7FF3C250F67
PAGELK:000007FF3C250CF2 48 39 3D 8F 65 FF FF                    cmp     cs:HalpProcLocalApicTable, rdi
PAGELK:000007FF3C250CF9 0F 85 68 02 00 00                       jnz     loc_7FF3C250F67
PAGELK:000007FF3C250CFF 45 8B 44 24 04                          mov     r8d, [r12+4]
PAGELK:000007FF3C250D04 49 8D 54 24 2C                          lea     rdx, [r12+2Ch]
PAGELK:000007FF3C250D09 44 8B CF                                mov     r9d, edi
PAGELK:000007FF3C250D0C 44 8B EF                                mov     r13d, edi
PAGELK:000007FF3C250D0F 8B F7                                   mov     esi, edi
PAGELK:000007FF3C250D11 4D 03 C4                                add     r8, r12
PAGELK:000007FF3C250CC2 33 FF                                   xor     edi, edi
PAGELK:000007FF3C250CC4 41 F6 44 24 28 01                       test    byte ptr [r12+28h], 1
PAGELK:000007FF3C250CCA 4D 8B F8                                mov     r15, r8
PAGELK:000007FF3C250CCD 44 8B F2                                mov     r14d, edx
PAGELK:000007FF3C250CD0 75 18                                   jnz     short loc_7FF3C250CEA
PAGELK:000007FF3C250CD2 8D 57 06                                lea     edx, [rdi+6]    ; BugCheckParameter1
PAGELK:000007FF3C250CD5 8D 4F 79                                lea     ecx, [rdi+79h]  ; BugCheckCode
PAGELK:000007FF3C250CD8 45 33 C9                                xor     r9d, r9d        ; BugCheckParameter3
PAGELK:000007FF3C250CDB 45 33 C0                                xor     r8d, r8d        ; BugCheckParameter2
PAGELK:000007FF3C250CDE 48 89 7C 24 20                          mov     [rsp+68h+BugCheckParameter4], rdi ; BugCheckParameter4
PAGELK:000007FF3C250CE3 FF 15 1F 88 FE FF                       call    cs:__imp_KeBugCheckEx
PAGELK:000007FF3C250CE3                         ; ---------------------------------------------------------------------------
PAGELK:000007FF3C250CE9 CC                                      align 2
PAGELK:000007FF3C250CEA
PAGELK:000007FF3C250CEA                         loc_7FF3C250CEA:                        ; CODE XREF: HalpInitMpInfo+38↑j
PAGELK:000007FF3C250CEA 3B D7                                   cmp     edx, edi
PAGELK:000007FF3C250CEC 0F 85 75 02 00 00                       jnz     loc_7FF3C250F67
PAGELK:000007FF3C250CF2 48 39 3D 8F 65 FF FF                    cmp     cs:HalpProcLocalApicTable, rdi
PAGELK:000007FF3C250CF9 0F 85 68 02 00 00                       jnz     loc_7FF3C250F67
PAGELK:000007FF3C250CFF 45 8B 44 24 04                          mov     r8d, [r12+4]
PAGELK:000007FF3C250D04 49 8D 54 24 2C                          lea     rdx, [r12+2Ch]
PAGELK:000007FF3C250D09 44 8B CF                                mov     r9d, edi
PAGELK:000007FF3C250D0C 44 8B EF                                mov     r13d, edi
PAGELK:000007FF3C250D0F 8B F7                                   mov     esi, edi
PAGELK:000007FF3C250D11 4D 03 C4                                add     r8, r12
.text:000007FF3C232060 48 89 5C 24 08                          mov     [rsp+arg_0], rbx
.text:000007FF3C232065 48 89 7C 24 10                          mov     [rsp+arg_8], rdi
.text:000007FF3C23206A 9C                                      pushfq
.text:000007FF3C23206B 48 83 EC 20                             sub     rsp, 20h
.text:000007FF3C23206F 33 C9                                   xor     ecx, ecx
.text:000007FF3C232071 E8 1E F7 FE FF                          call    HalpAcquireCmosSpinLockEx
.text:000007FF3C232076 FA                                      cli
.text:000007FF3C232077 80 3D A2 D4 00 00 00                    cmp     cs:HalpScaleWithPmTimer, 0
.text:000007FF3C23207E 74 55                                   jz      short loc_7FF3C2320D5
.text:000007FF3C232080 E8 DB 67 00 00                          call    HalpProcessorFence
.text:000007FF3C232085 C7 04 25 80 03 FE FF FF                 mov     dword ptr ds:0FFFFFFFFFFFE0380h, 0FFFFFFFFh
.text:000007FF3C232085 FF FF FF
.text:000007FF3C232090 8B 3C 25 90 03 FE FF                    mov     edi, ds:0FFFFFFFFFFFE0390h
.text:000007FF3C232097 0F 31                                   rdtsc
.text:000007FF3C232099 48 C1 E2 20                             shl     rdx, 20h
.text:000007FF3C23209D B9 D3 D3 06 00                          mov     ecx, 6D3D3h
.text:000007FF3C2320A2 48 0B C2                                or      rax, rdx
.text:000007FF3C2320A5 48 8B D8                                mov     rbx, rax
.text:000007FF3C2320A8 E8 B3 B6 FF FF                          call    HalpPmTimerTickCountStall
.text:000007FF3C2320AD E8 AE 67 00 00                          call    HalpProcessorFence
.text:000007FF3C2320B2 44 8B 1C 25 90 03 FE FF                 mov     r11d, ds:0FFFFFFFFFFFE0390h
.text:000007FF3C2320BA 41 2B FB                                sub     edi, r11d
.text:000007FF3C2320BD 0F 31                                   rdtsc
.text:000007FF3C2320BF 48 C1 E2 20                             shl     rdx, 20h
.text:000007FF3C2320C3 C1 E7 03                                shl     edi, 3
.text:000007FF3C2320C6 48 0B C2                                or      rax, rdx
.text:000007FF3C2320C9 48 2B C3                                sub     rax, rbx
.text:000007FF3C2320CC 4C 8B C8                                mov     r9, rax
.text:000007FF3C2320CF 49 C1 E1 03                             shl     r9, 3
.text:000007FF3C2320D3 EB 68                                   jmp     short loc_7FF3C23213D
.text:000007FF3C2320D5                         ; ---------------------------------------------------------------------------
.text:000007FF3C2320D5
.text:000007FF3C2320D5                         loc_7FF3C2320D5:                        ; CODE XREF: HalpScaleTimers+1E↑j
.text:000007FF3C2320D5 C7 04 25 80 03 FE FF FF                 mov     dword ptr ds:0FFFFFFFFFFFE0380h, 0FFFFFFFFh
.text:000007FF3C2320D5 FF FF FF
.text:000007FF3C2320E0 66 BA 70 00                             mov     dx, 70h ; 'p'
.text:000007FF3C2320E4 B0 0A                                   mov     al, 0Ah
.text:000007FF3C2320E6 EE                                      out     dx, al          ; CMOS Memory/RTC Index Register:
.text:000007FF3C2320E6                                                                 ; RTC Register A
.text:000007FF3C2320E7
.text:000007FF3C2320E7                         loc_7FF3C2320E7:                        ; CODE XREF: HalpScaleTimers+8B↓j
.text:000007FF3C2320E7 E4 71                                   in      al, 71h         ; CMOS Memory/RTC Data Register
.text:000007FF3C2320E9 84 C0                                   test    al, al
.text:000007FF3C2320EB 78 FA                                   js      short loc_7FF3C2320E7
.text:000007FF3C2320ED
.text:000007FF3C2320ED                         loc_7FF3C2320ED:                        ; CODE XREF: HalpScaleTimers+91↓j
.text:000007FF3C2320ED E4 71                                   in      al, 71h         ; CMOS Memory/RTC Data Register
.text:000007FF3C2320EF 84 C0                                   test    al, al
.text:000007FF3C2320F1 79 FA                                   jns     short loc_7FF3C2320ED
.text:000007FF3C2320F3 E8 68 67 00 00                          call    HalpProcessorFence
.text:000007FF3C2320F8 0F 31                                   rdtsc
.text:000007FF3C2320FA 8B 3C 25 90 03 FE FF                    mov     edi, ds:0FFFFFFFFFFFE0390h
.text:000007FF3C232101 48 C1 E2 20                             shl     rdx, 20h
.text:000007FF3C232105 48 0B C2                                or      rax, rdx
.text:000007FF3C232108 48 8B D8                                mov     rbx, rax
.text:000007FF3C23210B 66 BA 70 00                             mov     dx, 70h ; 'p'
.text:000007FF3C23210F B0 0A                                   mov     al, 0Ah
.text:000007FF3C232111 EE                                      out     dx, al          ; CMOS Memory/RTC Index Register:
.text:000007FF3C232111                                                                 ; RTC Register A
.text:000007FF3C232112
.text:000007FF3C232112                         loc_7FF3C232112:                        ; CODE XREF: HalpScaleTimers+B6↓j
.text:000007FF3C232112 E4 71                                   in      al, 71h         ; CMOS Memory/RTC Data Register
.text:000007FF3C232114 84 C0                                   test    al, al
.text:000007FF3C232116 78 FA                                   js      short loc_7FF3C232112
.text:000007FF3C232118
.text:000007FF3C232118                         loc_7FF3C232118:                        ; CODE XREF: HalpScaleTimers+BC↓j
.text:000007FF3C232118 E4 71                                   in      al, 71h         ; CMOS Memory/RTC Data Register
.text:000007FF3C23211A 84 C0                                   test    al, al
.text:000007FF3C23211C 79 FA                                   jns     short loc_7FF3C232118
.text:000007FF3C23211E E8 3D 67 00 00                          call    HalpProcessorFence
.text:000007FF3C232123 44 8B 1C 25 90 03 FE FF                 mov     r11d, ds:0FFFFFFFFFFFE0390h
.text:000007FF3C23212B 41 2B FB                                sub     edi, r11d
.text:000007FF3C23212E 0F 31                                   rdtsc
.text:000007FF3C232130 48 C1 E2 20                             shl     rdx, 20h
.text:000007FF3C232134 48 0B C2                                or      rax, rdx
.text:000007FF3C232137 4C 8B C8                                mov     r9, rax
.text:000007FF3C23213A 4C 2B CB                                sub     r9, rbx
.text:000007FF3C23213D
.text:000007FF3C23213D                         loc_7FF3C23213D:                        ; CODE XREF: HalpScaleTimers+73↑j
.text:000007FF3C23213D 65 48 8B 1C 25 18 00 00                 mov     rbx, gs:18h
.text:000007FF3C23213D 00
.text:000007FF3C232146 65 4C 8B 04 25 18 00 00                 mov     r8, gs:18h
.text:000007FF3C232146 00
.text:000007FF3C23214F 49 BA 4B 59 86 38 D6 C5                 mov     r10, 346DC5D63886594Bh
.text:000007FF3C23214F 6D 34
.text:000007FF3C232159 49 8D 89 88 13 00 00                    lea     rcx, [r9+1388h]
.text:000007FF3C232160 49 8B C2                                mov     rax, r10
.text:000007FF3C232163 48 F7 E1                                mul     rcx
.text:000007FF3C232166 8B CF                                   mov     ecx, edi
.text:000007FF3C232168 49 8B C2                                mov     rax, r10
.text:000007FF3C23216B 48 C1 EA 0B                             shr     rdx, 0Bh
.text:000007FF3C23216F 48 81 C1 88 13 00 00                    add     rcx, 1388h
.text:000007FF3C232176 48 69 D2 10 27 00 00                    imul    rdx, 2710h
.text:000007FF3C23217D 48 89 93 C0 00 00 00                    mov     [rbx+0C0h], rdx
.text:000007FF3C232184 48 F7 E1                                mul     rcx
.text:000007FF3C232187 48 B8 DB 34 B6 D7 82 DE                 mov     rax, 431BDE82D7B634DBh
.text:000007FF3C232187 1B 43
.text:000007FF3C232191 48 8B CA                                mov     rcx, rdx
.text:000007FF3C232194 48 C1 E9 0B                             shr     rcx, 0Bh
.text:000007FF3C232198 49 F7 E1                                mul     r9
.text:000007FF3C23219B 69 C9 10 27 00 00                       imul    ecx, 2710h
.text:000007FF3C2321A1 48 C1 EA 12                             shr     rdx, 12h
.text:000007FF3C2321A5 0F BA 64 24 20 09                       bt      [rsp+28h+var_8], 9
.text:000007FF3C2321AB 89 8B DC 00 00 00                       mov     [rbx+0DCh], ecx
.text:000007FF3C2321B1 41 89 50 64                             mov     [r8+64h], edx
.text:000007FF3C2321B5 65 48 8B 04 25 20 00 00                 mov     rax, gs:20h
.text:000007FF3C2321B5 00
.text:000007FF3C2321BE 89 90 F4 05 00 00                       mov     [rax+5F4h], edx
.text:000007FF3C2321C4 89 8B D8 00 00 00                       mov     [rbx+0D8h], ecx
.text:000007FF3C2321CA 89 0C 25 80 03 FE FF                    mov     ds:0FFFFFFFFFFFE0380h, ecx
.text:000007FF3C2321D1 73 01                                   jnb     short loc_7FF3C2321D4
.text:000007FF3C2321D3 FB                                      sti
.text:000007FF3C2321D4
.text:000007FF3C2321D4                         loc_7FF3C2321D4:                        ; CODE XREF: HalpScaleTimers+171↑j
.text:000007FF3C2321D4 E8 8F F5 FE FF                          call    HalpReleaseCmosSpinLock
.text:000007FF3C2321D9 8B 83 DC 00 00 00                       mov     eax, [rbx+0DCh]
.text:000007FF3C2321DF 48 8B 5C 24 30                          mov     rbx, [rsp+28h+arg_0]
.text:000007FF3C2321E4 48 8B 7C 24 38                          mov     rdi, [rsp+28h+arg_8]
.text:000007FF3C2321E9 48 83 C4 20                             add     rsp, 20h
.text:000007FF3C2321ED 59                                      pop     rcx
.text:000007FF3C2321EE C3                                      retn
.text:000007FF3C232060 48 89 5C 24 08                          mov     [rsp+arg_0], rbx
.text:000007FF3C232065 48 89 7C 24 10                          mov     [rsp+arg_8], rdi
.text:000007FF3C23206A 9C                                      pushfq
.text:000007FF3C23206B 48 83 EC 20                             sub     rsp, 20h
.text:000007FF3C23206F 33 C9                                   xor     ecx, ecx
.text:000007FF3C232071 E8 1E F7 FE FF                          call    HalpAcquireCmosSpinLockEx
.text:000007FF3C232076 FA                                      cli
.text:000007FF3C232077 80 3D A2 D4 00 00 00                    cmp     cs:HalpScaleWithPmTimer, 0
.text:000007FF3C23207E 74 55                                   jz      short loc_7FF3C2320D5
.text:000007FF3C232080 E8 DB 67 00 00                          call    HalpProcessorFence
.text:000007FF3C232085 C7 04 25 80 03 FE FF FF                 mov     dword ptr ds:0FFFFFFFFFFFE0380h, 0FFFFFFFFh
.text:000007FF3C232085 FF FF FF
.text:000007FF3C232090 8B 3C 25 90 03 FE FF                    mov     edi, ds:0FFFFFFFFFFFE0390h
.text:000007FF3C232097 0F 31                                   rdtsc
.text:000007FF3C232099 48 C1 E2 20                             shl     rdx, 20h
.text:000007FF3C23209D B9 D3 D3 06 00                          mov     ecx, 6D3D3h
.text:000007FF3C2320A2 48 0B C2                                or      rax, rdx
.text:000007FF3C2320A5 48 8B D8                                mov     rbx, rax
.text:000007FF3C2320A8 E8 B3 B6 FF FF                          call    HalpPmTimerTickCountStall
.text:000007FF3C2320AD E8 AE 67 00 00                          call    HalpProcessorFence
.text:000007FF3C2320B2 44 8B 1C 25 90 03 FE FF                 mov     r11d, ds:0FFFFFFFFFFFE0390h
.text:000007FF3C2320BA 41 2B FB                                sub     edi, r11d
.text:000007FF3C2320BD 0F 31                                   rdtsc
.text:000007FF3C2320BF 48 C1 E2 20                             shl     rdx, 20h
.text:000007FF3C2320C3 C1 E7 03                                shl     edi, 3
.text:000007FF3C2320C6 48 0B C2                                or      rax, rdx
.text:000007FF3C2320C9 48 2B C3                                sub     rax, rbx
.text:000007FF3C2320CC 4C 8B C8                                mov     r9, rax
.text:000007FF3C2320CF 49 C1 E1 03                             shl     r9, 3
.text:000007FF3C2320D3 EB 68                                   jmp     short loc_7FF3C23213D
.text:000007FF3C2320D5                         ; ---------------------------------------------------------------------------
.text:000007FF3C2320D5
.text:000007FF3C2320D5                         loc_7FF3C2320D5:                        ; CODE XREF: HalpScaleTimers+1E↑j
.text:000007FF3C2320D5 C7 04 25 80 03 FE FF FF                 mov     dword ptr ds:0FFFFFFFFFFFE0380h, 0FFFFFFFFh
.text:000007FF3C2320D5 FF FF FF
.text:000007FF3C2320E0 66 BA 70 00                             mov     dx, 70h ; 'p'
.text:000007FF3C2320E4 B0 0A                                   mov     al, 0Ah
.text:000007FF3C2320E6 EE                                      out     dx, al          ; CMOS Memory/RTC Index Register:
.text:000007FF3C2320E6                                                                 ; RTC Register A
.text:000007FF3C2320E7
.text:000007FF3C2320E7                         loc_7FF3C2320E7:                        ; CODE XREF: HalpScaleTimers+8B↓j
.text:000007FF3C2320E7 E4 71                                   in      al, 71h         ; CMOS Memory/RTC Data Register
.text:000007FF3C2320E9 84 C0                                   test    al, al
.text:000007FF3C2320EB 78 FA                                   js      short loc_7FF3C2320E7
.text:000007FF3C2320ED
.text:000007FF3C2320ED                         loc_7FF3C2320ED:                        ; CODE XREF: HalpScaleTimers+91↓j
.text:000007FF3C2320ED E4 71                                   in      al, 71h         ; CMOS Memory/RTC Data Register
.text:000007FF3C2320EF 84 C0                                   test    al, al
.text:000007FF3C2320F1 79 FA                                   jns     short loc_7FF3C2320ED
.text:000007FF3C2320F3 E8 68 67 00 00                          call    HalpProcessorFence
.text:000007FF3C2320F8 0F 31                                   rdtsc
.text:000007FF3C2320FA 8B 3C 25 90 03 FE FF                    mov     edi, ds:0FFFFFFFFFFFE0390h
.text:000007FF3C232101 48 C1 E2 20                             shl     rdx, 20h
.text:000007FF3C232105 48 0B C2                                or      rax, rdx
.text:000007FF3C232108 48 8B D8                                mov     rbx, rax
.text:000007FF3C23210B 66 BA 70 00                             mov     dx, 70h ; 'p'
.text:000007FF3C23210F B0 0A                                   mov     al, 0Ah
.text:000007FF3C232111 EE                                      out     dx, al          ; CMOS Memory/RTC Index Register:
.text:000007FF3C232111                                                                 ; RTC Register A
.text:000007FF3C232112
.text:000007FF3C232112                         loc_7FF3C232112:                        ; CODE XREF: HalpScaleTimers+B6↓j
.text:000007FF3C232112 E4 71                                   in      al, 71h         ; CMOS Memory/RTC Data Register
.text:000007FF3C232114 84 C0                                   test    al, al
.text:000007FF3C232116 78 FA                                   js      short loc_7FF3C232112
.text:000007FF3C232118
.text:000007FF3C232118                         loc_7FF3C232118:                        ; CODE XREF: HalpScaleTimers+BC↓j
.text:000007FF3C232118 E4 71                                   in      al, 71h         ; CMOS Memory/RTC Data Register
.text:000007FF3C23211A 84 C0                                   test    al, al
.text:000007FF3C23211C 79 FA                                   jns     short loc_7FF3C232118
.text:000007FF3C23211E E8 3D 67 00 00                          call    HalpProcessorFence
.text:000007FF3C232123 44 8B 1C 25 90 03 FE FF                 mov     r11d, ds:0FFFFFFFFFFFE0390h
.text:000007FF3C23212B 41 2B FB                                sub     edi, r11d
.text:000007FF3C23212E 0F 31                                   rdtsc
.text:000007FF3C232130 48 C1 E2 20                             shl     rdx, 20h
.text:000007FF3C232134 48 0B C2                                or      rax, rdx
.text:000007FF3C232137 4C 8B C8                                mov     r9, rax
.text:000007FF3C23213A 4C 2B CB                                sub     r9, rbx
.text:000007FF3C23213D
.text:000007FF3C23213D                         loc_7FF3C23213D:                        ; CODE XREF: HalpScaleTimers+73↑j
.text:000007FF3C23213D 65 48 8B 1C 25 18 00 00                 mov     rbx, gs:18h
.text:000007FF3C23213D 00
.text:000007FF3C232146 65 4C 8B 04 25 18 00 00                 mov     r8, gs:18h
.text:000007FF3C232146 00
.text:000007FF3C23214F 49 BA 4B 59 86 38 D6 C5                 mov     r10, 346DC5D63886594Bh
.text:000007FF3C23214F 6D 34
.text:000007FF3C232159 49 8D 89 88 13 00 00                    lea     rcx, [r9+1388h]
.text:000007FF3C232160 49 8B C2                                mov     rax, r10
.text:000007FF3C232163 48 F7 E1                                mul     rcx
.text:000007FF3C232166 8B CF                                   mov     ecx, edi
.text:000007FF3C232168 49 8B C2                                mov     rax, r10
.text:000007FF3C23216B 48 C1 EA 0B                             shr     rdx, 0Bh
.text:000007FF3C23216F 48 81 C1 88 13 00 00                    add     rcx, 1388h
.text:000007FF3C232176 48 69 D2 10 27 00 00                    imul    rdx, 2710h
.text:000007FF3C23217D 48 89 93 C0 00 00 00                    mov     [rbx+0C0h], rdx
.text:000007FF3C232184 48 F7 E1                                mul     rcx
.text:000007FF3C232187 48 B8 DB 34 B6 D7 82 DE                 mov     rax, 431BDE82D7B634DBh
.text:000007FF3C232187 1B 43
.text:000007FF3C232191 48 8B CA                                mov     rcx, rdx
.text:000007FF3C232194 48 C1 E9 0B                             shr     rcx, 0Bh
.text:000007FF3C232198 49 F7 E1                                mul     r9
.text:000007FF3C23219B 69 C9 10 27 00 00                       imul    ecx, 2710h
.text:000007FF3C2321A1 48 C1 EA 12                             shr     rdx, 12h
.text:000007FF3C2321A5 0F BA 64 24 20 09                       bt      [rsp+28h+var_8], 9
.text:000007FF3C2321AB 89 8B DC 00 00 00                       mov     [rbx+0DCh], ecx
.text:000007FF3C2321B1 41 89 50 64                             mov     [r8+64h], edx
.text:000007FF3C2321B5 65 48 8B 04 25 20 00 00                 mov     rax, gs:20h

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

最后于 2024-12-10 22:25 被Mouri_Naruto编辑 ,原因:
收藏
免费 9
支持
分享
最新回复 (8)
雪    币: 2987
活跃值: (5348)
能力值: ( LV4,RANK:55 )
在线值:
发帖
回帖
粉丝
2
前排支持毛利大佬
2024-12-9 22:06
0
雪    币: 12872
活跃值: (6502)
能力值: ( LV15,RANK:613 )
在线值:
发帖
回帖
粉丝
3
前排支持毛利大佬
2024-12-10 10:44
0
雪    币: 12834
活跃值: (7539)
能力值: ( LV13,RANK:590 )
在线值:
发帖
回帖
粉丝
4
2024-12-10 16:44
0
雪    币: 41
活跃值: (425)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
2024-12-10 19:48
0
雪    币: 5593
活跃值: (5023)
能力值: ( LV9,RANK:143 )
在线值:
发帖
回帖
粉丝
6
前排支持毛利大佬
2024-12-10 22:23
0
雪    币: 127
活跃值: (2863)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
前排支持毛利大佬
2024-12-11 13:40
0
雪    币: 4858
活跃值: (3899)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
前排支持毛利大佬
2024-12-11 16:13
0
雪    币: 78
活跃值: (1980)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
顶一个
5天前
0
游客
登录 | 注册 方可回帖
返回
//