Files
onionHEN/source/libhijacker/include/hijacker/allocator.hpp
T
HexwellandClaude Fable 5 971296f174 refactor: separate libhijacker headers from shared contracts
source/include mixed libhijacker's private implementation headers (util.hpp
with its hand-rolled UniquePtr/String/Vector, plus kernel/, elf/, dbg/,
hijacker/) with genuinely cross-module contracts, and the whole directory was
pulled in as -isystem, so any module could reach libhijacker internals and
every warning in those headers was suppressed.

Move the libhijacker-private headers to source/libhijacker/include and expose
it as a PUBLIC include directory, so the two modules that actually use it —
util for hijacker.hpp, shellui for SHA-1 — now declare that dependency.

Split sha1.hpp: the public-domain SHA-1 goes to third_party/sha1, while
NID_KEY, Sha1 and genSha1 (which needed libhijacker's StringView) move into
the nid.hpp that uses them. shellui only ever wanted the plain digest.

Drop source/include's SYSTEM marker now that it holds only first-party
contracts. That surfaced problems -isystem had been hiding:

  * 68 format-string mismatches in dbg.hpp, printing uintptr_t with %llx
  * freebsd-helper.h redefining PROT_* and TRACEBUF over the SDK's
  * ini.h's header-only helpers declared static rather than static inline

The GNU extensions that TYPE_BEGIN/TYPE_FIELD rely on are now silenced per
header instead of by the blanket -isystem.

Also drop three redundant util.hpp includes (bootstrapper, shellui) that
referenced none of its symbols, and fix backtrace.hpp being included through
relative ../include paths.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-26 20:13:50 +08:00

44 lines
1.1 KiB
C++

#pragma once
#include "kernel.hpp"
// "allocates" memory from another process out of EXISTING process memory
class ProcessMemoryAllocator {
static constexpr size_t ALIGNMENT = 0x10;
static constexpr size_t ALIGNMENT_MASK = 0xf;
const SharedLibSection *section;
size_t allocated;
public:
ProcessMemoryAllocator(decltype(nullptr)) : section(nullptr), allocated() {}
ProcessMemoryAllocator(const SharedLibSection *section) : section(section), allocated() {}
/**
* "Releases" all the allocated memory
*/
void release() {
allocated = 0;
}
/**
* Allocated virtual memory from the end of the existing section.
* It is allocated from the end because this portion of memory is likely unused.
* @param size the size of memory to "allocate"
* @return the virtual address for the requested memory
*/
uintptr_t allocate(size_t size) {
if ((size & ALIGNMENT_MASK) != 0) {
size = (size & ~ALIGNMENT_MASK) + ALIGNMENT;
}
allocated += size;
return section->end() - allocated;
}
operator bool() const {
return section != nullptr;
}
bool operator==(decltype(nullptr)) const {
return section == nullptr;
}
};