Protecting Memory Pages for Underflow Detection
?
?

Keyboard Navigation

Global Keys

[, < / ], > Jump to previous / next episode
W, K, P / S, J, N Jump to previous / next timestamp
t / T Toggle theatre / SUPERtheatre mode
V Revert filter to original state Y Select link (requires manual Ctrl-c)

Menu toggling

q Quotes r References f Filter y Link c Credits

In-Menu and Index Controls

a
w
s
d
h j k l


Esc Close menu / unfocus timestamp

Quotes and References Menus and Index

Enter Jump to timestamp

Quotes, References and Credits Menus

o Open URL (in new tab)

Filter Menu

x, Space Toggle category and focus next
X, ShiftSpace Toggle category and focus previous
v Invert topics / media as per focus

Filter and Link Menus

z Toggle filter / linking mode

Credits Menu

Enter Open URL (in new tab)
0:01Recap and set the stage for the day
0:01Recap and set the stage for the day
0:01Recap and set the stage for the day
1:16Blackboard: Buffer Overruns
1:16Blackboard: Buffer Overruns
1:16Blackboard: Buffer Overruns
2:47Blackboard: VirtualAlloc() and virtual memory mapping
2:47Blackboard: VirtualAlloc() and virtual memory mapping
2:47Blackboard: VirtualAlloc() and virtual memory mapping
6:23Blackboard: Playing with how this memory works
6:23Blackboard: Playing with how this memory works
6:23Blackboard: Playing with how this memory works
8:23Blackboard: Guard Page with VirtualProtect()
8:23Blackboard: Guard Page with VirtualProtect()
8:23Blackboard: Guard Page with VirtualProtect()
9:38Blackboard: Faulting at the smallest error
9:38Blackboard: Faulting at the smallest error
9:38Blackboard: Faulting at the smallest error
13:29handmade_platform.h: Add PlatformMemory_OverflowCheck and PlatformMemory_UnderflowCheck flags
13:29handmade_platform.h: Add PlatformMemory_OverflowCheck and PlatformMemory_UnderflowCheck flags
13:29handmade_platform.h: Add PlatformMemory_OverflowCheck and PlatformMemory_UnderflowCheck flags
14:51handmade_memory.h: Enable PushSize_() to perform bounds checking by passing every allocation down to the system every time
14:51handmade_memory.h: Enable PushSize_() to perform bounds checking by passing every allocation down to the system every time
14:51handmade_memory.h: Enable PushSize_() to perform bounds checking by passing every allocation down to the system every time
17:26Run the game and see nothing in particular happen
17:26Run the game and see nothing in particular happen
17:26Run the game and see nothing in particular happen
17:37handmade_memory.h: Make PushSize_() set the OverflowCheck flag on everything, run the game and grind to a halt
17:37handmade_memory.h: Make PushSize_() set the OverflowCheck flag on everything, run the game and grind to a halt
17:37handmade_memory.h: Make PushSize_() set the OverflowCheck flag on everything, run the game and grind to a halt
19:24"You're an operating system. Have some self-respect"α
19:24"You're an operating system. Have some self-respect"α
19:24"You're an operating system. Have some self-respect"α
19:51"It's 2016, and all you have to do to kill Windows is just allocate some memory"β
19:51"It's 2016, and all you have to do to kill Windows is just allocate some memory"β
19:51"It's 2016, and all you have to do to kill Windows is just allocate some memory"β
20:35Return with the determination to provide a way to free our memory
20:35Return with the determination to provide a way to free our memory
20:35Return with the determination to provide a way to free our memory
21:48handmade_memory.h: Change PushSize_() to ensure arenas only keep the exact size they need
21:48handmade_memory.h: Change PushSize_() to ensure arenas only keep the exact size they need
21:48handmade_memory.h: Change PushSize_() to ensure arenas only keep the exact size they need
23:44Run the game to give that a shot
23:44Run the game to give that a shot
23:44Run the game to give that a shot
24:32handmade_memory.h: Rename memory_block_footer to memory_block_chain
24:32handmade_memory.h: Rename memory_block_footer to memory_block_chain
24:32handmade_memory.h: Rename memory_block_footer to memory_block_chain
27:02Blackboard: Positioning that memprotect in order to catch underflows
27:02Blackboard: Positioning that memprotect in order to catch underflows
27:02Blackboard: Positioning that memprotect in order to catch underflows
27:26win32_handmade.cpp: Make PLATFORM_ALLOCATE_MEMORY() allocate one blank 4K page at the beginning
27:26win32_handmade.cpp: Make PLATFORM_ALLOCATE_MEMORY() allocate one blank 4K page at the beginning
27:26win32_handmade.cpp: Make PLATFORM_ALLOCATE_MEMORY() allocate one blank 4K page at the beginning
30:13handmade_memory.h: Consider unifying the arena and allocator's data structures
30:13handmade_memory.h: Consider unifying the arena and allocator's data structures
30:13handmade_memory.h: Consider unifying the arena and allocator's data structures
31:40win32_handmade.cpp: Make PLATFORM_ALLOCATE_MEMORY() allocate
31:40win32_handmade.cpp: Make PLATFORM_ALLOCATE_MEMORY() allocate
31:40win32_handmade.cpp: Make PLATFORM_ALLOCATE_MEMORY() allocate
32:34Run the game to see it run exactly the same
32:34Run the game to see it run exactly the same
32:34Run the game to see it run exactly the same
32:45win32_handmade.cpp: Make PLATFORM_ALLOCATE_MEMORY() call VirtualProtect()1,2
32:45win32_handmade.cpp: Make PLATFORM_ALLOCATE_MEMORY() call VirtualProtect()1,2
32:45win32_handmade.cpp: Make PLATFORM_ALLOCATE_MEMORY() call VirtualProtect()1,2
37:03Blackboard: What actually happens with the guard page
37:03Blackboard: What actually happens with the guard page
37:03Blackboard: What actually happens with the guard page
39:00win32_handmade.cpp: Pass PAGE_NOACCESS to that VirtualProtect() call
39:00win32_handmade.cpp: Pass PAGE_NOACCESS to that VirtualProtect() call
39:00win32_handmade.cpp: Pass PAGE_NOACCESS to that VirtualProtect() call
39:38win32_handmade.cpp: Verify that the guard pages are happening properly
39:38win32_handmade.cpp: Verify that the guard pages are happening properly
39:38win32_handmade.cpp: Verify that the guard pages are happening properly
40:11Run the game with the expectation to crash and investigate why we don't
40:11Run the game with the expectation to crash and investigate why we don't
40:11Run the game with the expectation to crash and investigate why we don't
40:38handmade_memory.h: Make PushSize_() set the UnderflowCheck flag, run the game and successfully crash
40:38handmade_memory.h: Make PushSize_() set the UnderflowCheck flag, run the game and successfully crash
40:38handmade_memory.h: Make PushSize_() set the UnderflowCheck flag, run the game and successfully crash
41:28win32_handmade.cpp: Enable PLATFORM_ALLOCATE_MEMORY() to perform underflow checking
41:28win32_handmade.cpp: Enable PLATFORM_ALLOCATE_MEMORY() to perform underflow checking
41:28win32_handmade.cpp: Enable PLATFORM_ALLOCATE_MEMORY() to perform underflow checking
47:02win32_handmade.cpp: Enable PLATFORM_DEALLOCATE_MEMORY() to handle the checking
47:02win32_handmade.cpp: Enable PLATFORM_DEALLOCATE_MEMORY() to handle the checking
47:02win32_handmade.cpp: Enable PLATFORM_DEALLOCATE_MEMORY() to handle the checking
51:06handmade_world.cpp: Make GetWorldChunk() write off the beginning of the buffer, run the game and see nothing being detected
51:06handmade_world.cpp: Make GetWorldChunk() write off the beginning of the buffer, run the game and see nothing being detected
51:06handmade_world.cpp: Make GetWorldChunk() write off the beginning of the buffer, run the game and see nothing being detected
51:57handmade_memory.cpp: Toggle on the underflow checking in PushSize_(), run the game and immediately catch that offending write
51:57handmade_memory.cpp: Toggle on the underflow checking in PushSize_(), run the game and immediately catch that offending write
51:57handmade_memory.cpp: Toggle on the underflow checking in PushSize_(), run the game and immediately catch that offending write
52:49handmade_world.cpp: Make GetWorldChunk() write off the end of the buffer, run the game and see nothing being detected
52:49handmade_world.cpp: Make GetWorldChunk() write off the end of the buffer, run the game and see nothing being detected
52:49handmade_world.cpp: Make GetWorldChunk() write off the end of the buffer, run the game and see nothing being detected
53:34handmade_memory.cpp: Determine to enable PushSize_() to perform overflow checking
53:34handmade_memory.cpp: Determine to enable PushSize_() to perform overflow checking
53:34handmade_memory.cpp: Determine to enable PushSize_() to perform overflow checking
55:16todo.txt: Update the TODO list
55:16todo.txt: Update the TODO list
55:16todo.txt: Update the TODO list
55:39Q&A
🗩
55:39Q&A
🗩
55:39Q&A
🗩
55:59insobot !qa
🗪
55:59insobot !qa
🗪
55:59insobot !qa
🗪
56:46insofaras Yes
🗪
56:46insofaras Yes
🗪
56:46insofaras Yes
🗪
58:16k2t0f12d I'm following an Linux with SDL because I'm not sure if it's worth building on X11 or if Wayland is ready yet. Have you thought about building on X11, Wayland or both?
🗪
58:16k2t0f12d I'm following an Linux with SDL because I'm not sure if it's worth building on X11 or if Wayland is ready yet. Have you thought about building on X11, Wayland or both?
🗪
58:16k2t0f12d I'm following an Linux with SDL because I'm not sure if it's worth building on X11 or if Wayland is ready yet. Have you thought about building on X11, Wayland or both?
🗪
59:28drjeats Before when you had fixed allocation, you could do a between-runs save state kind of thing (if I recall correctly). How would you make that happen with the dynamic blocks?
🗪
59:28drjeats Before when you had fixed allocation, you could do a between-runs save state kind of thing (if I recall correctly). How would you make that happen with the dynamic blocks?
🗪
59:28drjeats Before when you had fixed allocation, you could do a between-runs save state kind of thing (if I recall correctly). How would you make that happen with the dynamic blocks?
🗪
59:48flirtychair Do you have any insight into if you are developing this game in a similar timeflow to major devs, e.g. you spent some time today working on under / overflow before such a thing came into play. Is this just because of the format of the show?
🗪
59:48flirtychair Do you have any insight into if you are developing this game in a similar timeflow to major devs, e.g. you spent some time today working on under / overflow before such a thing came into play. Is this just because of the format of the show?
🗪
59:48flirtychair Do you have any insight into if you are developing this game in a similar timeflow to major devs, e.g. you spent some time today working on under / overflow before such a thing came into play. Is this just because of the format of the show?
🗪
1:01:06ab1093996300 Why do you look so different from Handmade Hero Day 001?
🗪
1:01:06ab1093996300 Why do you look so different from Handmade Hero Day 001?
🗪
1:01:06ab1093996300 Why do you look so different from Handmade Hero Day 001?
🗪
1:01:45drjeats Does it really work between runs of the program? I saw it work with looped editing, but not different runs. Wouldn't you need to muck with base pointers?
🗪
1:01:45drjeats Does it really work between runs of the program? I saw it work with looped editing, but not different runs. Wouldn't you need to muck with base pointers?
🗪
1:01:45drjeats Does it really work between runs of the program? I saw it work with looped editing, but not different runs. Wouldn't you need to muck with base pointers?
🗪
1:03:46zamar037 I know this isn't relevant to the code, but does it seem strange streaming in a different location?
🗪
1:03:46zamar037 I know this isn't relevant to the code, but does it seem strange streaming in a different location?
🗪
1:03:46zamar037 I know this isn't relevant to the code, but does it seem strange streaming in a different location?
🗪
1:04:05enemymouse Seems that Arena started out as a fast, stack-style allocator and is now moving towards a dynamic heap. You've demonstrated the benefits of VirtualAlloc etc. but can you comment on the performance hit and why you choose it over malloc?
🗪
1:04:05enemymouse Seems that Arena started out as a fast, stack-style allocator and is now moving towards a dynamic heap. You've demonstrated the benefits of VirtualAlloc etc. but can you comment on the performance hit and why you choose it over malloc?
🗪
1:04:05enemymouse Seems that Arena started out as a fast, stack-style allocator and is now moving towards a dynamic heap. You've demonstrated the benefits of VirtualAlloc etc. but can you comment on the performance hit and why you choose it over malloc?
🗪
1:05:22williambundy Don't recognize the tune
🗪
1:05:22williambundy Don't recognize the tune
🗪
1:05:22williambundy Don't recognize the tune
🗪
1:05:45windowl Are any days (streams) missing from the YouTube archive?
🗪
1:05:45windowl Are any days (streams) missing from the YouTube archive?
🗪
1:05:45windowl Are any days (streams) missing from the YouTube archive?
🗪
1:07:05drjeats Was memprotect the primary motivation for moving to dynamic memory, or were there other reasons?
🗪
1:07:05drjeats Was memprotect the primary motivation for moving to dynamic memory, or were there other reasons?
🗪
1:07:05drjeats Was memprotect the primary motivation for moving to dynamic memory, or were there other reasons?
🗪
1:09:22Wrap it up
🗩
1:09:22Wrap it up
🗩
1:09:22Wrap it up
🗩