Commit 71e2bf79 authored by swift_gan's avatar swift_gan Committed by swift_gan

[NativeHook]tweak code

parent c07a0124
...@@ -28,6 +28,8 @@ void *InlineHookArm32Android::inlineHook(void *origin, void *replace) { ...@@ -28,6 +28,8 @@ void *InlineHookArm32Android::inlineHook(void *origin, void *replace) {
return nullptr; return nullptr;
} }
bool changeMode = isThumbCode((Addr) origin) != isThumbCode((Addr) replace);
void* backup = nullptr; void* backup = nullptr;
AssemblerA32 assemblerBackup(backupBuffer); AssemblerA32 assemblerBackup(backupBuffer);
...@@ -37,7 +39,7 @@ void *InlineHookArm32Android::inlineHook(void *origin, void *replace) { ...@@ -37,7 +39,7 @@ void *InlineHookArm32Android::inlineHook(void *origin, void *replace) {
//build inline trampoline //build inline trampoline
#define __ assemblerInline. #define __ assemblerInline.
if (isThumbCode((Addr) replace)) { if (!changeMode) {
Label *target_addr_label = new Label(); Label *target_addr_label = new Label();
__ Ldr(PC, target_addr_label); __ Ldr(PC, target_addr_label);
__ Emit(target_addr_label); __ Emit(target_addr_label);
...@@ -78,7 +80,7 @@ bool InlineHookArm32Android::breakPoint(void *origin, void (*callback)(REG *)) { ...@@ -78,7 +80,7 @@ bool InlineHookArm32Android::breakPoint(void *origin, void (*callback)(REG *)) {
return false; return false;
} }
bool callbackThumb = isThumbCode((Addr) callback); bool changeMode = isThumbCode((Addr) origin) != isThumbCode((Addr) callback);
void* backup = nullptr; void* backup = nullptr;
AssemblerA32 assemblerBackup(backupBuffer); AssemblerA32 assemblerBackup(backupBuffer);
...@@ -88,7 +90,7 @@ bool InlineHookArm32Android::breakPoint(void *origin, void (*callback)(REG *)) { ...@@ -88,7 +90,7 @@ bool InlineHookArm32Android::breakPoint(void *origin, void (*callback)(REG *)) {
//build backup method //build backup method
CodeRelocateA32 relocate = CodeRelocateA32(assemblerBackup); CodeRelocateA32 relocate = CodeRelocateA32(assemblerBackup);
backup = relocate.relocate(origin, callbackThumb ? (4 * 2) : (4 * 2 + 2), nullptr); backup = relocate.relocate(origin, changeMode ? (4 * 2 + 2) : (4 * 2), nullptr);
#define __ assemblerBackup. #define __ assemblerBackup.
__ Mov(IP ,(Addr) getThumbPC(reinterpret_cast<void *>((Addr)originCode + relocate.curOffset))); __ Mov(IP ,(Addr) getThumbPC(reinterpret_cast<void *>((Addr)originCode + relocate.curOffset)));
__ Bx(IP); __ Bx(IP);
...@@ -102,7 +104,7 @@ bool InlineHookArm32Android::breakPoint(void *origin, void (*callback)(REG *)) { ...@@ -102,7 +104,7 @@ bool InlineHookArm32Android::breakPoint(void *origin, void (*callback)(REG *)) {
//build inline trampoline //build inline trampoline
#define __ assemblerInline. #define __ assemblerInline.
if (callbackThumb) { if (!changeMode) {
Label *target_addr_label = new Label(); Label *target_addr_label = new Label();
__ Ldr(PC, target_addr_label); __ Ldr(PC, target_addr_label);
__ Emit(target_addr_label); __ Emit(target_addr_label);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment