Intro to GHIDRA internals - Use Eclipse to Debug real-world Ghidra issue - Build Ghidra

Welcome everyone! Highlights... • Setup Ghidra dev environment. • Build/Debug Ghidra, gather real-world Ghidra bug details. • Debugging techniques for backtracking causal steps to problem origin. • Gather clues, build repro "fingerprint" for conditional breakpoints. • Ghidra internals around its PE loader (portable executable loader), abstraction of memory blocks, more! • Ghidra, Eclipse, Java, Visual Studio, VS tools such as dumpbin, ml64 (MASM). • MASM assembly, learn about DUP, STRUCT, .data, .bss, link map files, more! • Portable Executable Format (PE Format, PE executable), PE sections, Ghidra import. • Of course, implicitly the tutorial covers topics possibly helpful to those contributing to Ghidra. 00:00:00 Start 00:01:28 Install VS Code 00:01:50 Install VS 00:02:45 Ghidra setup start 00:02:56 Install JDK 00:05:47 Ghidra 11.0.1 00:09:18 Start Ghidra 00:10:38 Create console exe 00:12:32 Repro issue 00:18:34 Ghidra dev env 00:19:04 Setup Gradle 00:21:57 Setup Git 00:23:40 Clone Ghidra 00:24:33 Create Ghidra 11.0.1 branch 00:26:48 Additional deps 00:26:59 Build Ghidra from terminal 00:27:23 Run built Ghidra 00:28:42 Install Eclipse for Java devs 00:31:29 Prep Ghidra for Eclipse 00:37:42 Build Ghidra in Eclipse 00:38:18 Debug config, start debugger 00:39:07 Begin debugging issue 00:44:13 Debug Perspective 00:44:43 Breakpoint (BP) at error 00:46:43 Repro issue, trigger breakpoint 00:51:11 Examine the stack, frames 00:55:43 Examine DataDB 00:57:59 Breadth first recon 00:59:16 Open Implemention 01:01:46 View hex 01:02:33 DataDB.dataType, StructureDB 01:04:25 Going deeper 01:06:42 Rinse/repeat 01:07:37 BP before issue 01:07:48 Begin building "fingerprint" 01:09:29 Conditional BP, expression 01:14:39 Conditional BP pt2 01:18:46 Stepping deeper 01:28:12 MemoryMapDB.getBytes 01:32:18 MemoryMapDB.getBytes, success 01:35:29 Problematic block 01:40:59 UninitializedSubMemoryBlock 01:42:24 Open Declared Type 01:49:46 FileBytesSubMemoryBlock.getBytes success, UninitializedSubMemoryBlock.getBytes failure 01:53:07 Constructor BP 01:53:39 Build fingerprint pt2 01:54:19 DBRecord/Schema 01:58:09 UninitializedSubMemoryBlock construction 02:02:11 Glean design 02:02:55 Table subBlockTable 02:06:06 createSubBlockRecord BP 02:10:27 DBRecord born elsewhere 02:12:20 ProgramDB/DBHandle 02:13:44 File-based DB 02:20:55 Strategy to find "1856" block 02:22:01 Re-import bins 02:22:52 createSubBlockRecord BP hit! 02:25:31 PeLoader 02:26:53 Glean design pt2 02:30:51 processMemoryBlocks, PE format 02:32:47 PE section processing 02:35:49 DBRecord creation 02:36:32 dumpbin 02:38:20 Famliar .data attrs 02:40:39 Binary, sect name cond BP 02:45:47 PeLoader, rawDataSize, virtualSize 02:49:37 Familiar face, 940 hex minus 200 hex 02:52:57 uninit block created 02:55:02 unint DBRecord created 02:59:23 orig failure 03:02:08 issue data type 03:04:30 8 byte alignment 03:07:00 Map files 03:08:05 The .bss uninit data section 03:14:43 EXCEPTION_RECORD in map file 03:16:34 Finding CRT vars 03:20:15 GS_ExceptionRecord spanning init/uninit 03:21:51 Simplify repro w/MASM asm 03:22:58 VS Tools Prompt 03:23:35 Assemble, ml64 03:24:50 .data vs .data? 03:25:31 DUP operator 03:26:15 STRUCT directive 03:27:11 DUP(?) operator 03:29:48 Repro w/MASM prog 03:31:32 STRUCT init/uninit spanning 03:34:23 Updating cond BP 03:36:30 Debug asm repro, recap, map file. 03:43:40 Ghidra's assumption 03:45:02 Minimal repro example 03:48:57 Updating PeLoader cond BP 03:50:35 dumpbin pt2 03:51:50 asm prog raw, virt sizes 03:53:42 PeLoader recap 03:54:14 Enough to report issue 03:55:07 Build Ghidra fix 03:59:02 Debug fix 04:02:16 The fix 04:05:40 Outro • Tutorial source: git clone https://github.com/AshleyT3/tutorial-... Other vids: • Ghidra Intro    • Intro to Ghidra Tutorial 2023 | Setup to D...   • dumpbin.exe, link, and the PE Format:    • dumpbin.exe, link /dump, and the Portable ...   • Microsoft MASM assembly, link, WinDbg:    • Create/Assemble/Link x64 Windows ASM to EX...   Buy Me a Coffee https://buymeacoffee.com/ashleypurrin... Ko-fi https://ko-fi.com/ashleypurringtech Subscribe to the AshleyPurringTech email list: https://ashleypurringtech.com/subscribe The appearance of U.S. Department of Defense (DoD) visual information does not imply or constitute DoD endorsement.

