| HyperDbg Debugger
    | 
Attaching and detaching for debugging user-mode processes. More...
#include "pch.h"| Functions | |
| BOOLEAN | AttachingInitialize () | 
| Initialize the attaching mechanism. | |
| UINT64 | AttachingCreateProcessDebuggingDetails (UINT32 ProcessId, BOOLEAN Enabled, BOOLEAN Is32Bit, BOOLEAN CheckCallbackAtFirstInstruction, PEPROCESS Eprocess, UINT64 PebAddressToMonitor, UINT64 UsermodeReservedBuffer) | 
| Create user-mode debugging details for threads. | |
| PUSERMODE_DEBUGGING_PROCESS_DETAILS | AttachingFindProcessDebuggingDetailsByToken (UINT64 Token) | 
| Find user-mode debugging details for threads by token. | |
| PUSERMODE_DEBUGGING_PROCESS_DETAILS | AttachingFindProcessDebuggingDetailsByProcessId (UINT32 ProcessId) | 
| Find user-mode debugging details for threads by process Id. | |
| PUSERMODE_DEBUGGING_PROCESS_DETAILS | AttachingFindProcessDebuggingDetailsInStartingPhase () | 
| Find user-mode debugging details for threads that is in the start-up phase. | |
| VOID | AttachingRemoveAndFreeAllProcessDebuggingDetails () | 
| Remove and deallocate all thread debuggig details. | |
| BOOLEAN | AttachingRemoveProcessDebuggingDetailsByToken (UINT64 Token) | 
| Remove user-mode debugging details for threads by its token. | |
| BOOLEAN | AttachingSetStartingPhaseOfProcessDebuggingDetailsByToken (BOOLEAN Set, UINT64 Token) | 
| Set the start up phase of a debugging thread buffer by its token. | |
| BOOLEAN | AttachingReachedToValidLoadedModule (PROCESSOR_DEBUGGING_STATE *DbgState, PUSERMODE_DEBUGGING_PROCESS_DETAILS ProcessDebuggingDetail) | 
| Handle cases where we reached to the valid loaded module The main module should be loaded once we reach to this function. | |
| VOID | AttachingHandleEntrypointInterception (PROCESSOR_DEBUGGING_STATE *DbgState) | 
| Handle the interception of finding the entrypoint on attaching to user-mode process. | |
| BOOLEAN | AttachingAdjustNopSledBuffer (UINT64 ReservedBuffAddress, UINT32 ProcessId) | 
| Allocate a nop-sled buffer. | |
| BOOLEAN | AttachingCheckPageFaultsWithUserDebugger (UINT32 CoreId, UINT64 Address, UINT32 PageFaultErrorCode) | 
| Check page-faults with user-debugger. | |
| BOOLEAN | AttachingConfigureInterceptingThreads (UINT64 ProcessDebuggingToken, BOOLEAN Enable) | 
| Enable or disable the thread intercepting phase. | |
| BOOLEAN | AttachingCheckForSafeCallbackRequestedInitializations (PDEBUGGER_ATTACH_DETACH_USER_MODE_PROCESS AttachRequest, UINT64 ProcessDebuggingToken) | 
| This function checks whether any special initialization is needed while attaching to a process that requests a callback. | |
| BOOLEAN | AttachingPerformAttachToProcess (PDEBUGGER_ATTACH_DETACH_USER_MODE_PROCESS AttachRequest, BOOLEAN IsAttachingToEntrypoint) | 
| Attach to the target process. | |
| BOOLEAN | AttachingHandleCr3VmexitsForThreadInterception (UINT32 CoreId, CR3_TYPE NewCr3) | 
| Handle the cr3 vm-exits for thread interception. | |
| BOOLEAN | AttachingCheckUnhandledEptViolation (UINT32 CoreId, UINT64 ViolationQualification, UINT64 GuestPhysicalAddr) | 
| handling unhandled EPT violations | |
| BOOLEAN | AttachingRemoveHooks (PDEBUGGER_ATTACH_DETACH_USER_MODE_PROCESS AttachRequest) | 
| Clearing hooks after resuming the process. | |
| BOOLEAN | AttachingPauseProcess (PDEBUGGER_ATTACH_DETACH_USER_MODE_PROCESS PauseRequest) | 
| Pauses the target process. | |
| BOOLEAN | AttachingKillProcess (PDEBUGGER_ATTACH_DETACH_USER_MODE_PROCESS KillRequest) | 
| Kill the target process from kernel-mode. | |
| BOOLEAN | AttachingPerformDetach (PDEBUGGER_ATTACH_DETACH_USER_MODE_PROCESS DetachRequest) | 
| Clearing hooks after resuming the process. | |
| BOOLEAN | AttachingSwitchProcess (PDEBUGGER_ATTACH_DETACH_USER_MODE_PROCESS SwitchRequest) | 
| Switch to the target thread. | |
| BOOLEAN | AttachingQueryCountOfActiveDebuggingThreadsAndProcesses (PDEBUGGER_ATTACH_DETACH_USER_MODE_PROCESS QueryCountOfDebugThreadsRequest) | 
| Query count of active debugging threads. | |
| BOOLEAN | AttachingQueryDetailsOfActiveDebuggingThreadsAndProcesses (PVOID BufferToStoreDetails, UINT32 BufferSize) | 
| Query details of active debugging threads. | |
| VOID | AttachingTargetProcess (PDEBUGGER_ATTACH_DETACH_USER_MODE_PROCESS Request) | 
| Dispatch and perform attaching tasks. | |
Attaching and detaching for debugging user-mode processes.
Allocate a nop-sled buffer.
| ReservedBuffAddress | |
| ProcessId | 
| BOOLEAN AttachingCheckForSafeCallbackRequestedInitializations | ( | PDEBUGGER_ATTACH_DETACH_USER_MODE_PROCESS | AttachRequest, | 
| UINT64 | ProcessDebuggingToken ) | 
This function checks whether any special initialization is needed while attaching to a process that requests a callback.
this function should not be called in vmx-root
| AttachRequest | |
| ProcessDebuggingToken | 
| BOOLEAN AttachingCheckPageFaultsWithUserDebugger | ( | UINT32 | CoreId, | 
| UINT64 | Address, | ||
| UINT32 | PageFaultErrorCode ) | 
Check page-faults with user-debugger.
| CoreId | |
| Address | |
| PageFaultErrorCode | 
| BOOLEAN AttachingCheckUnhandledEptViolation | ( | UINT32 | CoreId, | 
| UINT64 | ViolationQualification, | ||
| UINT64 | GuestPhysicalAddr ) | 
handling unhandled EPT violations
| CoreId | |
| ViolationQualification | |
| GuestPhysicalAddr | 
Enable or disable the thread intercepting phase.
this function should be called in vmx non-root
| ProcessDebuggingToken | |
| Enable | 
| UINT64 AttachingCreateProcessDebuggingDetails | ( | UINT32 | ProcessId, | 
| BOOLEAN | Enabled, | ||
| BOOLEAN | Is32Bit, | ||
| BOOLEAN | CheckCallbackAtFirstInstruction, | ||
| PEPROCESS | Eprocess, | ||
| UINT64 | PebAddressToMonitor, | ||
| UINT64 | UsermodeReservedBuffer ) | 
Create user-mode debugging details for threads.
| ProcessId | |
| Is32Bit | |
| Eprocess | |
| PebAddressToMonitor | |
| UsermodeReservedBuffer | 
| PUSERMODE_DEBUGGING_PROCESS_DETAILS AttachingFindProcessDebuggingDetailsByProcessId | ( | UINT32 | ProcessId | ) | 
Find user-mode debugging details for threads by process Id.
| ProcessId | 
| PUSERMODE_DEBUGGING_PROCESS_DETAILS AttachingFindProcessDebuggingDetailsByToken | ( | UINT64 | Token | ) | 
Find user-mode debugging details for threads by token.
| Token | 
| PUSERMODE_DEBUGGING_PROCESS_DETAILS AttachingFindProcessDebuggingDetailsInStartingPhase | ( | ) | 
Find user-mode debugging details for threads that is in the start-up phase.
Handle the cr3 vm-exits for thread interception.
this function should be called in vmx-root
| CoreId | |
| NewCr3 | 
| VOID AttachingHandleEntrypointInterception | ( | PROCESSOR_DEBUGGING_STATE * | DbgState | ) | 
Handle the interception of finding the entrypoint on attaching to user-mode process.
| DbgState | The state of the debugger on the current core | 
| BOOLEAN AttachingInitialize | ( | ) | 
Initialize the attaching mechanism.
as we use the functionalities for these functions, we initialize them from the debugger at start up of debugger (not initialization of user-debugger)
| BOOLEAN AttachingKillProcess | ( | PDEBUGGER_ATTACH_DETACH_USER_MODE_PROCESS | KillRequest | ) | 
Kill the target process from kernel-mode.
this function should not be called in vmx-root
| KillRequest | 
| BOOLEAN AttachingPauseProcess | ( | PDEBUGGER_ATTACH_DETACH_USER_MODE_PROCESS | PauseRequest | ) | 
Pauses the target process.
this function should not be called in vmx-root
| PauseRequest | 
| BOOLEAN AttachingPerformAttachToProcess | ( | PDEBUGGER_ATTACH_DETACH_USER_MODE_PROCESS | AttachRequest, | 
| BOOLEAN | IsAttachingToEntrypoint ) | 
Attach to the target process.
this function should not be called in vmx-root
| AttachRequest | |
| IsAttachingToEntrypoint | 
| BOOLEAN AttachingPerformDetach | ( | PDEBUGGER_ATTACH_DETACH_USER_MODE_PROCESS | DetachRequest | ) | 
Clearing hooks after resuming the process.
this function should not be called in vmx-root
| DetachRequest | 
| BOOLEAN AttachingQueryCountOfActiveDebuggingThreadsAndProcesses | ( | PDEBUGGER_ATTACH_DETACH_USER_MODE_PROCESS | QueryCountOfDebugThreadsRequest | ) | 
Query count of active debugging threads.
| QueryCountOfDebugThreadsRequest | 
| BOOLEAN AttachingQueryDetailsOfActiveDebuggingThreadsAndProcesses | ( | PVOID | BufferToStoreDetails, | 
| UINT32 | BufferSize ) | 
Query details of active debugging threads.
| BufferToStoreDetails | |
| BufferSize | 
| BOOLEAN AttachingReachedToValidLoadedModule | ( | PROCESSOR_DEBUGGING_STATE * | DbgState, | 
| PUSERMODE_DEBUGGING_PROCESS_DETAILS | ProcessDebuggingDetail ) | 
Handle cases where we reached to the valid loaded module The main module should be loaded once we reach to this function.
| DbgState | The state of the debugger on the current core | 
| ProcessDebuggingDetail | 
| VOID AttachingRemoveAndFreeAllProcessDebuggingDetails | ( | ) | 
Remove and deallocate all thread debuggig details.
| BOOLEAN AttachingRemoveHooks | ( | PDEBUGGER_ATTACH_DETACH_USER_MODE_PROCESS | AttachRequest | ) | 
Clearing hooks after resuming the process.
this function should not be called in vmx-root
| AttachRequest | 
Remove user-mode debugging details for threads by its token.
| Token | 
Set the start up phase of a debugging thread buffer by its token.
| Set | |
| Token | 
| BOOLEAN AttachingSwitchProcess | ( | PDEBUGGER_ATTACH_DETACH_USER_MODE_PROCESS | SwitchRequest | ) | 
Switch to the target thread.
| SwitchRequest | 
| VOID AttachingTargetProcess | ( | PDEBUGGER_ATTACH_DETACH_USER_MODE_PROCESS | Request | ) | 
Dispatch and perform attaching tasks.
this function should not be called in vmx-root
| AttachRequest |