2507C++,系統服務0與1

原文

窗口上的系統調用通過,每個由系統調用(x64)或sysenter(x86)CPU指令調用的NTDLL.dll,如NTDLLNtCreateFile的以下輸出所示:
這里

0:000> u
ntdll!NtCreateFile:
00007ffc`c07fcb50 4c8bd1          mov     r10,rcx
00007ffc`c07fcb53 b855000000      mov     eax,55h
00007ffc`c07fcb58 f604250803fe7f01 test    byte ptr [SharedUserData+0x308 (00000000`7ffe0308)],1
00007ffc`c07fcb60 7503            jne     ntdll!NtCreateFile+0x15 (00007ffc`c07fcb65)
00007ffc`c07fcb62 0f05            syscall
00007ffc`c07fcb64 c3              ret
00007ffc`c07fcb65 cd2e            int     2Eh
00007ffc`c07fcb67 c3              ret

EAX的值是系統服務編號(在本例中為0x55).接著是系統調用指令(測試的條件一般沒有分支).

系統調用(syscall)導致內核傳輸到負責分發到執行器中的實際系統調用實現系統服務分發器例程.最終,必須將EAX寄存器作為,每個系統服務編號(索引)都指向實際例程系統服務分發表(SSDT)的查找索引.

x64版本的窗口上,SSDT在內核調試器中的nt!KiServiceTable符號中:

lkd> dd nt!KiServiceTable
fffff804`13c3ec20  fced7204 fcf77b00 02b94a02 04747400
fffff804`13c3ec30  01cef300 fda01f00 01c06005 01c3b506
fffff804`13c3ec40  02218b05 0289df01 028bd600 01a98d00
fffff804`13c3ec50  01e31b00 01c2a200 028b7200 01cca500
fffff804`13c3ec60  02229b01 01bf9901 0296d100 01fea002

你可能期望SSDT中的值是,直接指向系統服務(這是x86系統上使用的方案)的64位指針.在x64上,這些值為32位,它們是SSDT自身開頭的偏移.

但是,偏移不包括最后十六進制數字(4位):最后值系統調用的參數個數.

來看看這是否適合NtCreateFile.正如用戶模式,它的服務編號是0x55的,因此要取得實際的偏移,需要簡單計算:

kd> dd nt!KiServiceTable+55*4 L1
fffff804`13c3ed74  020b9207

現在,需要取(不帶最后十六進制數字的)此偏移,在SSDT中添加它,它應該指向NtCreateFile:

lkd> u nt!KiServiceTable+020b920
nt!NtCreateFile:
fffff804`13e4a540 4881ec88000000  sub     rsp,88h
fffff804`13e4a547 33c0            xor     eax,eax
fffff804`13e4a549 4889442478      mov     qword ptr [rsp+78h],rax
fffff804`13e4a54e c744247020000000 mov     dword ptr [rsp+70h],20h

事實上,這是NtCreateFile.參數個數呢?存儲的值7.下面是NtCreateFile的原型(在WDK中記錄為ZwCreateFile):

NTSTATUS NtCreateFile(PHANDLE            FileHandle,ACCESS_MASK        DesiredAccess,POBJECT_ATTRIBUTES ObjectAttributes,PIO_STATUS_BLOCK   IoStatusBlock,PLARGE_INTEGER     AllocationSize,ULONG              FileAttributes,ULONG              ShareAccess,ULONG              CreateDisposition,ULONG              CreateOptions,PVOID              EaBuffer,ULONG              EaLength);

顯然,有11個參數,而不僅是7個.為什么會有差異?存儲的值使用棧傳遞的參數個數.在x64調用約定中,前4個參數使用寄存器傳遞:RCX,RDX,R8,R9(按此順序).
現在回到文章標題.下面是SSDT中的前幾個項:

lkd> dd nt!KiServiceTable
fffff804`13c3ec20  fced7204 fcf77b00 02b94a02 04747400
fffff804`13c3ec30  01cef300 fda01f00 01c06005 01c3b506

前兩個項的數字要大得多.試對第一個值(索引0)應用相同邏輯:

