MachoDeinit
Description
Release storage owned by a Macho. Frees the data Buf through its carried allocator (unconditional – the parser always owns its bytes) and tears down the vectors. Safe on a zeroed struct.
Success
Returns to the caller. *self is zeroed.
Failure
Function cannot fail. NULL self is a no-op.
Usage example (Cross-references)
Usage examples (Cross-references)
- In
MachoCache.c:96:
if (!MachoHasUuid(&e->dsym) || MemCompare(MachoUuid(&e->dsym), MachoUuid(&e->main), 16) != 0) {
LOG_ERROR("MachoCache: dSYM UUID mismatch for {}", e->module_path);
MachoDeinit(&e->dsym);
return false;
}- In
MachoCache.c:138:
DwarfFunctionsDeinit(&e->fns);
if (e->dsym_open)
MachoDeinit(&e->dsym);
if (e->main_open)
MachoDeinit(&e->main);- In
MachoCache.c:140:
MachoDeinit(&e->dsym);
if (e->main_open)
MachoDeinit(&e->main);
StrDeinit(&e->module_path);
}- In
MachO.c:442:
fail:
MachoDeinit(out);
return false;
}- In
MachO.c:474:
}
void MachoDeinit(Macho *self) {
if (!self)
return;- In
MachO.c:369:
ok = ok && VecPtrAt(&m.symbols, 0)->value == 0x100000010ull;
MachoDeinit(&m);
DefaultAllocatorDeinit(&alloc);
return ok;- In
MachO.c:398:
ok = ok && s == NULL;
MachoDeinit(&m);
DefaultAllocatorDeinit(&alloc);
return ok;- In
MachO.c:441:
ok = ok && MachoFindSection(&m, "__TEXT", "__nope") == NULL;
MachoDeinit(&m);
DefaultAllocatorDeinit(&alloc);
return ok;- In
MachO.c:452:
bool opened = MachoOpenFromMemoryCopy(&m, bytes, len, ALLOCATOR_OF(&alloc));
if (opened)
MachoDeinit(&m);
DefaultAllocatorDeinit(&alloc);
return !opened;- In
MachO.c:546:
ok = ok && s != NULL && s->value == 0x100000040ull;
MachoDeinit(&m);
DefaultAllocatorDeinit(&alloc);
return ok;- In
MachO.c:588:
ok = ok && VecLen(&m.symbols) > 0;
MachoDeinit(&m);
DefaultAllocatorDeinit(&alloc);
return ok;- In
MachO.c:624:
ZstrFindSubstring(sym->name, "test_macho_resolves_running_binary_symbol") != NULL;
MachoDeinit(&m);
DefaultAllocatorDeinit(&alloc);
return ok;- In
MachO.c:660:
ok = ok && ZstrCompare(VecPtrAt(&m.symbols, 0)->name, "fn_a") == 0;
if (ok)
MachoDeinit(&m);
DefaultAllocatorDeinit(&alloc);
return ok;- In
MachO.c:682:
ok = ok && m.has_uuid && MemCompare(m.uuid, kUuid, 16) == 0;
if (ok)
MachoDeinit(&m);
DefaultAllocatorDeinit(&alloc);
return ok;- In
MachO.c:723:
}
if (ok)
MachoDeinit(&m);
DefaultAllocatorDeinit(&alloc);
return ok;- In
MachO.c:747:
ok = ok && VecLen(&m.symbols) == 1 && VecPtrAt(&m.symbols, 0)->section_index == 5;
if (ok)
MachoDeinit(&m);
DefaultAllocatorDeinit(&alloc);
return ok;- In
MachO.c:777:
ok = ok && VecLen(&m.symbols) == 1 && ZstrCompare(VecPtrAt(&m.symbols, 0)->name, "fit") == 0;
if (ok)
MachoDeinit(&m);
DefaultAllocatorDeinit(&alloc);
return ok;- In
MachO.c:804:
ok = ok && VecLen(&m.symbols) == 1 && ZstrCompare(VecPtrAt(&m.symbols, 0)->name, "edge") == 0;
if (ok)
MachoDeinit(&m);
DefaultAllocatorDeinit(&alloc);
return ok;- In
MachO.c:838:
ok = ok && VecLen(&m.symbols) == NSY;
if (ok)
MachoDeinit(&m);
DefaultAllocatorDeinit(&alloc);
return ok;- In
MachO.c:871:
bool opened = open_blob(&m, b, BUF, &alloc);
if (opened)
MachoDeinit(&m);
DefaultAllocatorDeinit(&alloc);
return !opened; // real: rejected.
- In
MachO.c:894:
bool opened = open_blob(&m, b, BUF, &alloc);
if (opened)
MachoDeinit(&m);
DefaultAllocatorDeinit(&alloc);
return !opened;- In
MachO.c:929:
ok = ok && VecLen(&m.symbols) == 0; // real: symbol skipped
if (ok)
MachoDeinit(&m);
DefaultAllocatorDeinit(&alloc);
return ok;- In
MachO.c:959:
ok = ok && VecLen(&m.symbols) == 0; // real: skipped (no NUL in range)
if (ok)
MachoDeinit(&m);
DefaultAllocatorDeinit(&alloc);
return ok;- In
MachO.c:993:
ok = ok && VecLen(&m.symbols) == 1; // real: forward scan finds NUL
if (ok)
MachoDeinit(&m);
DefaultAllocatorDeinit(&alloc);
return ok;- In
MachO.c:1021:
ok = ok && MachoFindSection(&m, "__DATA", "__text") == NULL;
ok = ok && MachoFindSection(&m, "__TEXT", "__nope") == NULL;
MachoDeinit(&m);
DefaultAllocatorDeinit(&alloc);
return ok;- In
MachO.c:1106:
ok = ok && hit != NULL && hit->addr == 0x100000100ull && hit->size == 0x80 && hit->offset == 0x100;
if (ok)
MachoDeinit(&m);
DefaultAllocatorDeinit(&alloc);
return ok;- In
MachO.c:1131:
ok = ok && m.cputype == 0x01000007u && m.filetype == MACHO_FILE_TYPE_EXECUTE;
if (ok)
MachoDeinit(&m);
DefaultAllocatorDeinit(&alloc);
return ok;- In
MachO.c:1168:
ok = ok && VecPtrAt(&m.segments, 0)->vmaddr == 0x1000;
if (ok)
MachoDeinit(&m);
DefaultAllocatorDeinit(&alloc);
return ok;- In
MachO.c:1199:
ok = ok && ZstrCompare(VecPtrAt(&m.segments, 0)->name, "ABCDEFGHIJKLMNOP") == 0;
if (ok)
MachoDeinit(&m);
DefaultAllocatorDeinit(&alloc);
return ok;- In
MachO.c:1221:
ok = ok && VecPtrAt(&m.sections, 1)->addr == 0x100001000ull;
if (ok)
MachoDeinit(&m);
DefaultAllocatorDeinit(&alloc);
return ok;- In
MachO.c:1262:
ok = ok && ZstrCompare(VecPtrAt(&m.sections, 0)->segment, "QRSTUVWXYZ012345") == 0;
if (ok)
MachoDeinit(&m);
DefaultAllocatorDeinit(&alloc);
return ok;- In
MachO.c:1291:
ok = ok && VecLen(&m.segments) == 1;
if (ok)
MachoDeinit(&m);
DefaultAllocatorDeinit(&alloc);
return ok;- In
MachO.c:1322:
ok = ok && VecLen(&m.segments) == 0 && VecLen(&m.sections) == 0;
if (ok)
MachoDeinit(&m);
DefaultAllocatorDeinit(&alloc);
return ok;- In
MachO.c:1353:
ok = ok && s != NULL && s->value == 0x100000040ull;
MachoDeinit(&m);
DefaultAllocatorDeinit(&alloc);
return ok;- In
MachO.c:1393:
ok = ok && s != NULL && s->value == 0x100000010ull && s->section_index == 2;
MachoDeinit(&m);
DefaultAllocatorDeinit(&alloc);
return ok;- In
MachO.c:1431:
ok = ok && opened && VecLen(&m.segments) == 1;
if (opened)
MachoDeinit(&m);
FileRemove(&path);- In
MachO.c:1467:
bool opened = MachoOpen(&m, &path, base);
if (opened)
MachoDeinit(&m);
ok = ok && !opened; // garbage must be rejected
- In
MachO.c:1502:
bool opened = MachoOpenFromMemoryCopy(&m, buf, sizeof(buf), base);
if (opened)
MachoDeinit(&m);
// The open must have failed AND left no live allocations behind.
- In
MachO.c:1553:
ok = ok && m.has_uuid == true && MemCompare(m.uuid, kUuid, 16) == 0;
if (ok)
MachoDeinit(&m);
DefaultAllocatorDeinit(&alloc);
return ok;
Last updated on