簡體   English   中英

Windows中如何在系統調用后進行反匯編

[英]How to get disassembly after syscall in Windows

我想獲取NtDelayExecution()匯編程序源,以了解什么是Sleep()以及它在內部如何工作。 但是只有我在Visual Studio 2017調試器中得到的是:

NtDelayExecution:
    mov         r10,rcx  
    mov         eax,34h  
    test        byte ptr [........],1  
    jne         NtDelayExecution+15h 
    syscall  
    ret 
NtDelayExecution+15h:
    int         2Eh  
    ret  

它通過syscall指令,就像它是常規mov而不是call (即使我按F11鍵)一樣。 結果只是“神奇地”出現,沒有提供結果的可見代碼,也沒有找到痕跡或提示其位置的方法。 似乎它的工作方式類似於DOS時代的int 21h中斷。 它放在eax中的是一個功能編號。

拆卸發生了什么的最簡單方法是什么? 也許一些有關該主題的文獻可供閱讀? (我的操作系統是Windows 10 x64,而IDE是Visual Studio 2017社區)

不知道,是否真的需要內核調試會話本身。 如果您只需要反匯編並且不熟悉內核調試,則可以使用更簡單的方法。

馬克·魯西諾維奇(Mark Russinovich)的Process Explorer是一個易於使用的工具,可以幫助您找到線索並調查正在發生的事情。 例如,它可以顯示線程調用堆棧,並使用人類可讀的名稱公開堆棧的內核部分:

ntoskrnl.exe!KeSynchronizeExecution+0x3f26
ntoskrnl.exe!KeWaitForMultipleObjects+0x109c
ntoskrnl.exe!KeWaitForMultipleObjects+0xb3f
ntoskrnl.exe!KeWaitForMutexObject+0x377
ntoskrnl.exe!KeUnstackDetachProcess+0x2230
ntoskrnl.exe!ObDereferenceObjectDeferDelete+0x28a
ntoskrnl.exe!KeWaitForMultipleObjects+0x1283
ntoskrnl.exe!KeWaitForMultipleObjects+0xb3f
ntoskrnl.exe!KeDelayExecutionThread+0x106
ntoskrnl.exe!CcUnpinData+0xfe
ntoskrnl.exe!setjmpex+0x3aa3
ntdll.dll!NtDelayExecution+0x14
test.exe!main+0x1f
test.exe!__scrt_common_main_seh+0x11d
KERNEL32.DLL!BaseThreadInitThunk+0x14
ntdll.dll!RtlUserThreadStart+0x21

下一步可能只是使用某些反匯編程序(例如x64dbgIDA Pro)反匯編ntoskrnl.exe ,您將收到請求的反匯編,然后從KeDelayExecutionThread()條目進行調查。

至於文學,我可以為您推薦Mark Russinovich的書Windows Internals

祝好運!

該例程正在執行系統調用。

mov eax, 34h  

上面的部分將系統調用索引(也稱為標識符)放入EAX寄存器中,Windows內核隨后將依賴該EAX寄存器通過其內部的系統服務例程表進行查找。 換句話說,這將使Windows內核知道系統調用是針對NtDelayExecution的。

syscall

上面的部分實際上是在進行系統調用,這是從用戶模式到內核模式的過渡。 SYSCALL指令是x86指令集的一部分。

然后,Windows內核將獲取地址到NtDelayExecution,該地址將出現在NTOSKRNL(內核模式內存)下,對其進行調用,然后將返回狀態回傳到由NTDLL導出的用戶模式版本的NtDelayExecution。除了讓內核執行操作的系統調用外,什么都沒有。

用外行的術語來說,您無法在用戶模式下找到所需的信息。 NtDelayExecution(NTDLL)通過系統調用向內核發出信號,以便內核執行操作。 您需要研究內核模式調試或在NTOSKRNL上進行靜態逆向工程。

如果您可以學習一些有關內核模式調試的知識,請在NtDelayExecution(NTOSKRNL)上設置一個斷點,以便在用戶模式調用者(通過系統調用)或內核模式調用者(不需要系統調用-因為在這種情況下,調用方已經處於內核模式)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM