Skip to content

Commit

Permalink
[BUGFIX] In patch_analyzer: fixed calculating jump offsets
Browse files Browse the repository at this point in the history
  • Loading branch information
hasherezade committed May 3, 2018
1 parent 45ae0c1 commit 5de234a
Show file tree
Hide file tree
Showing 2 changed files with 8 additions and 7 deletions.
12 changes: 6 additions & 6 deletions scanners/patch_analyzer.cpp
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
#include "patch_analyzer.h"
//---

ULONGLONG PatchAnalyzer::getJmpDestAddr(ULONGLONG currVA, int instrLen, int lVal)
template <typename DELTA_T>
ULONGLONG PatchAnalyzer::getJmpDestAddr(ULONGLONG currVA, int instrLen, DELTA_T lVal)
{
int delta = instrLen + lVal;
int delta = instrLen + int(lVal);
ULONGLONG addr = currVA + delta;
return addr;
}
Expand All @@ -12,8 +12,8 @@ size_t PatchAnalyzer::parseShortJmp(PatchList::Patch &patch, PBYTE patch_ptr, UL
{
const size_t instr_size = 2;

DWORD *lval = (DWORD*)((ULONGLONG)patch_ptr + 1);
ULONGLONG addr = getJmpDestAddr(patch_va, instr_size, int(*lval));
BYTE *lval = (BYTE*)((ULONGLONG)patch_ptr + 1);
ULONGLONG addr = getJmpDestAddr<BYTE>(patch_va, instr_size, (*lval));

patch.setHookTarget(addr);
return instr_size;
Expand All @@ -24,7 +24,7 @@ size_t PatchAnalyzer::parseJmp(PatchList::Patch &patch, PBYTE patch_ptr, ULONGLO
const size_t instr_size = 5;

DWORD *lval = (DWORD*)((ULONGLONG) patch_ptr + 1);
ULONGLONG addr = getJmpDestAddr(patch_va, instr_size, int(*lval));
ULONGLONG addr = getJmpDestAddr<DWORD>(patch_va, instr_size, (*lval));

patch.setHookTarget(addr);
return instr_size;
Expand Down
3 changes: 2 additions & 1 deletion scanners/patch_analyzer.h
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,8 @@ class PatchAnalyzer
size_t parseMovJmp(PatchList::Patch &patch, PBYTE patch_ptr,bool is_long);
size_t parsePushRet(PatchList::Patch &patch, PBYTE patch_ptr);

ULONGLONG getJmpDestAddr(ULONGLONG currVA, int instrLen, int lVal);
template <typename DELTA_T>
ULONGLONG getJmpDestAddr(ULONGLONG currVA, int instrLen, DELTA_T lVal);

bool is64Modifier(BYTE op);
bool isLongModifier(BYTE op);
Expand Down

0 comments on commit 5de234a

Please sign in to comment.