kd> u nt!KiServiceTable+fced720
fffff804`2392c340 ??
???^ Memory access error in 'u nt!KiServiceTable+fced720'

(按二進制補碼)該值實際上是一個負值,因此需要符號擴展64位,然后加起來(如前省略最后十六進制數字):

kd> u nt!KiServiceTable+ffffffff`ffced720
nt!NtAccessCheck:
fffff804`1392c340 4c8bdc          mov     r11,rsp
fffff804`1392c343 4883ec68        sub     rsp,68h
fffff804`1392c347 488b8424a8000000 mov     rax,qword ptr [rsp+0A8h]

這是NtAccessCheck.該函數的實現在比SSDT自身更低的地址中.來試用1索引執行相同練習:

kd> u nt!KiServiceTable+ffffffff`ffcf77b0
nt!NtWorkerFactoryWorkerReady:
fffff804`139363d0 4c8bdc          mov     r11,rsp
fffff804`139363d3 49895b08        mov     qword ptr [r11+8],rbx

現在得到1系統調用號:NtWorkerFactoryWorkerReady.
對那些喜歡WinDbg腳本的人,編寫一個腳本來很好地顯示所有系統調用函數及其索引.

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

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

相關文章

人工智能冗余:大語言模型為何有時表現不佳(以及我們能做些什么)

像 GPT - 4 這樣的大語言模型(LLMs)徹底改變了我們與技術交互的方式。它們可以撰寫文章、生成代碼、回答問題,甚至幫助我們構思創意。但任何花時間使用過這些模型的人都知道,它們的輸出有時會讓人感覺……不太對勁。表述冗長、格式…

Cursor替代品亞馬遜出品Kiro下載

Cursor替代品亞馬遜出品Kiro下載 支持Claude Sonnet4.0與3.7 點擊下載 備用鏈接:https://pan.xunlei.com/s/VOW-nBmVgR3ewIIAm7jDsf99A1?pwd6bqu#

MySQL 事務管理

一、前言 CURD 不加控制,會有什么問題? CURD 滿足什么屬性,能解決上述問題? 買票的過程得是原子的。買票應該不能受互相的影響。買完票應該要永久有效。買前和買后都要是確定的狀態。 什么是事務? 事務就是一組 DML 語…

yarn在macOS上的安裝與鏡像源配置:全方位指南

在前端開發領域,高效的包管理工具是提升開發效率的關鍵。yarn 作為一款由 Facebook 推出的包管理器,憑借其快速、可靠、安全的特性,逐漸成為眾多開發者的首選。對于 macOS 用戶而言,正確安裝 yarn 并合理配置鏡像源,能…

Qt 插件架構開發與應用

