leakhunt/tools
acbot 57b5e43d0e Initial commit — leak-hunt project complete
Five bugs identified and patched in retail Asheron's Call client:
- v3b: palette refcount over-increment (3-byte NOP at two sites)
- v5: RenderSurface PurgeResource no-op stub (vtable slot 2 thunk)
- v11: two dangling-pointer crash guards (NULL-check + reorder)
- v14: CEnvCell::Destroy ClipPlaneList leak (18-byte JMP to cleanup thunk)
- v22: unpacker stale-pointer SEH guard (whole-function __try/__except)

All five ship in leakfix.dll (117 KB, SHA d282f23c…) which is loaded
by acclient.exe at process start via PE import table patching by
tools/install_leakfix.py.

Controlled 15-client fleet soak: unpatched control died at 26h with
palette exhaustion; all 14 patched clients survived past that point
and reached ≥5-day uptime.

Residual ~15 MB/h growth traced to d3d9.dll's internal slab allocator
(260KB surface backing buffers retained after Release). See REPORT.md
§10 for the full investigation; conclusion is that it's unfixable from
outside d3d9.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-23 21:07:58 +02:00
..
analyze_dump.py Initial commit — leak-hunt project complete 2026-05-23 21:07:58 +02:00
audit_position_hash.py Initial commit — leak-hunt project complete 2026-05-23 21:07:58 +02:00
auto_v5_watcher.sh Initial commit — leak-hunt project complete 2026-05-23 21:07:58 +02:00
broader_vtable_sweep.py Initial commit — leak-hunt project complete 2026-05-23 21:07:58 +02:00
build_patched_binary.py Initial commit — leak-hunt project complete 2026-05-23 21:07:58 +02:00
byte_accounting.py Initial commit — leak-hunt project complete 2026-05-23 21:07:58 +02:00
cdb_dump.txt Initial commit — leak-hunt project complete 2026-05-23 21:07:58 +02:00
cdb_dump_jerry_highleak.txt Initial commit — leak-hunt project complete 2026-05-23 21:07:58 +02:00
cdb_dump_larsson_highleak.txt Initial commit — leak-hunt project complete 2026-05-23 21:07:58 +02:00
cdb_dump_nyckel_lowleak.txt Initial commit — leak-hunt project complete 2026-05-23 21:07:58 +02:00
cdb_dump_nyckel_lowleak2.txt Initial commit — leak-hunt project complete 2026-05-23 21:07:58 +02:00
cdb_dump_time_lowleak.txt Initial commit — leak-hunt project complete 2026-05-23 21:07:58 +02:00
check_acclient_imports.py Initial commit — leak-hunt project complete 2026-05-23 21:07:58 +02:00
check_exe_pdb.py Initial commit — leak-hunt project complete 2026-05-23 21:07:58 +02:00
check_orphan_refcounts.py Initial commit — leak-hunt project complete 2026-05-23 21:07:58 +02:00
check_patch_state.py Initial commit — leak-hunt project complete 2026-05-23 21:07:58 +02:00
classify_0x0079385c_hits.py Initial commit — leak-hunt project complete 2026-05-23 21:07:58 +02:00
classify_0x0079385c_v2.py Initial commit — leak-hunt project complete 2026-05-23 21:07:58 +02:00
clone_dump.py Initial commit — leak-hunt project complete 2026-05-23 21:07:58 +02:00
compare_mesh_templates.py Initial commit — leak-hunt project complete 2026-05-23 21:07:58 +02:00
count_gr_subclasses_live.py Initial commit — leak-hunt project complete 2026-05-23 21:07:58 +02:00
count_leak_classes.py Initial commit — leak-hunt project complete 2026-05-23 21:07:58 +02:00
count_one_pid.py Initial commit — leak-hunt project complete 2026-05-23 21:07:58 +02:00
count_palettes_live.py Initial commit — leak-hunt project complete 2026-05-23 21:07:58 +02:00
count_physobj_partarray.py Initial commit — leak-hunt project complete 2026-05-23 21:07:58 +02:00
count_position_live.py Initial commit — leak-hunt project complete 2026-05-23 21:07:58 +02:00
count_uiitem_live.py Initial commit — leak-hunt project complete 2026-05-23 21:07:58 +02:00
count_vtable_instances.py Initial commit — leak-hunt project complete 2026-05-23 21:07:58 +02:00
count_weenie_live.py Initial commit — leak-hunt project complete 2026-05-23 21:07:58 +02:00
dashboard.py Initial commit — leak-hunt project complete 2026-05-23 21:07:58 +02:00
diff_owner_scans.py Initial commit — leak-hunt project complete 2026-05-23 21:07:58 +02:00
dump_260k_content.py Initial commit — leak-hunt project complete 2026-05-23 21:07:58 +02:00
dump_cgfxobj.py Initial commit — leak-hunt project complete 2026-05-23 21:07:58 +02:00
dump_hot_region.py Initial commit — leak-hunt project complete 2026-05-23 21:07:58 +02:00
dump_leaked_objects.py Initial commit — leak-hunt project complete 2026-05-23 21:07:58 +02:00
dump_pdb_info.py Initial commit — leak-hunt project complete 2026-05-23 21:07:58 +02:00
dump_va.py Initial commit — leak-hunt project complete 2026-05-23 21:07:58 +02:00
dump_vtable.py Initial commit — leak-hunt project complete 2026-05-23 21:07:58 +02:00
estimate_leak_bytes.py Initial commit — leak-hunt project complete 2026-05-23 21:07:58 +02:00
extract_ust_tags.py Initial commit — leak-hunt project complete 2026-05-23 21:07:58 +02:00
find_all_noop_slots.py Initial commit — leak-hunt project complete 2026-05-23 21:07:58 +02:00
find_alloc_size.py Initial commit — leak-hunt project complete 2026-05-23 21:07:58 +02:00
find_d3d9_via_iat.py Initial commit — leak-hunt project complete 2026-05-23 21:07:58 +02:00
find_d3d_device.py Initial commit — leak-hunt project complete 2026-05-23 21:07:58 +02:00
find_eor_rendersurface.py Initial commit — leak-hunt project complete 2026-05-23 21:07:58 +02:00
find_holder.py Initial commit — leak-hunt project complete 2026-05-23 21:07:58 +02:00
find_literals.py Initial commit — leak-hunt project complete 2026-05-23 21:07:58 +02:00
find_mesh_holders.py Initial commit — leak-hunt project complete 2026-05-23 21:07:58 +02:00
find_mesh_refs_inc_static.py Initial commit — leak-hunt project complete 2026-05-23 21:07:58 +02:00
find_palette_cache.py Initial commit — leak-hunt project complete 2026-05-23 21:07:58 +02:00
find_parent_null_writes.py Initial commit — leak-hunt project complete 2026-05-23 21:07:58 +02:00
find_rendersurfaces.py Initial commit — leak-hunt project complete 2026-05-23 21:07:58 +02:00
find_subclasses.py Initial commit — leak-hunt project complete 2026-05-23 21:07:58 +02:00
find_ust_backtraces.py Initial commit — leak-hunt project complete 2026-05-23 21:07:58 +02:00
find_vtable_refs.py Initial commit — leak-hunt project complete 2026-05-23 21:07:58 +02:00
find_vtable_xrefs.py Initial commit — leak-hunt project complete 2026-05-23 21:07:58 +02:00
fleet_monitor.sh Initial commit — leak-hunt project complete 2026-05-23 21:07:58 +02:00
histogram_eor_alloc_sizes.py Initial commit — leak-hunt project complete 2026-05-23 21:07:58 +02:00
histogram_region_for_vt.py Initial commit — leak-hunt project complete 2026-05-23 21:07:58 +02:00
identify_d3d_vtable.py Initial commit — leak-hunt project complete 2026-05-23 21:07:58 +02:00
identify_holders_by_module.py Initial commit — leak-hunt project complete 2026-05-23 21:07:58 +02:00
identify_mystery_vtables.py Initial commit — leak-hunt project complete 2026-05-23 21:07:58 +02:00
inspect_regions.py Initial commit — leak-hunt project complete 2026-05-23 21:07:58 +02:00
inspect_vtable.py Initial commit — leak-hunt project complete 2026-05-23 21:07:58 +02:00
install_leakfix.py Initial commit — leak-hunt project complete 2026-05-23 21:07:58 +02:00
list_image_modules.py Initial commit — leak-hunt project complete 2026-05-23 21:07:58 +02:00
manual_purge.py Initial commit — leak-hunt project complete 2026-05-23 21:07:58 +02:00
owner_vtable_scan.py Initial commit — leak-hunt project complete 2026-05-23 21:07:58 +02:00
patch_cgfxobj_v4_test.py Initial commit — leak-hunt project complete 2026-05-23 21:07:58 +02:00
patch_freeobject_v2.py Initial commit — leak-hunt project complete 2026-05-23 21:07:58 +02:00
patch_palette_v1.py Initial commit — leak-hunt project complete 2026-05-23 21:07:58 +02:00
patch_palette_v3.py Initial commit — leak-hunt project complete 2026-05-23 21:07:58 +02:00
patch_palette_v3b.py Initial commit — leak-hunt project complete 2026-05-23 21:07:58 +02:00
patch_purge_v5_test.py Initial commit — leak-hunt project complete 2026-05-23 21:07:58 +02:00
patch_v6_test.py Initial commit — leak-hunt project complete 2026-05-23 21:07:58 +02:00
patch_v7_test.py Initial commit — leak-hunt project complete 2026-05-23 21:07:58 +02:00
patch_v8_test.py Initial commit — leak-hunt project complete 2026-05-23 21:07:58 +02:00
patch_v8_thunk.py Initial commit — leak-hunt project complete 2026-05-23 21:07:58 +02:00
patch_v8_thunk_v2.py Initial commit — leak-hunt project complete 2026-05-23 21:07:58 +02:00
patch_v9_test.py Initial commit — leak-hunt project complete 2026-05-23 21:07:58 +02:00
patch_v10_test.py Initial commit — leak-hunt project complete 2026-05-23 21:07:58 +02:00
patch_v11_test.py Initial commit — leak-hunt project complete 2026-05-23 21:07:58 +02:00
patch_v12_test.py Initial commit — leak-hunt project complete 2026-05-23 21:07:58 +02:00
patch_v13_test.py Initial commit — leak-hunt project complete 2026-05-23 21:07:58 +02:00
patch_v14_cenvcell_clipplane.py Initial commit — leak-hunt project complete 2026-05-23 21:07:58 +02:00
patch_v15_position_alloc_trace.py Initial commit — leak-hunt project complete 2026-05-23 21:07:58 +02:00
pdb_extract.py Initial commit — leak-hunt project complete 2026-05-23 21:07:58 +02:00
peek_addr.py Initial commit — leak-hunt project complete 2026-05-23 21:07:58 +02:00
peek_first_region.py Initial commit — leak-hunt project complete 2026-05-23 21:07:58 +02:00
physobj_owner_diff.py Initial commit — leak-hunt project complete 2026-05-23 21:07:58 +02:00
physobj_owner_inspect.py Initial commit — leak-hunt project complete 2026-05-23 21:07:58 +02:00
physobj_owner_scan.py Initial commit — leak-hunt project complete 2026-05-23 21:07:58 +02:00
physobj_owner_tight.py Initial commit — leak-hunt project complete 2026-05-23 21:07:58 +02:00
position_array_inspect.py Initial commit — leak-hunt project complete 2026-05-23 21:07:58 +02:00
position_heap_solo_scan.py Initial commit — leak-hunt project complete 2026-05-23 21:07:58 +02:00
position_host_scan.py Initial commit — leak-hunt project complete 2026-05-23 21:07:58 +02:00
position_host_v2.py Initial commit — leak-hunt project complete 2026-05-23 21:07:58 +02:00
position_sample_dump.py Initial commit — leak-hunt project complete 2026-05-23 21:07:58 +02:00
probe_260k_allocation_structure.py Initial commit — leak-hunt project complete 2026-05-23 21:07:58 +02:00
probe_260k_holders.py Initial commit — leak-hunt project complete 2026-05-23 21:07:58 +02:00
probe_csurface.py Initial commit — leak-hunt project complete 2026-05-23 21:07:58 +02:00
probe_gmui_size.py Initial commit — leak-hunt project complete 2026-05-23 21:07:58 +02:00
probe_gxtri3mesh.py Initial commit — leak-hunt project complete 2026-05-23 21:07:58 +02:00
probe_imgtex.py Initial commit — leak-hunt project complete 2026-05-23 21:07:58 +02:00
probe_iter3_fast.py Initial commit — leak-hunt project complete 2026-05-23 21:07:58 +02:00
probe_iter3_orphans.py Initial commit — leak-hunt project complete 2026-05-23 21:07:58 +02:00
probe_physobj_size.py Initial commit — leak-hunt project complete 2026-05-23 21:07:58 +02:00
probe_rs_base.py Initial commit — leak-hunt project complete 2026-05-23 21:07:58 +02:00
probe_rs_base_inert.py Initial commit — leak-hunt project complete 2026-05-23 21:07:58 +02:00
probe_rsd3d_lost.py Initial commit — leak-hunt project complete 2026-05-23 21:07:58 +02:00
probe_rtd3d_lost.py Initial commit — leak-hunt project complete 2026-05-23 21:07:58 +02:00
probe_rtd3d_total.py Initial commit — leak-hunt project complete 2026-05-23 21:07:58 +02:00
rank_by_byte_share.py Initial commit — leak-hunt project complete 2026-05-23 21:07:58 +02:00
read_function_bytes.py Initial commit — leak-hunt project complete 2026-05-23 21:07:58 +02:00
read_vtable.py Initial commit — leak-hunt project complete 2026-05-23 21:07:58 +02:00
read_vtable_live.py Initial commit — leak-hunt project complete 2026-05-23 21:07:58 +02:00
rendersurface_refcount_v2.py Initial commit — leak-hunt project complete 2026-05-23 21:07:58 +02:00
runtime_patch.py Initial commit — leak-hunt project complete 2026-05-23 21:07:58 +02:00
runtime_patch_v2.py Initial commit — leak-hunt project complete 2026-05-23 21:07:58 +02:00
runtime_patch_v3.py Initial commit — leak-hunt project complete 2026-05-23 21:07:58 +02:00
sample_big_regions.py Initial commit — leak-hunt project complete 2026-05-23 21:07:58 +02:00
scan_gmui_subclasses.py Initial commit — leak-hunt project complete 2026-05-23 21:07:58 +02:00
scan_rendersurface_refcounts.py Initial commit — leak-hunt project complete 2026-05-23 21:07:58 +02:00
scan_vtables.py Initial commit — leak-hunt project complete 2026-05-23 21:07:58 +02:00
snapshot_compare.py Initial commit — leak-hunt project complete 2026-05-23 21:07:58 +02:00
trace_mesh_holder.py Initial commit — leak-hunt project complete 2026-05-23 21:07:58 +02:00
va_to_raw.py Initial commit — leak-hunt project complete 2026-05-23 21:07:58 +02:00