Keeping obfuscated names stable across releases with Nebula''s seed map
Ship an obfuscated .NET build and you get a mapping: MyApp.Billing.Invoice.Recalculate became n.a.b , and you tuck away the map so you can decode the crash reports that will arrive. Ship 1.4.1 a week later with a one-line fix, and that same method is now q.c.f . Nothing about it changed, but its obfuscated name did — because the default obfuscation run renames the whole assembly from scratch, and…
When distributing an obfuscated .NET build, a mapping file is created to decode crash reports that may be generated. However, each build results in a new mapping file with different obfuscated names, even for unchanged methods. This makes it difficult to correlate crash reports across different releases, as the names are constantly changing.
Nebula.NET's seed map addresses this issue by preserving the names across releases. By feeding the previous release's map back into the obfuscation process, unchanged members retain their original names, making it easier to decode crash reports and compare versions. This incremental renaming reduces the size of binary diffs, making it simpler to understand the actual changes between releases.
Seeding the obfuscation process also improves crash symbolication, allowing for more accurate grouping and analysis of crash reports. The seed map functions as a ledger, tracking symbol changes over time, and can be integrated into a Continuous Integration (CI) pipeline to automate the obfuscation process and map management.
Written by urgent.news from Dev.to's reporting — not their text. Machine-written — may contain errors; check the original before relying on it.