nt!MmMapViewInSystemCache函數分析PointerPte的填充

第一部分:

1: kd> kc
?#
00 nt!MmMapViewInSystemCache
01 nt!CcGetVacbMiss
02 nt!CcGetVirtualAddress
03 nt!CcMapData
04 Ntfs!NtfsMapStream
05 Ntfs!NtfsReadBootSector
06 Ntfs!NtfsMountVolume
07 Ntfs!NtfsCommonFileSystemControl
08 Ntfs!NtfsFspDispatch
09 nt!ExpWorkerThread
0a nt!PspSystemThreadStartup
0b nt!KiThreadStartup


1: kd> p
nt!MmMapViewInSystemCache+0x32b:
80aaf01d 8b0e??????????? mov???? ecx,dword ptr [esi]
1: kd> dv
??? SectionToMap = 0xe127a740
??? CapturedBase = 0x89988000
?? SectionOffset = 0xf78d6900 {-9175257283469246464}
CapturedViewSize = 0x00000040
?????? PteOffset = 0
?????? LastProto = 0x00000000
???? PteContents = struct _MMPTE
???????? OldIrql = 0x00 ''
???????? LastPte = 0x89988000
?? LastPteOffset = 0x40
????????? Waited = 1
??????? ProtoPte = 0xf78d6900
?? NumberOfPages = 0x40


