mirror of
https://git.recroomarchive.org/Radium/libradhook.git
synced 2026-08-07 09:10:59 +00:00
fix: add support for "E9 rel32" for shorter method lengths
This commit is contained in:
@@ -15,13 +15,16 @@
|
||||
|
||||
#if defined(RADHOOK_ARCH_X64)
|
||||
struct X64Insn {
|
||||
size_t length = 0;
|
||||
bool ripRelative = false;
|
||||
size_t dispOffset = 0;
|
||||
bool relativeControlFlow = false;
|
||||
bool isReturn = false;
|
||||
bool isPadding = false;
|
||||
bool valid = false;
|
||||
size_t length = 0;
|
||||
bool ripRelative = false;
|
||||
size_t dispOffset = 0;
|
||||
bool relativeControlFlow = false;
|
||||
bool isReturn = false;
|
||||
bool isPadding = false;
|
||||
bool branchDisp = false;
|
||||
size_t branchDispOffset = 0;
|
||||
uint8_t branchDispSize = 0;
|
||||
bool valid = false;
|
||||
};
|
||||
|
||||
X64Insn
|
||||
@@ -30,9 +33,11 @@ DecodeX64(
|
||||
size_t avail
|
||||
);
|
||||
|
||||
constexpr size_t kX64StubLen = 14; // FF25 00000000 + imm64
|
||||
constexpr size_t kX64StubLen = 14; // FF25 00000000 + imm64
|
||||
constexpr size_t kX64StubLenShort = 5; // E9 rel32
|
||||
constexpr size_t kX64MaxStolen = 32;
|
||||
constexpr size_t kX64MaxRipFixups = 8;
|
||||
constexpr size_t kX64MaxBranchFixups = 8;
|
||||
|
||||
enum class StolenBytesError {
|
||||
None,
|
||||
@@ -43,6 +48,12 @@ enum class StolenBytesError {
|
||||
InsufficientLength,
|
||||
};
|
||||
|
||||
struct BranchFixup {
|
||||
size_t offset;
|
||||
size_t dispOffset;
|
||||
uint8_t dispSize;
|
||||
};
|
||||
|
||||
StolenBytesError
|
||||
BuildStolenBytesX64(
|
||||
const uint8_t* target,
|
||||
@@ -50,7 +61,9 @@ BuildStolenBytesX64(
|
||||
uint8_t* outBytes,
|
||||
size_t& outLen,
|
||||
size_t* outRipOffsets,
|
||||
size_t& outRipCount
|
||||
size_t& outRipCount,
|
||||
BranchFixup* outBranches,
|
||||
size_t& outBranchCount
|
||||
);
|
||||
|
||||
#endif // defined(RADHOOK_ARCH_X64)
|
||||
|
||||
Reference in New Issue
Block a user