3.1 KiB
The Status System
SindriKit utilizes a universal status reporting mechanism built around the snd_status_t structure. Traditional C error handling (returning raw integers or NULL pointers) is often insufficient for complex offensive tooling, as it fails to capture critical contextual information (such as the underlying OS error code) when a failure occurs deep within an operation.
The SindriKit status system is designed to provide maximum verbosity during development while guaranteeing absolute zero-footprint string literal emissions during production deployments.
The snd_status_t Structure
Every function in the framework that can fail returns a snd_status_t object (defined in include/sindri/common/status.h).
The structure tracks the following:
code: A unifiedsnd_status_code_tenumeration detailing the exact framework-level error (e.g.,SND_STATUS_NT_HEADERS_TRUNCATED,SND_STATUS_SSN_NOT_FOUND).os_error: The native OS error code captured at the moment of failure (viaGetLastError()or an NTSTATUS value).
Development vs. Production Tiers (OpSec)
The true power of the status system lies in how it interacts with the SND_DEBUG preprocessor macro (controlled via the SND_ENABLE_DEBUG CMake variable).
Debug Tier (SND_DEBUG=1)
During development, the snd_status_t structure expands to include heavily detailed telemetry:
file: The C source file where the error occurred (__FILE__).line: The exact line number (__LINE__).context: A dynamically formatted string buffer (up to 128 chars) providing hyper-specific details (e.g., "Failed to resolve API hash 0xDEADBEEF").
This allows operators to pinpoint exactly why an evasion primitive or loader sequence failed without relying on external debuggers.
Silent Tier (SND_DEBUG=0)
Caution
When compiling for an operation, emitting plaintext string literals (like file paths or error contexts) into the payload's
.rdatasection creates massive, easily signatureable IOCs.
When SND_ENABLE_DEBUG is disabled, the status macros dynamically shrink the snd_status_t struct:
- The
file,line, andcontextfields are completely excised from the struct definition. - The
SND_ERR_CTXmacro ignores all string formatting arguments. - The compiled output is reduced to pure integer assignments (just
codeandos_error).
This achieves a completely silent, stringless release build without forcing the operator to manually strip out error handling code.
Helper Macros
Developers interact with the status system using a suite of context-aware macros:
SND_OK: Returns a successful status.SND_ERR(code): Returns a generic framework error.SND_ERR_W32(code): Returns a framework error and automatically capturesGetLastError().SND_ERR_CTX(code, fmt, ...): Returns an error with a customprintf-style formatted string (which is automatically stripped in Silent builds).SND_ERR_W32_CTX(code, fmt, ...): Combines OS error capturing with custom string context.
By strictly adhering to this pattern, all toolkit domains inherit both robust diagnostics and guaranteed operational security.