My Project
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
20// --------------------------------------------------------------------------
21// MACROS FOR GENERATION
22// --------------------------------------------------------------------------
23
24#define GEN_COMMENT(msg) \
25 printf("\n; %s\n", msg)
26
27#define GEN_DEFINE(name, val) \
28 printf("%%define %-40s 0x%lX\n", #name, (uint64_t)(val))
29
30#define GEN_OFFSET(struct_name, member) \
31 printf("%%define %-40s 0x%lX\n", #struct_name "_" #member, offsetof(struct_name, member))
32
33#define GEN_SIZE(struct_name) \
34 printf("%%define SIZEOF_%-33s 0x%lX\n", #struct_name, sizeof(struct_name))
35
36int main(void) {
37 printf("; ===============================================================\n");
38 printf("; AUTOMATICALLY GENERATED FILE - DO NOT EDIT MANUALLY\n");
39 printf("; Generated by gen_offsets.c\n");
40 printf("; ===============================================================\n\n");
41
42 // GENERALS
43 GEN_DEFINE(NULL, 0);
44
45 // ========================================================================
46 // 1. EXECUTIVE / PROCESSOR (me.h)
47 // ========================================================================
48 GEN_COMMENT("PROCESSOR Structure Offsets (gs:[...])");
49 GEN_OFFSET(PROCESSOR, self);
50 GEN_OFFSET(PROCESSOR, currentIrql);
51 GEN_OFFSET(PROCESSOR, schedulerEnabled);
52 GEN_OFFSET(PROCESSOR, currentThread);
53 GEN_OFFSET(PROCESSOR, readyQueue);
55 GEN_OFFSET(PROCESSOR, lapic_ID);
56 GEN_OFFSET(PROCESSOR, VirtStackTop);
59 GEN_OFFSET(PROCESSOR, schedulePending);
60 GEN_OFFSET(PROCESSOR, LapicAddressVirt);
61 GEN_OFFSET(PROCESSOR, TimerExpirationDPC);
63
64 GEN_COMMENT("TRAP_FRAME Offsets (Context Saving/Restoring)");
80 GEN_OFFSET(TRAP_FRAME, vector);
81 GEN_OFFSET(TRAP_FRAME, error_code);
84 GEN_OFFSET(TRAP_FRAME, rflags);
88
89 GEN_COMMENT("ITHREAD Offsets (Internal Thread)");
90 GEN_OFFSET(ITHREAD, TrapRegisters);
91 GEN_OFFSET(ITHREAD, ThreadState);
92 GEN_OFFSET(ITHREAD, StackBase);
93 GEN_OFFSET(ITHREAD, IsLargeStack);
94 GEN_OFFSET(ITHREAD, PreviousMode);
95
96 GEN_COMMENT("IPROCESS Offsets (Internal Process)");
97 GEN_OFFSET(IPROCESS, PageDirectoryPhysical);
98
99 GEN_COMMENT("Processor Constants");
107
108 GEN_COMMENT("Bugcheck Codes");
117
118 GEN_COMMENT("IRQL Levels");
127
128 GEN_COMMENT("TPR Levels");
132
133 // ========================================================================
134 // 2. PROCESS & THREAD (ps.h)
135 // ========================================================================
136 GEN_COMMENT("EPROCESS Offsets");
137 GEN_OFFSET(EPROCESS, InternalProcess);
138 GEN_OFFSET(EPROCESS, PID);
139 GEN_OFFSET(EPROCESS, ParentProcess);
140 GEN_OFFSET(EPROCESS, MainThread);
141 GEN_OFFSET(EPROCESS, VadRoot);
142 GEN_OFFSET(EPROCESS, NextStackTop);
143
144 GEN_COMMENT("ETHREAD Offsets");
145 GEN_OFFSET(ETHREAD, InternalThread);
146 GEN_OFFSET(ETHREAD, TID);
147 GEN_OFFSET(ETHREAD, ParentProcess);
148 GEN_OFFSET(ETHREAD, CurrentEvent);
149
150 GEN_COMMENT("Thread State Enums");
154
155 // ========================================================================
156 // 3. MEMORY SYSTEM (mm.h)
157 // ========================================================================
158 GEN_COMMENT("Memory Management Constants");
161 // Note: PhysicalMemoryOffset is a large ULL, we cast to preserve generic print
163
164 GEN_COMMENT("MMPTE Offsets & Flags");
165 GEN_OFFSET(MMPTE, Value);
170
171 // ========================================================================
172 // 4. SYNCHRONIZATION (ms.h)
173 // ========================================================================
174 GEN_COMMENT("Spinlock & Mutex");
175 GEN_OFFSET(SPINLOCK, locked);
176 GEN_OFFSET(MUTEX, ownerTid);
177 GEN_OFFSET(MUTEX, locked);
178 GEN_OFFSET(MUTEX, ownerThread);
179
180 return 0;
181}
struct _EPROCESS EPROCESS
Definition core.h:49
struct _TRAP_FRAME TRAP_FRAME
Definition core.h:53
struct _IPROCESS IPROCESS
Definition core.h:37
struct _ITHREAD ITHREAD
Definition core.h:33
struct _PROCESSOR PROCESSOR
Definition core.h:45
@ HIGH_LEVEL
Definition core.h:20
@ APC_LEVEL
Definition core.h:14
@ DISPATCH_LEVEL
Definition core.h:15
@ PROFILE_LEVEL
Definition core.h:16
@ IPI_LEVEL
Definition core.h:18
@ CLOCK_LEVEL
Definition core.h:17
@ PASSIVE_LEVEL
Definition core.h:13
@ POWER_LEVEL
Definition core.h:19
struct _ETHREAD ETHREAD
Definition core.h:41
#define GEN_OFFSET(struct_name, member)
Definition gen_offsets.c:30
#define GEN_DEFINE(name, val)
Definition gen_offsets.c:27
int main(void)
Definition gen_offsets.c:36
#define GEN_SIZE(struct_name)
Definition gen_offsets.c:33
#define GEN_COMMENT(msg)
Definition gen_offsets.c:24
#define USER_DS
Definition me.h:242
#define USER_CS
Definition me.h:241
@ 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:245
#define KERNEL_DS
Definition me.h:239
#define KERNEL_CS
Definition me.h:238
#define INITIAL_RFLAGS
Definition me.h:244
uint32_t flags
Definition mh.h:2
#define MAX_CPUS
Definition mh.h:408
#define VECTOR_IPI
Definition mh.h:49
#define VECTOR_DPC
Definition mh.h:47
#define VECTOR_APC
Definition mh.h:48
@ PAGE_RW
Definition mm.h:272
@ PAGE_USER
Definition mm.h:276
@ PAGE_PRESENT
Definition mm.h:268
@ PAGE_NX
Definition mm.h:308
#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