MCPcopy Create free account
hub / github.com/BeneficialCode/WinArk / DetourFindJmpBounds

Function DetourFindJmpBounds

KernelLibrary/detours.cpp:229–251  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

227}
228
229void DetourFindJmpBounds(PUCHAR pCode, PDETOUR_TRAMPOLINE* ppLower,
230 PDETOUR_TRAMPOLINE* ppUpper) {
231 // We have to place trampolines within +/- 2GB of code
232 ULONG_PTR lo = Detour2gbBelow((ULONG_PTR)pCode);
233 ULONG_PTR hi = Detour2gbAbove((ULONG_PTR)pCode);
234 LogDebug("[%p..%p..%p]\n", (PVOID)lo, pCode, (PVOID)hi);
235
236 // And, within +/- 2GB of relative jmp vectors.
237 if (pCode[0] == 0xe9) { // jmp +imm32
238 PUCHAR pNew = pCode + 5 + *(UNALIGNED INT32*) & pCode[1];
239
240 if (pNew < pCode) {
241 hi = Detour2gbAbove((ULONG_PTR)pNew);
242 }
243 else {
244 lo = Detour2gbBelow((ULONG_PTR)pNew);
245 }
246 LogDebug("[%p..%p..%p] +imm32\n", (PVOID)lo, pCode, (PVOID)hi);
247 }
248
249 *ppLower = (PDETOUR_TRAMPOLINE)lo;
250 *ppUpper = (PDETOUR_TRAMPOLINE)hi;
251}
252
253bool DetourDoesCodeEndFunction(PUCHAR pCode) {
254 if (pCode[0] == 0xeb || // jmp +imm8

Callers

nothing calls this directly

Calls 3

Detour2gbBelowFunction · 0.85
Detour2gbAboveFunction · 0.85
LogDebugFunction · 0.85

Tested by

no test coverage detected