Skip to content

Slottify Relocation and its subclasses. - #707

Merged
ltfish merged 2 commits into
masterfrom
feat/relocation-slots
Jul 24, 2026
Merged

Slottify Relocation and its subclasses.#707
ltfish merged 2 commits into
masterfrom
feat/relocation-slots

Conversation

@ltfish

@ltfish ltfish commented Jul 24, 2026

Copy link
Copy Markdown
Member

Each Relocation class is reduced from ~170 bytes to ~96 bytes. On a PE file (OUTLOOK.exe) with 230k relocations, we save about 18 MB of RAM.

ltfish and others added 2 commits July 24, 2026 07:50
Every Relocation instance carried a per-instance __dict__. Declare
__slots__ on the base class and on all 181 subclasses across all
backends (ELF, PE, Mach-O, COFF, TLS, externs, binja); subclasses that
add attributes (ELFReloc, IMAGE_REL_BASED_HIGHADJ, R_ARM_THM_CALL,
MachO relocations, InternalTLSRelocation, SimDataSimpleRelocation)
declare exactly those, everything else declares empty slots.

On a 46 MB PE with ~235k base relocations (OUTLOOK.EXE), a relocation
object shrinks from 176 to 104 bytes (48 + 128-byte dict -> dict-free),
cutting the relocation object layer from 39.6 MB to 23.4 MB.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
It always mirrored owner.arch, so storing it per instance wasted a slot
(and a reference) on every relocation. A PE base relocation drops from
104 to 96 bytes.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@ltfish ltfish self-assigned this Jul 24, 2026
@angr-bot

Copy link
Copy Markdown
Member

Corpus decompilation diffs can be found at angr/dec-snapshots@master...angr/cle_707

@ltfish
ltfish merged commit 3bf7c21 into master Jul 24, 2026
18 of 19 checks passed
@ltfish
ltfish deleted the feat/relocation-slots branch July 24, 2026 19:33
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants