osloader!DoGlobalInitialization函數分析之HW_CURSOR--NTLDR源代碼分析之設置光標

第一部分:
VOID
DoGlobalInitialization(
IN PBOOT_CONTEXT BootContextRecord
)

{


//
// Turn the cursor off
//

??? HW_CURSOR(0,127);

D:\srv03rtm\base\boot/inc/bldrx86.h:258:#define HW_CURSOR?????????? (*ExternalServicesTable->HardwareCursor)


第二部分:

一、中斷顯示服務—INT 10H

功能號:

00H —設置顯示器模式
01H —設置光標形狀
02H —設置光標位置
03H —讀取光標信息
04H —讀取光筆位置
05H —設置顯示頁
06H、07H —初始化或滾屏
08H —讀光標處的字符及其屬性
09H —在光標處按指定屬性顯示字符
0AH —在當前光標處顯示字符
0BH —設置調色板、背景色或邊框
0CH —寫圖形象素
0DH —讀圖形象素
0EH —在Teletype模式下顯示字符
0FH —讀取顯示器模式
10H —顏色
11H —字體
12H —顯示器的配置
13H —在終端模式下顯示字符串
1AH —讀取/設置顯示組合編碼
1BH —讀取功能/狀態信息
1CH —保存/恢復顯示器狀態


int 10h中斷例程的在光標位置顯示字符功能:

mov ah,9 ;在光標位置顯示字符
mov al,'a' ;字符
mov bl,7 ;顏色屬性
mov bh,0 ;第0頁
mov cx,3 ;字符重復個數
int 10h

(ah)=9表示調用的第10h號的中斷例程的9號子程序,功能為在光標位置顯示字符,可以提供要顯示的字符,顏色屬性,頁號字符重復個數作為參數

一般調用中斷例程的某號子程序,存儲在ah中


第三部分:

3、 功能02H
功能描述:用文本坐標下設置光標位置

入口參數:AH=02H

BH=顯示頁碼

DH=行(Y坐標)

DL= 列(X坐標)

出口參數:無


第四部分:
//
// Turn the cursor off
//

??? HW_CURSOR(0,127);

;++
;
; Name:
;
;?????? HardwareCursor
;
; Description:
;
;?????? Positions the hardware cursor and performs other display stuff.
;
; Arguments:
;
;???????????? ULONG Y coord (0 based)
;???????????? ULONG X coord (0 based)
;???? TOS ->? ULONG Flat return address (must be used with KeCodeSelector)
;
;?????? If X = 0x80000000, then Y contains values that get placed into
;?????????? ax (low word of Y) and bx (hi word of y).
;?????? Otherwise X,Y = coors for cursor
;
;
;--

EXPORT_ENTRY_MACRO??? HardwareCursor
;
; Move the arguments from the caller's 32bit stack to the SU module's
; 16bit stack.
;

??????? MAKE_STACK_FRAME_MACRO? <HardwareCursorFrame>, ebx

;
; Go into real mode. We still have the same stack and sp
; but we'll be executing in realmode.
;

??????? ENTER_REALMODE_MACRO

;
; Get the requested sectors. Arguments on realmode stack
; Make (bp) point to the bottom of the argument frame.
;
push???? bp
mov????? bp,sp
add????? bp,2

;
; Put the row (y coord) in dh and the column (x coord) in dl.
;

??????? mov????? eax,[bp].YCoord
mov????? edx,[bp].XCoord
cmp????? edx,80000000h
jne????? gotxy

??????? mov????? ebx,eax
shr????? ebx,16
jmp????? doint10

??? gotxy:
mov????? dh,al?? ??? ??? ??? ?DH=行(Y坐標)?? ??? ?
mov????? ah,2?? ??? ??? ??? ?02H —設置光標位置
mov????? bh,0

??? doint10:
int????? 10h

;
; Restore bp and remove stack-frame from stack
;
pop????? bp

??????? REMOVE_STACK_FRAME_MACRO <HardwareCursorFrame>

;
; Re-enable protect-mode and paging.
;

??????? RE_ENABLE_PAGING_MACRO

;
; Return to caller and the 32bit universe.
;
EXPORT_EXIT_MACRO


kd> p
osloader!DoGlobalInitialization+0x3b:
004012a8 6a7f??????????? push??? 7Fh
kd> p
osloader!DoGlobalInitialization+0x3d:
004012aa 6a00??????????? push??? 0


第五部分:

??? //
// Turn the cursor off
//

??? HW_CURSOR(0,127);

kd> dv
BootContextRecord = 0x00024538
kd> dx -r1 ((osloader!_BOOT_CONTEXT *)0x24538)
((osloader!_BOOT_CONTEXT *)0x24538)???????????????? : 0x24538 [Type: _BOOT_CONTEXT *]
[+0x000] FSContextPointer : 0x244e4 [Type: _FSCONTEXT_RECORD *]
[+0x004] ExternalServicesTable : 0x244ec [Type: _EXTERNAL_SERVICES_TABLE *]
[+0x008] MemoryDescriptorList : 0x70000 [Type: _SU_MEMORY_DESCRIPTOR *]
[+0x00c] MachineType????? : 0x0 [Type: unsigned long]
[+0x010] OsLoaderStart??? : 0x401000 [Type: unsigned long]
[+0x014] OsLoaderEnd????? : 0x4894a8 [Type: unsigned long]
[+0x018] ResourceDirectory : 0x487000 [Type: unsigned long]
[+0x01c] ResourceOffset?? : 0x87000 [Type: unsigned long]
[+0x020] OsLoaderBase???? : 0x400000 [Type: unsigned long]
[+0x024] OsLoaderExports? : 0x443b40 [Type: unsigned long]
[+0x028] BootFlags??????? : 0x0 [Type: unsigned long]
[+0x02c] NtDetectStart??? : 0x0 [Type: unsigned long]
[+0x030] NtDetectEnd????? : 0x0 [Type: unsigned long]
[+0x034] SdiAddress?????? : 0x0 [Type: unsigned long]
kd> dx -r1 ((osloader!_FSCONTEXT_RECORD *)0x244e4)
((osloader!_FSCONTEXT_RECORD *)0x244e4)???????????????? : 0x244e4 [Type: _FSCONTEXT_RECORD *]
[+0x000] BootDrive??????? : 0x80 [Type: unsigned char]
kd> dx -r1 ((osloader!_EXTERNAL_SERVICES_TABLE *)0x244ec)
((osloader!_EXTERNAL_SERVICES_TABLE *)0x244ec)???????????????? : 0x244ec [Type: _EXTERNAL_SERVICES_TABLE *]
[+0x000] RebootProcessor? : 0x22e60 [Type: void (__cdecl*)()]
[+0x004] DiskIOSystem???? : 0x22e6c [Type: long (__cdecl*)(unsigned char,unsigned char,unsigned short,unsigned short,unsigned char,unsigned char,unsigned char *)]
[+0x008] GetKey?????????? : 0x22e84 [Type: unsigned long (__cdecl*)()]
[+0x00c] GetCounter?????? : 0x22e90 [Type: unsigned long (__cdecl*)()]
[+0x010] Reboot?????????? : 0x22e9c [Type: void (__cdecl*)(unsigned long)]
[+0x014] DetectHardware?? : 0x22ec0 [Type: void (__cdecl*)(unsigned long,unsigned long,void *,unsigned long *,char *,unsigned long)]
[+0x018] HardwareCursor?? : 0x22ea8 [Type: void (__cdecl*)(unsigned long,unsigned long)]
[+0x01c] GetDateTime????? : 0x22eb4 [Type: void (__cdecl*)(unsigned long *,unsigned long *)]
[+0x020] ComPort????????? : 0x22ecc [Type: void (__cdecl*)(long,unsigned long,unsigned char)]
[+0x024] GetStallCount??? : 0x22ed8 [Type: unsigned long (__cdecl*)()]
[+0x028] InitializeDisplayForNt : 0x22ee4 [Type: void (__cdecl*)()]
[+0x02c] GetMemoryDescriptor : 0x22ef0 [Type: void (__cdecl*)()]
[+0x030] GetEddsSector??? : 0x22e78 [Type: long (__cdecl*)(unsigned char,unsigned long,unsigned long,unsigned short,unsigned char *,unsigned char)]
[+0x034] GetElToritoStatus : 0x22efc [Type: long (__cdecl*)(unsigned char *,unsigned char)]
[+0x038] GetExtendedInt13Params : 0x22f08 [Type: unsigned char (__cdecl*)(unsigned char *,unsigned char)]
[+0x03c] NetPcRomServices : 0x0 [Type: unsigned short (__cdecl*)(unsigned long,void *)]
[+0x040] ApmAttemptReconnect : 0x22f14 [Type: void (__cdecl*)()]
[+0x044] BiosRedirectService : 0x0 [Type: unsigned long (__cdecl*)(unsigned long)]
kd> p


kd> p
osloader!DoGlobalInitialization+0x45:
004012b2 ff5018????????? call??? dword ptr [eax+18h]?? ??? ?//[eax+18h]
kd> r
eax=000244ec ebx=004013a2 ecx=00000000 edx=00064544 esi=00024538 edi=0048164f
eip=004012b2 esp=00060ec4 ebp=00060ed0 iopl=0???????? nv up di pl zr na pe nc
cs=0008? ss=0010? ds=0010? es=0010? fs=0030? gs=0000???????????? efl=00000046
osloader!DoGlobalInitialization+0x45:
004012b2 ff5018????????? call??? dword ptr [eax+18h]? ds:0010:00024504=00022ea8

kd> dd 00060ec4
00060ec4? 00000000 0000007f 00024538 00061ff0

kd> ?7f
Evaluate expression: 127 = 0000007f

y=7f?? ?x=0

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/94050.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/94050.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/94050.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Elasticsearch 索引及節點級別增刪改查技術

以下是針對 Elasticsearch 索引及節點級別增刪改查技術做的簡短總結&#xff1a; 一、索引操作創建索引 功能&#xff1a;指定分片、副本數及映射規則[2][4]。示例&#xff1a;PUT /<index_name>?&#xff0c;可定義 settings&#xff08;如分片數&#xff09;和 mappin…

烽火HG680-KD_海思MV320處理器-安卓9-原廠系統升級包-針對解決燒錄不進系統的問題

烽火HG680-KD_海思MV320處理器-安卓9-原廠系統升級包&#xff08;注意是&#xff08;原機系統&#xff09;&#xff09;-主要是針對解決TTL燒錄后仍然不進系統使用。HG680-KD&#xff0f;HG680-KE&#xff0f;HG680-KF&#xff0f;HG680-KX 均通用。 說明&#xff1a; 前一個…

VS2019安裝HoloLens 沒有設備選項

第一步先檢查VS有沒有安裝C組件第二步把VS工程最后一個設置為啟動項

【云計算】云主機的親和性策略(二):集群節點組

《云主機的親和性策略》系列&#xff0c;共包含以下文章&#xff1a; 1?? 云主機的親和性策略&#xff08;一&#xff09;&#xff1a;快樂旅行團2?? 云主機的親和性策略&#xff08;二&#xff09;&#xff1a;集群節點組3?? 云主機的親和性策略&#xff08;三&#xf…

【人工智能】AI代理在零售業的崛起:從草莓訂購到全流程購物體驗

《Python OpenCV從菜鳥到高手》帶你進入圖像處理與計算機視覺的大門! 解鎖Python編程的無限可能:《奇妙的Python》帶你漫游代碼世界 在零售業快速演變的格局中,AI代理正作為變革力量崛起,連接消費者需求與無縫履行。本文深入探討AI代理在零售中的興起,從通過對話界面訂購…

【讀論文】從Qwen3技術報告到Qwen3-30B-A3B 模型的深度解讀

引言:當大模型追求又小又好用 最近都是各種新大模型滿天飛,其中Qwen3-30B-A3B-Instruct-2507很是亮眼,這種參數尺寸是相對友好的,效果好而且模型不大。從這里就引發一下疑問,如何在保證強大能力的同時,兼顧模型的效率和可訪問性?毫無疑問,混合專家 (Mixture-of-Expert…

【番外篇15】中心極限定理:從數學原理到生活案例

一、什么是中心極限定理&#xff1f;中心極限定理(Central Limit Theorem, CLT)是概率論與統計學中最重要的定理之一&#xff0c;它揭示了為什么正態分布在自然界和統計學中如此普遍。?定理表述?&#xff1a;設X?, X?, ..., X? 是一組獨立同分布的隨機變量序列&#xff0c…

本地構建Docker鏡像并推送到GitHub Container Registry

一、本地構建并推送鏡像1. 登錄GitHub Container Registry首先&#xff0c;需要登錄到GitHub Container Registry (GHCR)&#xff1a;# 使用個人訪問令牌(PAT)登錄 docker login ghcr.io -u 你的GitHub用戶名 -p 你的個人訪問令牌注意&#xff1a;你需要在GitHub上創建一個具有…

DP-v2.1-mem-clean學習(3.6.8-3.6.8.1)

3.6.8 lttpr非透明模式下的鏈路訓練 3.6.8.1 支持8b/10b鏈路層訓練規范 ?默認透明模式? 若上游設備未啟用LTTPR非透明模式(Non-transparent),需在鏈路訓練前將DPCD F0003h寄存器寫入默認值55h38 ?非法中繼器計數值處理? 當DPCD F0002h(PHY_REPEATER_CNT)返回值非有…

kali安裝maven

kali安裝maven 下載maven的安裝包 wget https://dlcdn.apache.org/maven/maven-3/3.9.11/binaries/apache-maven-3.9.11-bin.tar.gz 注意可能返回404&#xff0c;這是因為官網已經更新了版本&#xff0c;這種情況可以自己訪問https://dlcdn.apache.org/maven/maven-3查看一下最…

GEO優化:品牌營銷新戰場的光明與荊棘

在AI重塑信息獲取方式的今天&#xff0c;一種名為GEO&#xff08;生成式引擎優化&#xff09;?的策略正悄然成為企業營銷版圖的新坐標。它不追求傳統搜索引擎中的鏈接排名&#xff0c;而是爭奪生成式AI&#xff08;如ChatGPT、DeepSeek等&#xff09;答案中的“話語權”——讓…

牛客 - 旋轉數組的最小數字

描述 有一個長度為 n 的非降序數組&#xff0c;比如[1,2,3,4,5]&#xff0c;將它進行旋轉&#xff0c;即把一個數組最開始的若干個元素搬到數組的末尾&#xff0c;變成一個旋轉數組&#xff0c;比如變成了[3,4,5,1,2]&#xff0c;或者[4,5,1,2,3]這樣的。請問&#xff0c;給定這…

1分鐘臨時共享空間在線小工具實現

運行效果&#xff1a;1分鐘臨時共享空間 - 免注冊即時文件文本共享工具 | 極速傳 直接上代碼&#xff1a; using Microsoft.AspNetCore.Mvc; using SaaS.OfficialWebSite.Web.Utils; using ZXing.QrCode; using ZXing; using SkiaSharp; using ZXing.SkiaSharp.Rendering; usin…

操作系統-lecture5(線程)

進程的缺點 在創建了子進程的時候&#xff0c;得到了可以并發執行的好處 但創建了進程資源會造成浪費 線程的引入 在同一個進程中有這樣兩個執行流&#xff0c;為并發執行的&#xff0c;稱之為線程 這里引用下《操作系統概念》中的線程概述 任務舉例 在復制的過程中&#xf…

FPGA kernel 仿真器調試環境搭建

參考:haps階段說明2:kernel運行和調試 1 仿真器加載FIT及調試步驟 由于使用仿真器,就要額外配置DS-5的軟件環境,有些步驟略復雜,請仔細按照說明操作。 1.1 導入kernel工程 不導入可以運行,但導入方便調試 file——-import 導入后的工程如圖 1.2 創建debug 使用attach方…

MySQL(173)MySQL中的存儲過程和函數有什么區別?

在MySQL中&#xff0c;存儲過程&#xff08;Stored Procedures&#xff09;和函數&#xff08;Functions&#xff09;是兩種用于封裝可重用SQL代碼的機制。盡管它們在很多方面類似&#xff0c;但仍有一些重要的區別。以下是對存儲過程和函數的詳細解釋&#xff0c;以及如何在My…

可計算存儲(Computational Storage)與DPU(Data Processing Unit)的技術特點對比及實際應用場景分析

以下是對可計算存儲&#xff08;Computational Storage&#xff09;與DPU&#xff08;Data Processing Unit&#xff09;的技術特點對比及實際應用場景分析&#xff0c;結合引用資料進行綜合說明&#xff1a;一、技術核心對比維度可計算存儲DPU核心差異定位存儲設備內置計算能力…

rag學習-以項目為基礎快速啟動掌握rag

rag從0到放棄黃帝內經rag問答系統RAG 項目版本迭代總覽各版本技術細節如何使用黃帝內經rag問答系統 本項目使用爬蟲獲取了皇帝內經全文以此為數據構建檢索增強系統 本項目以一個系統的多層迭代不斷更新優化技術&#xff0c;由淺入深逐漸理解rag原理及優化技術 話不多說github…

linux 啟動流程?

linux 啟動流程 CPU 上電后最先執行的啟動代碼&#xff0c;通常確實是放在 arch 目錄下對應架構的啟動文件里。這是因為啟動代碼強相關于 CPU 架構和硬件細節&#xff0c;不同架構差異非常大。具體說明 1. 為什么啟動代碼放在 arch 目錄&#xff1f; 啟動代碼要設置 CPU 狀態&a…

《Kubernetes部署篇:基于Kylin V10+ARM64架構CPU使用containerd部署K8S 1.33.3集群(多主多從)》

總結:整理不易,如果對你有幫助,可否點贊關注一下? 更多詳細內容請參考:企業級K8s集群運維實戰 一、架構圖 如下圖所示: 二、環境信息 基于x86_64+aarch64架構使用containerd部署K8S 1.33.3集群資源合集(三主多從) 2、部署規劃 云平臺 主機名 K8S版本 系統版本 CPU架構…