| ... | @@ -4621,25 +4621,28 @@ pub const TEB = extern struct { | ... | @@ -4621,25 +4621,28 @@ pub const TEB = extern struct { |
| 4621 | }; | 4621 | }; |
| 4622 | | 4622 | |
| 4623 | comptime { | 4623 | comptime { |
| 4624 | // Offsets taken from WinDbg info and Geoff Chappell[1] (RIP) | 4624 | // This file may be referenced for its error sets, so we must not assume target windows here. |
| 4625 | // [1]: https://www.geoffchappell.com/studies/windows/km/ntoskrnl/inc/api/pebteb/teb/index.htm | 4625 | if (builtin.os.tag == .windows) { |
| 4626 | assert(@offsetOf(TEB, "NtTib") == 0x00); | 4626 | // Offsets taken from WinDbg info and Geoff Chappell[1] (RIP) |
| 4627 | if (@sizeOf(usize) == 4) { | 4627 | // [1]: https://www.geoffchappell.com/studies/windows/km/ntoskrnl/inc/api/pebteb/teb/index.htm |
| 4628 | assert(@offsetOf(TEB, "EnvironmentPointer") == 0x1C); | 4628 | assert(@offsetOf(TEB, "NtTib") == 0x00); |
| 4629 | assert(@offsetOf(TEB, "ClientId") == 0x20); | 4629 | if (@sizeOf(usize) == 4) { |
| 4630 | assert(@offsetOf(TEB, "ActiveRpcHandle") == 0x28); | 4630 | assert(@offsetOf(TEB, "EnvironmentPointer") == 0x1C); |
| 4631 | assert(@offsetOf(TEB, "ThreadLocalStoragePointer") == 0x2C); | 4631 | assert(@offsetOf(TEB, "ClientId") == 0x20); |
| 4632 | assert(@offsetOf(TEB, "ProcessEnvironmentBlock") == 0x30); | 4632 | assert(@offsetOf(TEB, "ActiveRpcHandle") == 0x28); |
| 4633 | assert(@offsetOf(TEB, "LastErrorValue") == 0x34); | 4633 | assert(@offsetOf(TEB, "ThreadLocalStoragePointer") == 0x2C); |
| 4634 | assert(@offsetOf(TEB, "TlsSlots") == 0xe10); | 4634 | assert(@offsetOf(TEB, "ProcessEnvironmentBlock") == 0x30); |
| 4635 | } else if (@sizeOf(usize) == 8) { | 4635 | assert(@offsetOf(TEB, "LastErrorValue") == 0x34); |
| 4636 | assert(@offsetOf(TEB, "EnvironmentPointer") == 0x38); | 4636 | assert(@offsetOf(TEB, "TlsSlots") == 0xe10); |
| 4637 | assert(@offsetOf(TEB, "ClientId") == 0x40); | 4637 | } else if (@sizeOf(usize) == 8) { |
| 4638 | assert(@offsetOf(TEB, "ActiveRpcHandle") == 0x50); | 4638 | assert(@offsetOf(TEB, "EnvironmentPointer") == 0x38); |
| 4639 | assert(@offsetOf(TEB, "ThreadLocalStoragePointer") == 0x58); | 4639 | assert(@offsetOf(TEB, "ClientId") == 0x40); |
| 4640 | assert(@offsetOf(TEB, "ProcessEnvironmentBlock") == 0x60); | 4640 | assert(@offsetOf(TEB, "ActiveRpcHandle") == 0x50); |
| 4641 | assert(@offsetOf(TEB, "LastErrorValue") == 0x68); | 4641 | assert(@offsetOf(TEB, "ThreadLocalStoragePointer") == 0x58); |
| 4642 | assert(@offsetOf(TEB, "TlsSlots") == 0x1480); | 4642 | assert(@offsetOf(TEB, "ProcessEnvironmentBlock") == 0x60); |
| | 4643 | assert(@offsetOf(TEB, "LastErrorValue") == 0x68); |
| | 4644 | assert(@offsetOf(TEB, "TlsSlots") == 0x1480); |
| | 4645 | } |
| 4643 | } | 4646 | } |
| 4644 | } | 4647 | } |
| 4645 | | 4648 | |