Intro to Ghidra Tutorial 2023 | Setup to Disassembly Window | Ghidra SRE
▶︎

Intro to Ghidra Tutorial 2023 | Setup to Disassembly Window | Ghidra SRE

Zig 2026: No-AI Policy, $670K Foundation, Left GitHub & Why Zig Isn’t 1.0 - Andrew Kelley Explains
▶︎

Zig 2026: No-AI Policy, $670K Foundation, Left GitHub & Why Zig Isn’t 1.0 - Andrew Kelley Explains

The Technology We Killed in the 1960s Is Now Worth $3.3 Billion
▶︎

The Technology We Killed in the 1960s Is Now Worth $3.3 Billion

Co-Creator of Haskell: Functional Programming, Thinking in Types, Useless Languages | Simon Jones
▶︎

Co-Creator of Haskell: Functional Programming, Thinking in Types, Useless Languages | Simon Jones

Software Reverse Engineering with Ghidra
▶︎

Software Reverse Engineering with Ghidra

Served in 5 Seconds! Japan’s $3 Soba Shop for Hungry Workers
▶︎

Served in 5 Seconds! Japan’s $3 Soba Shop for Hungry Workers

Create/Assemble/Link x64 Windows ASM to EXE, Debugging Tools for Windows, WinDbg, Stack Shadow Store
▶︎

Create/Assemble/Link x64 Windows ASM to EXE, Debugging Tools for Windows, WinDbg, Stack Shadow Store

STOP Everything! Linux Users NEED to See This NOW!
▶︎

STOP Everything! Linux Users NEED to See This NOW!

Don't Hang Up On AI Scammers. Do THIS Instead.
▶︎

Don't Hang Up On AI Scammers. Do THIS Instead.

Casey Muratori – The Big OOPs: Anatomy of a Thirty-five-year Mistake – BSC 2025
▶︎

Casey Muratori – The Big OOPs: Anatomy of a Thirty-five-year Mistake – BSC 2025

INSIDE 24-bit & 32-bit FLOAT Audio Samples - MICROPHONE to FILE, RMS, Noise Floor Comparisons
▶︎

INSIDE 24-bit & 32-bit FLOAT Audio Samples - MICROPHONE to FILE, RMS, Noise Floor Comparisons

🔥 GOD UNLEASHES the Truth | Psalms 23, 35, 91 and 112 To Break Curses and Activate Abundance
▶︎

🔥 GOD UNLEASHES the Truth | Psalms 23, 35, 91 and 112 To Break Curses and Activate Abundance

Keynote: After the AI Hype – What’s Real, and What’s Next - Richard Campbell - 2026
▶︎

Keynote: After the AI Hype – What’s Real, and What’s Next - Richard Campbell - 2026

CREATE and DEBUG a Windows KERNEL device driver!
▶︎

CREATE and DEBUG a Windows KERNEL device driver!

Android 17 sucks. So I put Linux on a phone.
▶︎

Android 17 sucks. So I put Linux on a phone.

Something is jamming GPS over Europe. Here's what we found
▶︎

Something is jamming GPS over Europe. Here's what we found

The Deadliest Weapon of the Ancient World
▶︎

The Deadliest Weapon of the Ancient World

dumpbin.exe, link /dump, and the Portable Executable Format (PE Format)
▶︎

dumpbin.exe, link /dump, and the Portable Executable Format (PE Format)

AI Bubble: ‘This could actually be lethal | Ed Zitron
▶︎

AI Bubble: ‘This could actually be lethal | Ed Zitron

We Bought the Trump Phone So You Don’t Have To
▶︎

We Bought the Trump Phone So You Don’t Have To