kernel
Loading...
Searching...
No Matches
gen_offsets.c
Go to the documentation of this file.
1/*
2 * gen_offsets.c
3 * * Compiles with MatanelOS headers to generate NASM-compatible
4 * definitions for struct offsets, sizes, and enums.
5 */
6
7#define __OFFSET_GENERATOR__
8
9#include <stdio.h>
10#include <stddef.h>
11#include <stdint.h>
12#include <stdbool.h>
13
15#include "includes/ms.h"
16#include "includes/mm.h"
17#include "includes/ps.h"
18#include "includes/me.h"
19#include "includes/behavior.h"
20
21// --------------------------------------------------------------------------
22// MACROS FOR GENERATION
23// --------------------------------------------------------------------------
24
25#define GEN_COMMENT(msg) \
26 printf("\n; %s\n", msg)
27
28#define GEN_DEFINE(name, val) \
29 printf("%%define %-40s 0x%lX\n", #name, (uint64_t)(val))
30
31#define GEN_OFFSET(struct_name, member) \
32 printf("%%define %-40s 0x%lX\n", #struct_name "_" #member, offsetof(struct_name, member))
33
34#define GEN_SIZE(struct_name) \
35 printf("%%define SIZEOF_%-33s 0x%lX\n", #struct_name, sizeof(struct_name))
36
37int main(void) {
38 printf("; ===============================================================\n");
39 printf("; AUTOMATICALLY GENERATED FILE - DO NOT EDIT MANUALLY\n");
40 printf("; Generated by gen_offsets.c\n");
41 printf("; ===============================================================\n\n");
42
43 // GENERALS
44 GEN_DEFINE(NULL, 0);
45
46 // ========================================================================
47 // 1. EXECUTIVE / PROCESSOR (me.h)
48 // ========================================================================
49 GEN_COMMENT("PROCESSOR Structure Offsets (gs:[...])");
50 GEN_OFFSET(PROCESSOR, self);
51 GEN_OFFSET(PROCESSOR, currentIrql);
52 GEN_OFFSET(PROCESSOR, schedulerEnabled);
53 GEN_OFFSET(PROCESSOR, currentThread);
54 GEN_OFFSET(PROCESSOR, readyQueue);
56 GEN_OFFSET(PROCESSOR, lapic_ID);
57 GEN_OFFSET(PROCESSOR, VirtStackTop);
60 GEN_OFFSET(PROCESSOR, schedulePending);
61 GEN_OFFSET(PROCESSOR, LapicAddressVirt);
62 GEN_OFFSET(PROCESSOR, TimerExpirationDPC);
63 GEN_OFFSET(PROCESSOR, UserRsp);
65
66 GEN_COMMENT("TRAP_FRAME Offsets (Context Saving/Restoring)");
82 GEN_OFFSET(TRAP_FRAME, vector);
83 GEN_OFFSET(TRAP_FRAME, error_code);
86 GEN_OFFSET(TRAP_FRAME, rflags);
90
91 GEN_COMMENT("ITHREAD Offsets (Internal Thread)");
92 GEN_OFFSET(ITHREAD, TrapRegisters);
93 GEN_OFFSET(ITHREAD, ThreadState);
94 GEN_OFFSET(ITHREAD, StackBase);
95 GEN_OFFSET(ITHREAD, IsLargeStack);
96 GEN_OFFSET(ITHREAD, PreviousMode);
97 GEN_OFFSET(ITHREAD, KernelStack);
98
99 GEN_COMMENT("IPROCESS Offsets (Internal Process)");
100 GEN_OFFSET(IPROCESS, PageDirectoryPhysical);
101
102 GEN_COMMENT("Processor Constants");
112
113 GEN_COMMENT("Bugcheck Codes");
122
123 GEN_COMMENT("IRQL Levels");
132
133 GEN_COMMENT("TPR Levels and Vectors");
138
139 // ========================================================================
140 // 2. PROCESS & THREAD (ps.h)
141 // ========================================================================
142 GEN_COMMENT("EPROCESS Offsets");
143 GEN_OFFSET(EPROCESS, InternalProcess);
144 GEN_OFFSET(EPROCESS, PID);
145 GEN_OFFSET(EPROCESS, ParentProcess);
146 GEN_OFFSET(EPROCESS, MainThread);
147 GEN_OFFSET(EPROCESS, VadRoot);
148 GEN_OFFSET(EPROCESS, NextStackHint);
149
150 GEN_COMMENT("ETHREAD Offsets");
151 GEN_OFFSET(ETHREAD, InternalThread);
152 GEN_OFFSET(ETHREAD, TID);
153 GEN_OFFSET(ETHREAD, ParentProcess);
154 GEN_OFFSET(ETHREAD, CurrentEvent);
155
156 GEN_COMMENT("Thread State Enums");
160
161 // ========================================================================
162 // 3. MEMORY SYSTEM (mm.h)
163 // ========================================================================
164 GEN_COMMENT("Memory Management Constants");
167 // Note: PhysicalMemoryOffset is a large ULL, we cast to preserve generic print
169
170 GEN_COMMENT("MMPTE Offsets & Flags");
171 GEN_OFFSET(MMPTE, Value);
176
177 // ========================================================================
178 // 4. SYNCHRONIZATION (ms.h)
179 // ========================================================================
180 GEN_COMMENT("Spinlock & Mutex");
181 GEN_OFFSET(SPINLOCK, locked);
182 GEN_OFFSET(MUTEX, ownerTid);
183 GEN_OFFSET(MUTEX, locked);
184 GEN_OFFSET(MUTEX, ownerThread);
185
186 // ========================================================================
187 // 5. BEHAVIOR (behavior.h)
188 // ========================================================================
189#ifdef MT_NO_PREEMPTION
190 GEN_DEFINE(MT_NO_PREEMPTION, 1);
191#endif
192
193
194 return 0;
195}
struct _EPROCESS EPROCESS
Definition core.h:51
struct _TRAP_FRAME TRAP_FRAME
Definition core.h:55
struct _IPROCESS IPROCESS
Definition core.h:39
struct _ITHREAD ITHREAD
Definition core.h:35
struct _PROCESSOR PROCESSOR
Definition core.h:47
@ HIGH_LEVEL
Definition core.h:22
@ APC_LEVEL
Definition core.h:16
@ DISPATCH_LEVEL
Definition core.h:17
@ PROFILE_LEVEL
Definition core.h:18
@ IPI_LEVEL
Definition core.h:20
@ CLOCK_LEVEL
Definition core.h:19
@ PASSIVE_LEVEL
Definition core.h:15
@ POWER_LEVEL
Definition core.h:21
struct _ETHREAD ETHREAD
Definition core.h:43
#define GEN_OFFSET(struct_name, member)
Definition gen_offsets.c:31
#define GEN_DEFINE(name, val)
Definition gen_offsets.c:28
int main(void)
Definition gen_offsets.c:37
#define GEN_SIZE(struct_name)
Definition gen_offsets.c:34
#define GEN_COMMENT(msg)
Definition gen_offsets.c:25
#define IA32_KERNEL_GS_BASE
Definition intrin.h:19
#define IA32_GS_BASE
Definition intrin.h:20
#define USER_DS
Definition me.h:246
#define USER_CS
Definition me.h:247
@ MANUALLY_INITIATED_CRASH
Definition me.h:90
@ PAGE_FAULT
Definition me.h:83
@ IRQL_NOT_GREATER_OR_EQUAL
Definition me.h:98
@ ATTEMPTED_SWITCH_FROM_DPC
Definition me.h:127
@ KERNEL_STACK_OVERFLOWN
Definition me.h:117
@ DOUBLE_FAULT
Definition me.h:77
@ GENERAL_PROTECTION_FAULT
Definition me.h:82
@ IRQL_NOT_LESS_OR_EQUAL
Definition me.h:97
#define USER_RFLAGS
Definition me.h:250
#define KERNEL_DS
Definition me.h:244
#define KERNEL_CS
Definition me.h:243
#define INITIAL_RFLAGS
Definition me.h:249
uint32_t flags
Definition mh.h:2
#define VECTOR_CLOCK
Definition mh.h:37
#define MAX_CPUS
Definition mh.h:409
#define VECTOR_IPI
Definition mh.h:38
#define VECTOR_DPC
Definition mh.h:36
#define VECTOR_APC
Definition mh.h:35
@ PAGE_RW
Definition mm.h:311
@ PAGE_USER
Definition mm.h:315
@ PAGE_PRESENT
Definition mm.h:307
@ PAGE_NX
Definition mm.h:347
#define KernelVaStart
Definition mm.h:55
#define PhysicalMemoryOffset
Definition mm.h:56
#define VirtualPageSize
Definition mm.h:53
struct _MMPTE MMPTE
struct _MUTEX MUTEX
struct _SPINLOCK SPINLOCK
@ THREAD_TERMINATED
Definition ps.h:42
@ THREAD_RUNNING
Definition ps.h:38
@ THREAD_READY
Definition ps.h:39