mirror of
https://github.com/ziglang/zig.git
synced 2026-01-20 22:35:24 +00:00
Merge pull request #4651 from LemonBoy/fix-4645
std: Nicer way to access the PEB
This commit is contained in:
commit
7df9169081
@ -1083,23 +1083,26 @@ pub fn SetFileTime(
|
||||
}
|
||||
}
|
||||
|
||||
pub fn teb() *TEB {
|
||||
return switch (builtin.arch) {
|
||||
.i386 => asm volatile (
|
||||
\\ movl %%fs:0x18, %[ptr]
|
||||
: [ptr] "=r" (-> *TEB)
|
||||
),
|
||||
.x86_64 => asm volatile (
|
||||
\\ movq %%gs:0x30, %[ptr]
|
||||
: [ptr] "=r" (-> *TEB)
|
||||
),
|
||||
.aarch64 => asm volatile (
|
||||
\\ mov %[ptr], x18
|
||||
: [ptr] "=r" (-> *TEB)
|
||||
),
|
||||
else => @compileError("unsupported arch"),
|
||||
};
|
||||
}
|
||||
|
||||
pub fn peb() *PEB {
|
||||
switch (builtin.arch) {
|
||||
.i386 => {
|
||||
return asm (
|
||||
\\ mov %%fs:0x18, %[ptr]
|
||||
\\ mov %%ds:0x30(%[ptr]), %[ptr]
|
||||
: [ptr] "=r" (-> *PEB)
|
||||
);
|
||||
},
|
||||
.x86_64 => {
|
||||
return asm (
|
||||
\\ mov %%gs:0x60, %[ptr]
|
||||
: [ptr] "=r" (-> *PEB)
|
||||
);
|
||||
},
|
||||
else => @compileError("unsupported architecture"),
|
||||
}
|
||||
return teb().ProcessEnvironmentBlock;
|
||||
}
|
||||
|
||||
/// A file time is a 64-bit value that represents the number of 100-nanosecond
|
||||
|
||||
@ -1154,6 +1154,19 @@ const RTL_BITMAP = @OpaqueType();
|
||||
pub const PRTL_BITMAP = *RTL_BITMAP;
|
||||
const KAFFINITY = usize;
|
||||
|
||||
pub const TEB = extern struct {
|
||||
Reserved1: [12]PVOID,
|
||||
ProcessEnvironmentBlock: *PEB,
|
||||
Reserved2: [399]PVOID,
|
||||
Reserved3: [1952]u8,
|
||||
TlsSlots: [64]PVOID,
|
||||
Reserved4: [8]u8,
|
||||
Reserved5: [26]PVOID,
|
||||
ReservedForOle: PVOID,
|
||||
Reserved6: [4]PVOID,
|
||||
TlsExpansionSlots: PVOID,
|
||||
};
|
||||
|
||||
/// Process Environment Block
|
||||
/// Microsoft documentation of this is incomplete, the fields here are taken from various resources including:
|
||||
/// - https://github.com/wine-mirror/wine/blob/1aff1e6a370ee8c0213a0fd4b220d121da8527aa/include/winternl.h#L269
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user