??? if (PointerPte->u.List.NextEntry == MM_EMPTY_PTE_LIST) {


??? if ((PointerPte + 1)->u.List.NextEntry == (KeReadTbFlushTimeStamp() & MM_FLUSH_COUNTER_MASK)) {
??????? KeFlushEntireTb (TRUE, TRUE);
??? }

第二部分:

1: kd> p
nt!MmMapViewInSystemCache+0x355:
80aaf047 8b4e04????????? mov???? ecx,dword ptr [esi+4]
1: kd> r
eax=00001314 ebx=898ff908 ecx=c10c0000 edx=00000000 esi=c0304200


1: kd> dd c0304200
c0304200? c10c0000 00000000 00000000 00000000

??? //
??? // Zero this explicitly now since the number of pages may be only 1.
??? //

??? (PointerPte + 1)->u.List.NextEntry = 0;

1: kd> p
nt!MmMapViewInSystemCache+0x36d:
80aaf05f 816604ff0f0000? and???? dword ptr [esi+4],0FFFh

1: kd> r
eax=00001314 ebx=898ff908 ecx=00000000 edx=00000000 esi=c0304200 edi=00000000


第三部分:

??? *CapturedBase = MiGetVirtualAddressMappedByPte (PointerPte);?? ??? ?c1080000

#define MiGetVirtualAddressMappedByPte(PTE) ((PVOID)((ULONG)(PTE) << 10))

c0304200

1100 0000 0011 0000 0100 0010 0000 0000
11 0000 0100 0010 0000 0000 00 0000 0000 ?

11 00?? ?00 01?? ?00 00?? ?10 00?? ?00 00?? ?00 00 0000 0000
c1080000

1: kd> !pte c1080000
???????????????? VA c1080000
PDE at C0300C10???????? PTE at C0304200
contains 0A03F963?????? contains C10C0000
pfn a03f? -G-DA--KWEV?? not valid
???????????????????????? Page has been freed


第四部分:

回顧PointerPte的由來:

??? PointerPte = MmFirstFreeSystemCache;

??? //
??? // Update next free entry.
??? //

??? ASSERT (PointerPte->u.Hard.Valid == 0);

??? MmFirstFreeSystemCache = MmSystemCachePteBase + PointerPte->u.List.NextEntry;
??? ASSERT (MmFirstFreeSystemCache <= MiGetPteAddress (MmSystemCacheEnd));

1: kd> p
nt!MmMapViewInSystemCache+0x377:
80aaf069 8bc6??????????? mov???? eax,esi
1: kd> p
nt!MmMapViewInSystemCache+0x379:
80aaf06b c1e00a????????? shl???? eax,0Ah
1: kd> r
eax=c0304200


1: kd> dv
??? SectionToMap = 0xe127a740
??? CapturedBase = 0x89988000

1: kd> dx -r1 ((ntkrnlmp!void * *)0x89988000)
((ntkrnlmp!void * *)0x89988000)???????????????? : 0x89988000 [Type: void * *]
??? 0xc1080000

1: kd> !pte 0xc1080000
???????????????? VA c1080000
PDE at C0300C10???????? PTE at C0304200
contains 0A03F963?????? contains C10C0000
pfn a03f? -G-DA--KWEV?? not valid
???????????????????????? Page has been freed


1: kd> x nt!MmFirstFreeSystemCache
80b23594????????? nt!MmFirstFreeSystemCache = 0xc0304300


1: kd> dd 0xc0304200?? ??? ?//0xc0304200下一個是0xc0304300
c0304200? c10c0000

304300
0011 0000 0100 0011 0000 0000
0011 0000 0100 0011 0000 00
00?? ?11 00?? ?00 01?? ?00 00?? ?11 00?? ?00 00
c10c0?? ??? ?//正確

1: kd> dd 0xc0304200
c0304200? c10c0000 00000000 00000000 00000000
c0304210? 00000000 00000000 00000000 00000000


第五部分:

1: kd> dt subsection 0x898ff8d8+30
nt!SUBSECTION
?? +0x000 ControlArea????? : 0x898ff8d8 _CONTROL_AREA
?? +0x004 u??????????????? : __unnamed
?? +0x008 StartingSector?? : 0
?? +0x00c NumberOfFullSectors : 0x100
?? +0x010 SubsectionBase?? : 0xe1009c00 _MMPTE
?? +0x014 UnusedPtes?????? : 0
?? +0x018 PtesInSubsection : 0x100
?? +0x01c NextSubsection?? : (null)

?????? PteOffset = 0

??? ProtoPte = &Subsection->SubsectionBase[PteOffset];?? ??? ?=0xe1009c00

1: kd> dd 0xe1009c00
e1009c00? fcfe94c2 fcfe94c2 fcfe94c2 fcfe94c2
e1009c10? fcfe94c2 fcfe94c2 fcfe94c2 fcfe94c2
e1009c20? fcfe94c2 fcfe94c2 fcfe94c2 fcfe94c2
e1009c30? fcfe94c2 fcfe94c2 fcfe94c2 fcfe94c2

1: kd> p
nt!MmMapViewInSystemCache+0x384:
80aaf076 8d0c88????????? lea???? ecx,[eax+ecx*4]
1: kd> r
eax=e1009c00 ebx=898ff908 ecx=00000000 edx=00000000 esi=c0304200 edi=00000000
eip=80aaf076 esp=f78d6910 ebp=f78d6930 iopl=0???????? nv up ei ng nz na pe nc
cs=0008? ss=0010? ds=0023? es=0023? fs=0030? gs=0000???????????? efl=00000286
nt!MmMapViewInSystemCache+0x384:
80aaf076 8d0c88????????? lea???? ecx,[eax+ecx*4]
1: kd> p
nt!MmMapViewInSystemCache+0x387:
80aaf079 894d10????????? mov???? dword ptr [ebp+10h],ecx
1: kd> r
eax=e1009c00 ebx=898ff908 ecx=e1009c00 edx=00000000 esi=c0304200 edi=00000000


1: kd> dv
??? SectionToMap = 0xe127a740
?
??????? ProtoPte = 0xe1009c00?? ??? ?//正確

第六部分:


??? LastProto = &Subsection->SubsectionBase[Subsection->PtesInSubsection];


?? +0x018 PtesInSubsection : 0x100

0xe1009c00+0x100*4=

1: kd> ?0xe1009c00+0x100*4
Evaluate expression: -520052736 = e100a000

1: kd> dv
??? SectionToMap = 0xe127a740

?????? LastProto = 0xe100a000


??? LastPte = PointerPte + NumberOfPages;?? ?eax=c0304300

0xc0304200+0x40*4=
1: kd> ?0xc0304200+0x40*4
Evaluate expression: -1070578944 = c0304300

1: kd> p
nt!MmMapViewInSystemCache+0x396:
80aaf088 8d0486????????? lea???? eax,[esi+eax*4]
1: kd> r
eax=00000040 ebx=898ff908 ecx=00000100 edx=00000000 esi=c0304200 edi=00000000
eip=80aaf088 esp=f78d6910 ebp=f78d6930 iopl=0???????? nv up ei ng nz na pe nc
cs=0008? ss=0010? ds=0023? es=0023? fs=0030? gs=0000???????????? efl=00000286
nt!MmMapViewInSystemCache+0x396:
80aaf088 8d0486????????? lea???? eax,[esi+eax*4]
1: kd> p
nt!MmMapViewInSystemCache+0x399:
80aaf08b 8d7e08????????? lea???? edi,[esi+8]
1: kd> r
eax=c0304300

第七部分:


??? while (PointerPte < LastPte) {

??????? if (ProtoPte >= LastProto) {

??????????? //
??????????? // Handle extended subsections.
??????????? //

??????????? Subsection = Subsection->NextSubsection;
??????????? ProtoPte = Subsection->SubsectionBase;
??????????? LastProto = &Subsection->SubsectionBase[
??????????????????????????????????????? Subsection->PtesInSubsection];
??????? }
??????? PteContents.u.Long = MiProtoAddressForKernelPte (ProtoPte);
??????? MI_WRITE_INVALID_PTE (PointerPte, PteContents);

??????? ASSERT (((ULONG_PTR)PointerPte & (MM_COLOR_MASK << PTE_SHIFT)) ==
???????????????? (((ULONG_PTR)ProtoPte & (MM_COLOR_MASK << PTE_SHIFT))));

??????? PointerPte += 1;
??????? ProtoPte += 1;
??? }

??? ProtoPte = &Subsection->SubsectionBase[PteOffset];?? ??? ?=0xe1009c00

#define MiProtoAddressForKernelPte(proto_va)? MiProtoAddressForPte(proto_va)

#define MiProtoAddressForPte(proto_va)? \
?? ((((((ULONG)proto_va - MmProtopte_Base) >> 1) & (ULONG)0x000000FE)?? | \
??? (((((ULONG)proto_va - MmProtopte_Base) << 2) & (ULONG)0xfffff800))) | \
??? MM_PTE_PROTOTYPE_MASK)

#define MM_PTE_PROTOTYPE_MASK???? 0x400


#define MmProtopte_Base ((ULONG)MmPagedPoolStart)
1: kd> x nt!MmPagedPoolStart
80b15028????????? nt!MmPagedPoolStart = 0xe1000000

1: kd> !pte 0xe1009c00
???????????????? VA e1009c00
PDE at C0300E10???????? PTE at C0384024
contains 0A1C0963?????? contains 0A1CD963
pfn a1c0? -G-DA--KWEV?? pfn a1cd? -G-DA--KWEV

9c00

1001 1100 0000 0000
1001 1100 0000 000

1001 110?? ?0 000?? ?0 000
?? ?1 111?????? 1 110

1001 1100 0000 0000 00

10?? ?01 11?? ?00 00?? ?00 00?? ?00 00
27000


27400

第八部分:


??????? PteContents.u.Long = MiProtoAddressForKernelPte (ProtoPte);?? ?//關鍵地方1:


1: kd> p
nt!MmMapViewInSystemCache+0x3ee:
80aaf0e0 8b4510????????? mov???? eax,dword ptr [ebp+10h]
1: kd> p
nt!MmMapViewInSystemCache+0x3f1:
80aaf0e3 2b052850b180??? sub???? eax,dword ptr [nt!MmPagedPoolStart (80b15028)]
1: kd> r
eax=e1009c00


1: kd> p
nt!MmMapViewInSystemCache+0x411:
80aaf103 894d08????????? mov???? dword ptr [ebp+8],ecx
1: kd> r
eax=00027000 ebx=898ff908 ecx=00027400

第九部分:

??????? MI_WRITE_INVALID_PTE (PointerPte, PteContents);?? ?//關鍵地方2:

1: kd> p
nt!MmMapViewInSystemCache+0x506:
80aaf1f8 8906??????????? mov???? dword ptr [esi],eax
1: kd> r
eax=00027400 ebx=898ff908 ecx=f78d6920 edx=e7f77906 esi=c0304200 edi=80b79030

1: kd> dd 0xc0304200
c0304200? 00027400 00000000 00000000 00000000
c0304210? 00000000 00000000 00000000 00000000
c0304220? 00000000 00000000 00000000 00000000
c0304230? 00000000 00000000 00000000 00000000
c0304240? 00000000 00000000 00000000 00000000
c0304250? 00000000 00000000 00000000 00000000
c0304260? 00000000 00000000 00000000 00000000
c0304270? 00000000 00000000 00000000 00000000

1: kd> !pte 0xc0304200
???????????????? VA c1080000
PDE at C0300C10???????? PTE at C0304200
contains 0A03F963?????? contains 00027400
pfn a03f? -G-DA--KWEV?? not valid
???????????????????????? Proto: E1009C00


第十部分:

1: kd> dd 0xc0304200
c0304200? 00027400 00027402


1: kd> !pte 0xc0304204
???????????????? VA c1081000
PDE at C0300C10???????? PTE at C0304204
contains 0A03F963?????? contains 00027402
pfn a03f? -G-DA--KWEV?? not valid
???????????????????????? Proto: E1009C04

??????? ProtoPte = 0xe1009c08

第十一部分:

1: kd> dd 0xc0304200
c0304200? 00027400 00027402 00027404 00000000

1: kd> dd 0xc0304200
c0304200? 00027400 00027402 00027404 00027406
c0304210? 00027408 0002740a 0002740c 0002740e
c0304220? 00027410 00027412 00027414 00027416
c0304230? 00027418 0002741a 0002741c 0002741e
c0304240? 00027420 00027422 00027424 00027426
c0304250? 00027428 0002742a 0002742c 0002742e
c0304260? 00027430 00027432 00027434 00027436
c0304270? 00027438 0002743a 0002743c 0002743e

dv
??????? ProtoPte = 0xe1009c80

1: kd> dd 0xc0304200+80
c0304280? 00027440 00027442 00027444 00027446
c0304290? 00027448 0002744a 0002744c 0002744e
c03042a0? 00027450 00027452 00027454 00027456
c03042b0? 00027458 0002745a 0002745c 0002745e
c03042c0? 00027460 00027462 00027464 00027466
c03042d0? 00027468 0002746a 0002746c 0002746e
c03042e0? 00027470 00027472 00027474 00027476
c03042f0? 00027478 0002747a 0002747c 0002747e


??????? ProtoPte = 0xe1009cfc


1: kd> dd 0xe1009c00
e1009c00? fcfe94c2 fcfe94c2 fcfe94c2 fcfe94c2
e1009c10? fcfe94c2 fcfe94c2 fcfe94c2 fcfe94c2
e1009c20? fcfe94c2 fcfe94c2 fcfe94c2 fcfe94c2
e1009c30? fcfe94c2 fcfe94c2 fcfe94c2 fcfe94c2
e1009c40? fcfe94c2 fcfe94c2 fcfe94c2 fcfe94c2
e1009c50? fcfe94c2 fcfe94c2 fcfe94c2 fcfe94c2
e1009c60? fcfe94c2 fcfe94c2 fcfe94c2 fcfe94c2
e1009c70? fcfe94c2 fcfe94c2 fcfe94c2 fcfe94c2
1: kd> dd 0xe1009c00+80
e1009c80? fcfe94c2 fcfe94c2 fcfe94c2 fcfe94c2
e1009c90? fcfe94c2 fcfe94c2 fcfe94c2 fcfe94c2
e1009ca0? fcfe94c2 fcfe94c2 fcfe94c2 fcfe94c2
e1009cb0? fcfe94c2 fcfe94c2 fcfe94c2 fcfe94c2
e1009cc0? fcfe94c2 fcfe94c2 fcfe94c2 fcfe94c2
e1009cd0? fcfe94c2 fcfe94c2 fcfe94c2 fcfe94c2
e1009ce0? fcfe94c2 fcfe94c2 fcfe94c2 fcfe94c2
e1009cf0? fcfe94c2 fcfe94c2 fcfe94c2 fcfe94c2


1: kd> p
nt!MmMapViewInSystemCache+0x50f:
80aaf201 3b750c????????? cmp???? esi,dword ptr [ebp+0Ch]
1: kd> r
eax=0002747e ebx=898ff908 ecx=f78d6920 edx=e7f77906 esi=c0304300 edi=80b88f00
eip=80aaf201 esp=f78d6910 ebp=f78d6930 iopl=0???????? nv up ei ng nz ac pe nc
cs=0008? ss=0010? ds=0023? es=0023? fs=0030? gs=0000???????????? efl=00000296
nt!MmMapViewInSystemCache+0x50f:
80aaf201 3b750c????????? cmp???? esi,dword ptr [ebp+0Ch] ss:0010:f78d693c=c0304300
1: kd> dd f78d6930+c
f78d693c? c0304300

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

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

相關文章

Tailwind CSS 實戰,基于Kooboo構建AI對話框頁面(一)

在當今數字化時代&#xff0c;AI 助手已成為網站和應用不可或缺的一部分。本文將帶你一步步使用 Tailwind CSS 和 Kooboo 構建一個現代化的 AI 對話界面框。 一、選擇 Kooboo平臺 的核心優勢 智能提示&#xff1a;在輸入 class 屬性時&#xff0c;會自動觸發 Tailwind CSS 規則…

【JavaEE】-- 網絡原理

文章目錄 1. 網絡發展史1.1 廣域網1.2 局域網 2. 網絡通信基礎2.1 IP地址2.2 端口號2.3 認識協議2.4 五元組2.5 協議分層2.5.1 分層的作用2.5.2 OSI七層模型&#xff08;教科書&#xff09;2.5.3 TCP/IP五層&#xff08;或四層&#xff09;模型&#xff08;工業中常用&#xff…

UVa1384/LA3700 Interesting Yang Hui Triangle

UVa1384/LA3700 Interesting Yang Hui Triangle 題目鏈接題意分析AC 代碼 題目鏈接 本題是2006年icpc亞洲區域賽上海賽區的題目 題意 給出素數P和整數N&#xff0c;求楊輝三角第N1行中不能整除P的數有幾個&#xff0c; P < 1000 , N ≤ 10 9 P<1000,\;N≤10^9 P<1000…

文件系統與文件管理:從磁盤到內核的全鏈路解析

一、文件系統&#xff1a;磁盤的 “數據管家” 1.1 硬盤物理結構&#xff1a;數據存儲的硬件基礎 硬盤如同一個多層書架&#xff0c;由以下核心部件構成&#xff1a; 盤片&#xff1a;多層磁性圓盤&#xff0c;正反兩面覆蓋磁性涂層&#xff0c;用于存儲二進制數據&#xff…

HTML5 Canvas 星空戰機游戲開發全解析

HTML5 Canvas 星空戰機游戲開發全解析 一、游戲介紹 這是一款基于HTML5 Canvas開發的2D射擊游戲&#xff0c;具有以下特色功能&#xff1a; &#x1f680; 純代碼繪制的星空動態背景?? 三種不同特性的敵人類型&#x1f3ae; 鍵盤控制的玩家戰機&#x1f4ca; 完整的分數統…

Telegram平臺分發其聊天機器人Grok

每周跟蹤AI熱點新聞動向和震撼發展 想要探索生成式人工智能的前沿進展嗎&#xff1f;訂閱我們的簡報&#xff0c;深入解析最新的技術突破、實際應用案例和未來的趨勢。與全球數同行一同&#xff0c;從行業內部的深度分析和實用指南中受益。不要錯過這個機會&#xff0c;成為AI領…

【GlobalMapper精品教程】095:如何獲取無人機照片的拍攝方位角

文章目錄 一、加載無人機照片二、計算方位角三、Globalmapper符號化顯示方向四、arcgis符號化顯示方向一、加載無人機照片 打開軟件,加載無人機照片,在GLobalmapperV26中文版中,默認顯示如下的航線信息。 關于航線的起止問題,可以直接從照片名稱來確定。 二、計算方位角 …

SpringBoot使用ffmpeg實現視頻壓縮

ffmpeg簡介 FFmpeg 是一個開源的跨平臺多媒體處理工具集&#xff0c;用于錄制、轉換、編輯和流式傳輸音頻和視頻。它功能強大&#xff0c;支持幾乎所有常見的音視頻格式&#xff0c;是多媒體處理領域的核心工具之一。 官方文檔&#xff1a;https://ffmpeg.org/documentation.h…

OpenCv高階(十九)——dlib關鍵點定位

文章目錄 一、什么是人臉關鍵點定位&#xff1f;二、關鍵點模型的下載及關鍵信息的理解三、dlib關鍵點定位的簡單實現&#xff08;1&#xff09;導入必要的庫&#xff08;2&#xff09;從指定路徑讀取圖像文件&#xff08;3&#xff09;創建dlib的正面人臉檢測器對象&#xff0…

人工智能100問?第36問:什么是BERT?

目錄 一、通俗解釋 二、專業解析 三、權威參考 BERT是基于Transformer Encoder的雙向語言預訓練模型,具備強大的語義理解能力,是現代自然語言處理的重要基石。它是一套讓機器像人一樣“前后一起看”的語言理解技術,它讓AI不光“讀得快”,還“讀得懂”。現在很多搜索引擎…

Chrome/ Edge 瀏覽器彈出窗口隱藏菜單地址欄

Chrome 利用快捷方式&#xff0c;打開一個無地址欄的瀏覽器窗口&#xff0c;以百度為例 創建瀏覽器快捷方式&#xff0c;在目標欄里 添加 -apphttps://www.baidu.com 點擊【應用】&#xff0c;【確定】按鈕保存生效。后面通過空上快捷方式打開的瀏覽器沒有地址欄。 Edge瀏覽…

計算機網絡常見體系結構、分層必要性、分層設計思想以及專用術語介紹

計算機網絡體系結構 從本此開始&#xff0c;我們就要開始介紹有關計算機網絡體系結構的知識了。內容包括&#xff1a; 常見的計算機網絡體系結構 計算機網絡體系結構分層的必要性 計算機網絡體系結構的設計思想 舉例說明及專用術語 計算機網絡體系結構是計算機網絡課程中…

【C++】“多態”特性

文章目錄 一、多態的概念二、多態的定義實現1. 多態的構成條件1.1 虛函數1.2 虛函數的重寫 2. 多態的調用3. 虛函數重寫的其他問題3.1 協變3.2 析構函數的重寫 三、override和final關鍵字四、重載/重寫/隱藏的對比五、純虛函數和抽象類六、多態的原理 C的三大主要特性&#xff…

2025.5.27學習日記 linux三劍客 sed與正則表達式

sed是Stream Editor(字符流編輯器)的縮寫,簡稱流編輯器。 sed是操作、過濾和轉換文本內容的強大工具。 常用功能包括結合正則表達式對文件實現快速增刪改查 , 其中查詢的功能中最常用的兩大功能是過 濾 ( 過濾指定字符串)、取行(取出指定行)。 注意sed和awk使用單引號,雙引號…

文科小白學習Linux系統之安全管理

目錄 前言 一、SELinux安全上下文 1、SELinux 簡介 2、基礎操作命令 1. 查看SELinux狀態 2. 切換工作模式 3、安全上下文&#xff08;Security Context&#xff09; 1. 查看上下文 2. 修改上下文 chcon命令 semanage 命令 4、SELinux布爾值&#xff08;Booleans&am…

企業內訓系統源碼開發詳解:直播+錄播+考試的混合式學習平臺搭建

在企業數字化轉型的大潮中&#xff0c;員工培訓早已不再是傳統教室中的一場場“走過場”&#xff0c;而是通過技術驅動的“系統化能力提升”。尤其在知識更新換代加速、競爭壓力日益激烈的背景下&#xff0c;企業越來越傾向于建設自主可控、功能靈活、支持多種學習形態的內訓平…

智能化報銷與精細化管理:購物小票識別系統全面提升企業運營效率

在現代企業管理中&#xff0c;購物小票的處理一直是財務和運營管理中的一項挑戰。尤其在企業費用報銷、會員管理、庫存監控等環節&#xff0c;手動整理與核對小票不僅耗時費力&#xff0c;還容易產生錯誤。隨著人工智能技術的發展&#xff0c;企業亟需一種高效、智能的解決方案…

毫秒級數據采集的極致優化:如何用C#實現高性能、無冗余的實時文件寫入?

在工業控制、通信系統或高頻交易領域&#xff0c;毫秒級數據采集的精度直接決定系統性能。但一個棘手問題常被忽視&#xff1a;如何處理同一毫秒內的重復數據&#xff1f; 若簡單寫入所有數據&#xff0c;會導致文件臃腫、分析效率驟降&#xff1b;若處理不當&#xff0c;又可能…

NLua性能對比:C#注冊函數 vs 純Lua實現

引言 在NLua開發中&#xff0c;我們常面臨一個重要選擇&#xff1a;將C#函數注冊到Lua環境調用&#xff0c;還是直接在Lua中實現邏輯&#xff1f; 直覺告訴我們&#xff0c;C#作為編譯型語言性能更高&#xff0c;但跨語言調用的開銷是否會影響整體性能&#xff1f;本文通過基準…

go并發與鎖之sync.Mutex入門

sync.Mutex 原理&#xff1a;一個共享的變量&#xff0c;哪個線程握到了&#xff0c;哪個線程可以執行代碼 功能&#xff1a;一個性能不錯的悲觀鎖&#xff0c;使用方式和Java的ReentrantLock很像&#xff0c;就是手動Lock&#xff0c;手動UnLock。 使用例子&#xff1a; v…