1
0
mirror of https://github.com/0O0o0oOoO00/Alas.git synced 2026-05-22 03:29:28 +08:00
Files
Alas/blcrack/cracker/Dobby/source/InterceptRouting/Routing/InstructionInstrument/RoutingImpl.cc
2025-11-01 00:23:46 +08:00

41 lines
1.3 KiB
C++

#include "dobby/dobby_internal.h"
#include "TrampolineBridge/ClosureTrampolineBridge/ClosureTrampoline.h"
#include "InterceptRouting/Routing/InstructionInstrument/InstructionInstrumentRouting.h"
#include "InterceptRouting/Routing/InstructionInstrument/instrument_routing_handler.h"
// create closure trampoline jump to prologue_routing_dispatch with the `entry_` data
void InstructionInstrumentRouting::BuildRouting() {
void *handler = (void *)instrument_routing_dispatch;
#if defined(__APPLE__) && defined(__arm64__)
handler = pac_strip(handler);
#endif
auto closure_trampoline = ClosureTrampoline::CreateClosureTrampoline(entry_, handler);
this->SetTrampolineTarget((addr_t)closure_trampoline->address);
DEBUG_LOG("[closure trampoline] closure trampoline: %p, data: %p", closure_trampoline->address, entry_);
// generate trampoline buffer, before `GenerateRelocatedCode`
addr_t from = entry_->patched_addr;
#if defined(TARGET_ARCH_ARM)
if (entry_->thumb_mode)
from += 1;
#endif
addr_t to = GetTrampolineTarget();
GenerateTrampolineBuffer(from, to);
}
void InstructionInstrumentRouting::DispatchRouting() {
BuildRouting();
// generate relocated code which size == trampoline size
GenerateRelocatedCode();
}
#if 0
void *InstructionInstrumentRouting::GetTrampolineTarget() {
return this->prologue_dispatch_bridge;
}
#endif