Qt的插件架構是其模塊化和可擴展性的核心機制之一,它允許開發者通過動態加載插件(Plugins)擴展應用功能,而無需重新編譯主程序。這種架構廣泛應用于IDE(如Qt Creator)、媒體播放器(解碼器擴展&a…

打破傳統局限:FinOps云成本優化助力企業云成本管理升級

在云計算日益普及的當下,企業紛紛將業務遷移到云端,以期獲得更高效、靈活的IT資源管理方式。然而,云成本管理問題也隨之而來,高額的云支出、資源利用不充分、成本控制難等,成為企業云管理之路上的絆腳石。此時,奇墨科技FinOps云成本優化正以其獨特的優勢,助力企業打破傳統局限,…

HDFS寫性能優化技巧詳解:從理論到實踐

HDFS寫性能優化概述在大數據處理的生態系統中,Hadoop分布式文件系統(HDFS)作為核心存儲層,其寫性能直接影響著整個數據處理管道的效率。隨著數據規模的指數級增長,企業對HDFS寫入吞吐量和延遲的要求日益嚴苛&#xff0…

基于AutoJawSegment項目的CBCT圖像分割實踐指南

基于AutoJawSegment項目的CBCT圖像分割實踐指南 前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家,覺得好請收藏。點擊跳轉到網站。 1. 項目背景與概述 1.1 CBCT在口腔醫學中的應用 錐形束計算機斷層掃描(Cone Beam Computed Tomograph…

docker部署的ragflow服務遷移 數據卷遷移

[docker ragflow數據遷移]目錄背景一、我的配置文件? 數據存儲路徑一覽(基于你的配置文件)關于這些 volumes 的說明📁 如何查看這些卷在本地的具體位置?可能用到的docker 命令如下。📦 總結建議🛠? 如果想…

Chrome插件學習筆記(三)

Chrome插件學習筆記(三) 參考文章: https://blog.csdn.net/guoqiankunmiss/article/details/135847091https://blog.csdn.net/guoqiankunmiss/article/details/135974364 1、項目搭建 在前兩篇文章中使用的原生js去操作dom,很費勁…

Android系統中的4KB內存頁簡介

deepseek回答: Android系統中的4KB內存頁是虛擬內存管理的最小單位,其主要用途如下: 一、核心功能 虛擬地址映射 應用程序訪問內存時,系統將虛擬地址按4KB頁框映射到物理內存或磁盤空間,實現進程間的內存隔離和安全訪…

【Chrome】下載chromedriver的地址

下載chromedriver的地址低版本的最新版本的低版本的 http://chromedriver.storage.googleapis.com/index.html 最新版本的 https://googlechromelabs.github.io/chrome-for-testing/#stable

ISP算法——從顏色恒常性到白平衡

前面文章,介紹了人眼感知的物體顏色取決于光源的光譜組成與物體表面的光譜反射特性之間的相互作用。人類視覺的顏色感知是生物機制與認知智能協同作用的結果,人眼視網膜上的視錐細胞檢測光的顏色,視桿細胞分析光的亮度,再共同轉化…

工業缺陷檢測的計算機視覺方法總結

工業缺陷檢測的計算機視覺方法總結 傳統方法 特征提取方式: 顏色:基于HSV/RGB空間分析,如顏色直方圖、顏色矩等紋理:采用LBP、Haar、Gabor濾波器等算子提取紋理模式形狀:基于Hu矩、Zernike矩等數學描述符刻畫幾何特性尺…

js實現宮格布局圖片放大交互動畫

可直接運行代碼 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><title>五圖交互布局</title><style>* {box-sizing: border-box;margin: 0;padding: 0;}.gallery {display: grid;grid-template-c…

easyexcel流式導出

EasyExcel 支持流式導出&#xff0c;這是它的一個重要特性。流式導出可以有效解決大數據量導出時的內存溢出問題。流式導出的優勢內存友好 &#xff1a;不會一次性將所有數據加載到內存中適合大數據量 &#xff1a;可以處理百萬級甚至更多的數據性能穩定 &#xff1a;內存占用相…

廣州 VR 安全用電技術:工作原理、特性及優勢探析?

&#xff08;一&#xff09;沉浸式學習體驗? 在廣州&#xff0c;VR 用電安全培訓技術給用電安全培訓帶來變革。借助頭戴式顯示設備等硬件&#xff0c;結合 3D 建模和實時渲染技術&#xff0c;打造廣州特色用電場景。員工戴上 VR 設備進入虛擬電力場景&#xff0c;能看到電氣設…

2.Linux 網絡配置

Linux: 網絡配置 版本為centos7 網卡配置文件&#xff1a; /etc/sysconfig/network-scripts/ifcfg-ens33 [rootkami /]# cat /etc/sysconfig/network-scripts/ifcfg-ens33 TYPEEthernet /類型&#xff1a;以太網 PROXY_METHODnone BROWSER_ONLYno BOOTPROTOnone /網絡配…

FPGA Verilog 入門語法指南

FPGA Verilog 入門語法指南 ?? 目錄 Verilog與C語言對比 基礎關鍵字 數據類型 運算符 控制結構 數值表示 阻塞與非阻塞賦值 模塊結構 預處理指令

【鴻蒙HarmonyOS Next App實戰開發】視頻提取音頻

在多媒體處理場景中&#xff0c;經常需要從視頻文件中提取純凈的音頻軌道。本文將介紹如何在HarmonyOS應用中實現這一功能&#xff0c;核心代碼基于ohos/mp4parser庫的FFmpeg能力。 功能概述 我們實現了一個完整的視頻音頻提取頁面&#xff0c;包含以下功能&#xff1a; 通過…