Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Contribute to GitLab
Sign in / Register
Toggle navigation
S
SandHook
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Administrator
SandHook
Commits
e85c7f8d
Commit
e85c7f8d
authored
May 23, 2019
by
swift_gan
Committed by
swift_gan
May 23, 2019
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
[NativeHook]tweak code
parent
89594d29
Show whitespace changes
Inline
Side-by-side
Showing
34 changed files
with
290 additions
and
66 deletions
+290
-66
CMakeLists.txt
nativehook/CMakeLists.txt
+9
-7
assembler_arm32.cpp
...rc/main/cpp/archs/arm/arm32/assembler/assembler_arm32.cpp
+1
-1
assembler_arm32.h
.../src/main/cpp/archs/arm/arm32/assembler/assembler_arm32.h
+1
-1
decoder_arm32.cpp
...ok/src/main/cpp/archs/arm/arm32/decoder/decoder_arm32.cpp
+75
-0
decoder_arm32.h
...hook/src/main/cpp/archs/arm/arm32/decoder/decoder_arm32.h
+23
-0
arm32_base.h
nativehook/src/main/cpp/archs/arm/arm32/inst/arm32_base.h
+1
-1
inst_code_arm32.h
...ehook/src/main/cpp/archs/arm/arm32/inst/inst_code_arm32.h
+2
-3
inst_struct_t16.h
...ehook/src/main/cpp/archs/arm/arm32/inst/inst_struct_t16.h
+5
-0
inst_struct_t32.h
...ehook/src/main/cpp/archs/arm/arm32/inst/inst_struct_t32.h
+6
-0
inst_t16.cpp
nativehook/src/main/cpp/archs/arm/arm32/inst/inst_t16.cpp
+15
-1
inst_t16.h
nativehook/src/main/cpp/archs/arm/arm32/inst/inst_t16.h
+52
-27
inst_t32.cpp
nativehook/src/main/cpp/archs/arm/arm32/inst/inst_t32.cpp
+16
-0
inst_t32.h
nativehook/src/main/cpp/archs/arm/arm32/inst/inst_t32.h
+22
-2
register_arm32.cpp
.../src/main/cpp/archs/arm/arm32/register/register_arm32.cpp
+2
-2
register_arm32.h
...ok/src/main/cpp/archs/arm/arm32/register/register_arm32.h
+0
-0
register_list_arm32.cpp
...main/cpp/archs/arm/arm32/register/register_list_arm32.cpp
+1
-1
register_list_arm32.h
...c/main/cpp/archs/arm/arm32/register/register_list_arm32.h
+1
-1
assembler_arm64.cpp
...rc/main/cpp/archs/arm/arm64/assembler/assembler_arm64.cpp
+1
-1
assembler_arm64.h
.../src/main/cpp/archs/arm/arm64/assembler/assembler_arm64.h
+1
-1
decoder_arm64.cpp
...ok/src/main/cpp/archs/arm/arm64/decoder/decoder_arm64.cpp
+3
-1
decoder_arm64.h
...hook/src/main/cpp/archs/arm/arm64/decoder/decoder_arm64.h
+2
-0
inst_arm64.cpp
nativehook/src/main/cpp/archs/arm/arm64/inst/inst_arm64.cpp
+2
-2
inst_arm64.h
nativehook/src/main/cpp/archs/arm/arm64/inst/inst_arm64.h
+1
-1
register_arm64.cpp
.../src/main/cpp/archs/arm/arm64/register/register_arm64.cpp
+2
-2
register_arm64.h
...ok/src/main/cpp/archs/arm/arm64/register/register_arm64.h
+0
-0
register_list_arm64.cpp
...main/cpp/archs/arm/arm64/register/register_list_arm64.cpp
+1
-1
register_list_arm64.h
...c/main/cpp/archs/arm/arm64/register/register_list_arm64.h
+1
-1
code_relocate_arm64.cpp
...main/cpp/archs/arm/arm64/relocate/code_relocate_arm64.cpp
+1
-1
code_relocate_arm64.h
...c/main/cpp/archs/arm/arm64/relocate/code_relocate_arm64.h
+1
-1
memory.h
nativehook/src/main/cpp/asm/memory.h
+16
-0
code_buffer.cpp
nativehook/src/main/cpp/buffer/code_buffer.cpp
+4
-1
decoder.cpp
nativehook/src/main/cpp/decoder/decoder.cpp
+18
-3
hook.cpp
nativehook/src/main/cpp/hook/hook.cpp
+3
-3
decoder.h
nativehook/src/main/cpp/includes/decoder.h
+1
-0
No files found.
nativehook/CMakeLists.txt
View file @
e85c7f8d
...
@@ -19,18 +19,19 @@ add_library( # Sets the name of the library.
...
@@ -19,18 +19,19 @@ add_library( # Sets the name of the library.
# Provides a relative path to your source file(s).
# Provides a relative path to your source file(s).
src/main/cpp/sandhook_native.cpp
src/main/cpp/sandhook_native.cpp
src/main/cpp/decoder/decoder.cpp
src/main/cpp/decoder/decoder.cpp
src/main/cpp/archs/arm/arm64/assembler/assembler_a64.cpp
src/main/cpp/archs/arm/arm64/assembler/assembler_a
rm
64.cpp
src/main/cpp/archs/arm/arm64/inst/inst_arm64.cpp
src/main/cpp/archs/arm/arm64/inst/inst_arm64.cpp
src/main/cpp/archs/arm/arm64/register/register_a64.cpp
src/main/cpp/archs/arm/arm64/register/register_a
rm
64.cpp
src/main/cpp/archs/arm/arm64/register/register_list_a64.cpp
src/main/cpp/archs/arm/arm64/register/register_list_a
rm
64.cpp
src/main/cpp/archs/arm/arm64/decoder/decoder_arm64.cpp
src/main/cpp/archs/arm/arm64/decoder/decoder_arm64.cpp
src/main/cpp/archs/arm/arm64/relocate/code_relocate_a64.cpp
src/main/cpp/archs/arm/arm64/relocate/code_relocate_a
rm
64.cpp
src/main/cpp/archs/arm/arm32/inst/inst_arm32.cpp
src/main/cpp/archs/arm/arm32/inst/inst_arm32.cpp
src/main/cpp/archs/arm/arm32/inst/inst_t32.cpp
src/main/cpp/archs/arm/arm32/inst/inst_t32.cpp
src/main/cpp/archs/arm/arm32/inst/inst_t16.cpp
src/main/cpp/archs/arm/arm32/inst/inst_t16.cpp
src/main/cpp/archs/arm/arm32/register/register_a32.cpp
src/main/cpp/archs/arm/arm32/register/register_arm32.cpp
src/main/cpp/archs/arm/arm32/register/register_list_a32.cpp
src/main/cpp/archs/arm/arm32/register/register_list_arm32.cpp
src/main/cpp/archs/arm/arm32/assembler/assembler_a32.cpp
src/main/cpp/archs/arm/arm32/assembler/assembler_arm32.cpp
src/main/cpp/archs/arm/arm32/decoder/decoder_arm32.cpp
src/main/cpp/relocate/code_relocate.cpp
src/main/cpp/relocate/code_relocate.cpp
src/main/cpp/elf/elf.cpp
src/main/cpp/elf/elf.cpp
src/main/cpp/assembler/assembler.cpp
src/main/cpp/assembler/assembler.cpp
...
@@ -56,6 +57,7 @@ include_directories(
...
@@ -56,6 +57,7 @@ include_directories(
src/main/cpp/archs/arm/arm32/inst
src/main/cpp/archs/arm/arm32/inst
src/main/cpp/archs/arm/arm32/register
src/main/cpp/archs/arm/arm32/register
src/main/cpp/archs/arm/arm32/assembler
src/main/cpp/archs/arm/arm32/assembler
src/main/cpp/archs/arm/arm32/decoder
)
)
# Searches for a specified prebuilt library and stores the path as a
# Searches for a specified prebuilt library and stores the path as a
...
...
nativehook/src/main/cpp/archs/arm/arm32/assembler/assembler_a32.cpp
→
nativehook/src/main/cpp/archs/arm/arm32/assembler/assembler_a
rm
32.cpp
View file @
e85c7f8d
...
@@ -2,7 +2,7 @@
...
@@ -2,7 +2,7 @@
// Created by swift on 2019/5/22.
// Created by swift on 2019/5/22.
//
//
#include "assembler_a32.h"
#include "assembler_a
rm
32.h"
#include "exception.h"
#include "exception.h"
using
namespace
SandHook
::
Assembler
;
using
namespace
SandHook
::
Assembler
;
...
...
nativehook/src/main/cpp/archs/arm/arm32/assembler/assembler_a32.h
→
nativehook/src/main/cpp/archs/arm/arm32/assembler/assembler_a
rm
32.h
View file @
e85c7f8d
...
@@ -6,7 +6,7 @@
...
@@ -6,7 +6,7 @@
#define SANDHOOK_ASSEMBLER_A32_H
#define SANDHOOK_ASSEMBLER_A32_H
#include "assembler.h"
#include "assembler.h"
#include "register_a32.h"
#include "register_a
rm
32.h"
#include "inst_t16.h"
#include "inst_t16.h"
#include "inst_t32.h"
#include "inst_t32.h"
...
...
nativehook/src/main/cpp/archs/arm/arm32/decoder/decoder_arm32.cpp
0 → 100644
View file @
e85c7f8d
//
// Created by swift on 2019/5/23.
//
#include "inst_t16.h"
#include "inst_t32.h"
#include "decoder_arm32.h"
using
namespace
SandHook
::
Decoder
;
using
namespace
SandHook
::
AsmA32
;
#define CASE(T, X) \
if (IS_OPCODE_##T(*reinterpret_cast<Inst##T *>(pc), X)) { \
STRUCT_##T(X) *s = reinterpret_cast<STRUCT_##T(X) *>(pc); \
unit = reinterpret_cast<Unit<Base> *>(new INST_##T(X)(s)); \
goto label_matched; \
}
#define CASE_A32(X) CASE(A32, X)
#define CASE_T16(X) CASE(T16, X)
#define CASE_T32(X) CASE(T32, X)
Arm32Decoder
*
Arm32Decoder
::
instant
=
new
Arm32Decoder
();
void
Arm32Decoder
::
decode
(
void
*
codeStart
,
Addr
codeLen
,
InstVisitor
&
visitor
)
{
void
*
pc
=
codeStart
;
Addr
endAddr
=
(
Addr
)
codeStart
+
codeLen
;
Unit
<
Base
>*
unit
=
nullptr
;
while
((
Addr
)
pc
<
endAddr
)
{
bool
thumb
=
isThumbCode
(
reinterpret_cast
<
Addr
>
(
pc
));
bool
thumb32
=
isThumb32
(
*
reinterpret_cast
<
InstT16
*>
(
pc
));
if
(
thumb
&&
thumb32
)
{
CASE_T32
(
B32
)
CASE_T32
(
LDR_LIT
)
CASE_T32
(
LDR_IMM
)
CASE_T32
(
LDR_UIMM
)
CASE_T32
(
MOV_MOVT_IMM
)
if
(
unit
==
nullptr
)
{
unit
=
reinterpret_cast
<
Unit
<
Base
>
*>
(
new
INST_T32
(
UNKNOW
)(
*
reinterpret_cast
<
STRUCT_T32
(
UNKNOW
)
*>
(
pc
)));
}
}
else
if
(
thumb
)
{
CASE_T16
(
B
)
CASE_T16
(
B_COND
)
CASE_T16
(
BX_BLX
)
CASE_T16
(
CBZ_CBNZ
)
CASE_T16
(
LDR_LIT
)
CASE_T16
(
ADD_IMM_RDN
)
CASE_T16
(
ADR
)
CASE_T16
(
ADD_REG
)
CASE_T16
(
CMP_REG
)
CASE_T16
(
CMP_REG_EXT
)
CASE_T16
(
MOV_REG
)
CASE_T16
(
POP
)
CASE_T16
(
PUSH
)
if
(
unit
==
nullptr
)
{
unit
=
reinterpret_cast
<
Unit
<
Base
>
*>
(
new
INST_T16
(
UNKNOW
)(
*
reinterpret_cast
<
STRUCT_T16
(
UNKNOW
)
*>
(
pc
)));
}
}
else
{
//TODO
unit
=
reinterpret_cast
<
Unit
<
Base
>
*>
(
new
INST_T32
(
UNKNOW
)(
*
reinterpret_cast
<
STRUCT_T32
(
UNKNOW
)
*>
(
pc
)));
}
label_matched
:
if
(
!
visitor
.
visit
(
unit
,
pc
))
{
break
;
}
pc
=
reinterpret_cast
<
InstA64
*>
((
Addr
)
pc
+
unit
->
size
());
unit
=
nullptr
;
}
}
nativehook/src/main/cpp/archs/arm/arm32/decoder/decoder_arm32.h
0 → 100644
View file @
e85c7f8d
//
// Created by swift on 2019/5/23.
//
#ifndef SANDHOOK_DECODER_A32_H
#define SANDHOOK_DECODER_A32_H
#include "decoder.h"
namespace
SandHook
{
namespace
Decoder
{
class
Arm32Decoder
:
public
InstDecoder
{
public
:
void
decode
(
void
*
codeStart
,
Addr
codeLen
,
InstVisitor
&
visitor
)
override
;
public
:
static
Arm32Decoder
*
instant
;
};
}
}
#endif //SANDHOOK_DECODER_A32_H
nativehook/src/main/cpp/archs/arm/arm32/inst/arm32_base.h
View file @
e85c7f8d
...
@@ -7,7 +7,7 @@
...
@@ -7,7 +7,7 @@
#include <ostream>
#include <ostream>
#include "arm_base.h"
#include "arm_base.h"
#include "register_list_a32.h"
#include "register_list_a
rm
32.h"
#include "instruction.h"
#include "instruction.h"
#define DECODE_OFFSET(bits, ext) signExtend32(bits + ext, COMBINE(get()->imm##bits, 0, ext))
#define DECODE_OFFSET(bits, ext) signExtend32(bits + ext, COMBINE(get()->imm##bits, 0, ext))
...
...
nativehook/src/main/cpp/archs/arm/arm32/inst/inst_code_arm32.h
View file @
e85c7f8d
...
@@ -10,6 +10,7 @@ enum class InstCodeA32 {
...
@@ -10,6 +10,7 @@ enum class InstCodeA32 {
};
};
enum
class
InstCodeT16
{
enum
class
InstCodeT16
{
UNKNOW
,
BASE_SASMC
,
BASE_SASMC
,
DATA_PROC
,
DATA_PROC
,
SPDIABE
,
SPDIABE
,
...
@@ -19,7 +20,6 @@ enum class InstCodeT16 {
...
@@ -19,7 +20,6 @@ enum class InstCodeT16 {
BX_BLX
,
BX_BLX
,
CBZ_CBNZ
,
CBZ_CBNZ
,
LDR_LIT
,
LDR_LIT
,
//when rd = rn
ADD_IMM_RDN
,
ADD_IMM_RDN
,
//rn = pc
//rn = pc
ADR
,
ADR
,
...
@@ -28,17 +28,16 @@ enum class InstCodeT16 {
...
@@ -28,17 +28,16 @@ enum class InstCodeT16 {
CMP_REG_EXT
,
CMP_REG_EXT
,
MOV_IMM
,
MOV_IMM
,
MOV_REG
,
MOV_REG
,
ADD_IMM_RND
,
POP
,
POP
,
PUSH
PUSH
};
};
enum
class
InstCodeT32
{
enum
class
InstCodeT32
{
UNKNOW
,
B32
,
B32
,
LDR_LIT
,
LDR_LIT
,
LDR_IMM
,
LDR_IMM
,
LDR_UIMM
,
LDR_UIMM
,
LDRB_LIT
,
MOV_MOVT_IMM
MOV_MOVT_IMM
};
};
...
...
nativehook/src/main/cpp/archs/arm/arm32/inst/inst_struct_t16.h
View file @
e85c7f8d
...
@@ -34,6 +34,11 @@ DEFINE_OPCODE_T16(MISC, 0b1011)
...
@@ -34,6 +34,11 @@ DEFINE_OPCODE_T16(MISC, 0b1011)
#define T16_REG_WIDE 3
#define T16_REG_WIDE 3
//unknow inst
DEFINE_STRUCT_T16
(
UNKNOW
)
{
InstT16
raw
;
};
DEFINE_OPCODE_T16
(
B
,
0
b11100
)
DEFINE_OPCODE_T16
(
B
,
0
b11100
)
DEFINE_STRUCT_T16
(
B
)
{
DEFINE_STRUCT_T16
(
B
)
{
InstT16
imm11
:
11
;
InstT16
imm11
:
11
;
...
...
nativehook/src/main/cpp/archs/arm/arm32/inst/inst_struct_t32.h
View file @
e85c7f8d
...
@@ -16,6 +16,12 @@
...
@@ -16,6 +16,12 @@
#define T32_REG_WIDE 4
#define T32_REG_WIDE 4
//unknow inst
DEFINE_STRUCT_T32
(
UNKNOW
)
{
InstT32
raw
;
};
DEFINE_OPCODE_T32
(
B32
,
0
b11110
)
DEFINE_OPCODE_T32
(
B32
,
0
b11110
)
DEFINE_STRUCT_T32
(
B32
)
{
DEFINE_STRUCT_T32
(
B32
)
{
InstT32
imm11
:
11
;
InstT32
imm11
:
11
;
...
...
nativehook/src/main/cpp/archs/arm/arm32/inst/inst_t16.cpp
View file @
e85c7f8d
...
@@ -4,7 +4,7 @@
...
@@ -4,7 +4,7 @@
#include "inst_t16.h"
#include "inst_t16.h"
#include "arm32_base.h"
#include "arm32_base.h"
#include "register_list_a32.h"
#include "register_list_a
rm
32.h"
#define SET_BASE_OPCODE(X) get()->opcode_base = OPCODE_T16(X)
#define SET_BASE_OPCODE(X) get()->opcode_base = OPCODE_T16(X)
...
@@ -15,6 +15,20 @@ using namespace SandHook::AsmA32;
...
@@ -15,6 +15,20 @@ using namespace SandHook::AsmA32;
using
namespace
SandHook
::
RegistersA32
;
using
namespace
SandHook
::
RegistersA32
;
//Unknow
T16_UNKNOW
::
T16_UNKNOW
(
STRUCT_T16
(
UNKNOW
)
&
inst
)
:
InstructionT16
(
&
inst
)
{
decode
(
&
inst
);
}
void
T16_UNKNOW
::
decode
(
T16_STRUCT_UNKNOW
*
inst
)
{
inst_backup
=
*
inst
;
}
void
T16_UNKNOW
::
assembler
()
{
set
(
inst_backup
);
}
//B
//B
T16_B
::
T16_B
()
{}
T16_B
::
T16_B
()
{}
...
...
nativehook/src/main/cpp/archs/arm/arm32/inst/inst_t16.h
View file @
e85c7f8d
...
@@ -6,14 +6,14 @@
...
@@ -6,14 +6,14 @@
#define SANDHOOK_INST_T16_H
#define SANDHOOK_INST_T16_H
#include "arm_base.h"
#include "arm_base.h"
#include "register_list_a32.h"
#include "register_list_a
rm
32.h"
#include "inst_struct_t16.h"
#include "inst_struct_t16.h"
#include "inst_code_arm32.h"
#include "inst_code_arm32.h"
#include "arm32_base.h"
#include "arm32_base.h"
#define INST_T16(X) T16_##X
#define INST_T16(X) T16_##X
#define IS_OPCODE_T16(RAW,OP) INST_T16(OP)::is(RAW)
#define IS_OPCODE_T16(RAW,
OP) INST_T16(OP)::is(RAW)
#define DEFINE_IS_EXT(X, COND) \
#define DEFINE_IS_EXT(X, COND) \
inline static bool is(InstT16& inst) { \
inline static bool is(InstT16& inst) { \
...
@@ -27,7 +27,7 @@ return COND; \
...
@@ -27,7 +27,7 @@ return COND; \
#define DEFINE_IS(X) DEFINE_IS_EXT(X, TEST_INST_FIELD(opcode,OPCODE_T16(X)))
#define DEFINE_IS(X) DEFINE_IS_EXT(X, TEST_INST_FIELD(opcode,OPCODE_T16(X)))
#define TEST_INST_FIELD(F,V) inst_test.inst.F == V
#define TEST_INST_FIELD(F,
V) inst_test.inst.F == V
#define INST_FIELD(F) inst_test.inst.F
#define INST_FIELD(F) inst_test.inst.F
...
@@ -87,7 +87,7 @@ namespace SandHook {
...
@@ -87,7 +87,7 @@ namespace SandHook {
};
};
template
<
typename
Inst
>
template
<
typename
Inst
>
class
T16_INST_PC_REL
:
public
InstructionT16
<
Inst
>
{
class
T16_INST_PC_REL
:
public
InstructionT16
<
Inst
>
{
public
:
public
:
...
@@ -110,6 +110,26 @@ namespace SandHook {
...
@@ -110,6 +110,26 @@ namespace SandHook {
};
};
class
INST_T16
(
UNKNOW
)
:
public
InstructionT16
<
STRUCT_T16
(
UNKNOW
)
>
{
public
:
T16_UNKNOW
(
STRUCT_T16
(
UNKNOW
)
&
inst
);
DEFINE_INST_CODE
(
UNKNOW
)
inline
bool
unknow
()
override
{
return
true
;
}
void
decode
(
T16_STRUCT_UNKNOW
*
inst
)
override
;
void
assembler
()
override
;
private
:
STRUCT_T16
(
UNKNOW
)
inst_backup
;
};
class
INST_T16
(
B
)
:
public
T16_INST_PC_REL
<
STRUCT_T16
(
B
)
>
{
class
INST_T16
(
B
)
:
public
T16_INST_PC_REL
<
STRUCT_T16
(
B
)
>
{
public
:
public
:
T16_B
();
T16_B
();
...
@@ -118,7 +138,7 @@ namespace SandHook {
...
@@ -118,7 +138,7 @@ namespace SandHook {
T16_B
(
Off
offset
);
T16_B
(
Off
offset
);
T16_B
(
Label
&
label
);
T16_B
(
Label
&
label
);
DEFINE_IS
(
B
)
DEFINE_IS
(
B
)
...
@@ -144,9 +164,10 @@ namespace SandHook {
...
@@ -144,9 +164,10 @@ namespace SandHook {
T16_B_COND
(
Condition
condition
,
Off
offset
);
T16_B_COND
(
Condition
condition
,
Off
offset
);
T16_B_COND
(
Condition
condition
,
Label
&
label
);
T16_B_COND
(
Condition
condition
,
Label
&
label
);
DEFINE_IS_EXT
(
B_COND
,
TEST_INST_FIELD
(
opcode
,
OPCODE_T16
(
B_COND
))
&&
INST_FIELD
(
cond
)
!=
0
b1110
&&
INST_FIELD
(
cond
)
!=
0
b1111
)
DEFINE_IS_EXT
(
B_COND
,
TEST_INST_FIELD
(
opcode
,
OPCODE_T16
(
B_COND
))
&&
INST_FIELD
(
cond
)
!=
0
b1110
&&
INST_FIELD
(
cond
)
!=
0
b1111
)
DEFINE_INST_CODE
(
B_COND
)
DEFINE_INST_CODE
(
B_COND
)
...
@@ -186,7 +207,7 @@ namespace SandHook {
...
@@ -186,7 +207,7 @@ namespace SandHook {
public
:
public
:
OP
op
;
OP
op
;
RegisterA32
*
rm
;
RegisterA32
*
rm
;
};
};
...
@@ -201,9 +222,11 @@ namespace SandHook {
...
@@ -201,9 +222,11 @@ namespace SandHook {
T16_CBZ_CBNZ
(
OP
op
,
Off
offset
,
RegisterA32
&
rn
);
T16_CBZ_CBNZ
(
OP
op
,
Off
offset
,
RegisterA32
&
rn
);
T16_CBZ_CBNZ
(
OP
op
,
Label
&
label
,
RegisterA32
&
rn
);
T16_CBZ_CBNZ
(
OP
op
,
Label
&
label
,
RegisterA32
&
rn
);
DEFINE_IS_EXT
(
CBZ_CBNZ
,
TEST_INST_OPCODE
(
CBZ_CBNZ
,
1
)
&&
TEST_INST_OPCODE
(
CBZ_CBNZ
,
2
)
&&
TEST_INST_OPCODE
(
CBZ_CBNZ
,
3
))
DEFINE_IS_EXT
(
CBZ_CBNZ
,
TEST_INST_OPCODE
(
CBZ_CBNZ
,
1
)
&&
TEST_INST_OPCODE
(
CBZ_CBNZ
,
2
)
&&
TEST_INST_OPCODE
(
CBZ_CBNZ
,
3
))
DEFINE_INST_CODE
(
CBZ_CBNZ
)
DEFINE_INST_CODE
(
CBZ_CBNZ
)
...
@@ -218,7 +241,7 @@ namespace SandHook {
...
@@ -218,7 +241,7 @@ namespace SandHook {
public
:
public
:
OP
op
;
OP
op
;
Off
offset
;
Off
offset
;
RegisterA32
*
rn
;
RegisterA32
*
rn
;
};
};
...
@@ -247,7 +270,7 @@ namespace SandHook {
...
@@ -247,7 +270,7 @@ namespace SandHook {
public
:
public
:
Off
offset
;
Off
offset
;
RegisterA32
*
rt
;
RegisterA32
*
rt
;
};
};
...
@@ -259,14 +282,14 @@ namespace SandHook {
...
@@ -259,14 +282,14 @@ namespace SandHook {
DEFINE_IS
(
ADD_IMM_RDN
)
DEFINE_IS
(
ADD_IMM_RDN
)
DEFINE_INST_CODE
(
ADD_IMM_R
ND
)
DEFINE_INST_CODE
(
ADD_IMM_R
DN
)
void
decode
(
T16_STRUCT_ADD_IMM_RDN
*
inst
)
override
;
void
decode
(
T16_STRUCT_ADD_IMM_RDN
*
inst
)
override
;
void
assembler
()
override
;
void
assembler
()
override
;
public
:
public
:
RegisterA32
*
rdn
;
RegisterA32
*
rdn
;
U8
imm8
;
U8
imm8
;
};
};
...
@@ -277,7 +300,7 @@ namespace SandHook {
...
@@ -277,7 +300,7 @@ namespace SandHook {
T16_ADR
(
RegisterA32
*
rd
,
Off
offset
);
T16_ADR
(
RegisterA32
*
rd
,
Off
offset
);
T16_ADR
(
RegisterA32
*
rd
,
Label
&
label
);
T16_ADR
(
RegisterA32
*
rd
,
Label
&
label
);
DEFINE_IS
(
ADR
)
DEFINE_IS
(
ADR
)
...
@@ -292,7 +315,7 @@ namespace SandHook {
...
@@ -292,7 +315,7 @@ namespace SandHook {
void
assembler
()
override
;
void
assembler
()
override
;
public
:
public
:
RegisterA32
*
rd
;
RegisterA32
*
rd
;
Off
offset
;
Off
offset
;
};
};
...
@@ -307,15 +330,16 @@ namespace SandHook {
...
@@ -307,15 +330,16 @@ namespace SandHook {
DEFINE_INST_CODE
(
CMP_REG
)
DEFINE_INST_CODE
(
CMP_REG
)
DEFINE_IS_EXT
(
CMP_REG
,
TEST_INST_FIELD
(
opcode_base
,
OPCODE_T16
(
DATA_PROC
))
&&
TEST_INST_FIELD
(
opcode
,
OPCODE_T16
(
CMP_REG
)))
DEFINE_IS_EXT
(
CMP_REG
,
TEST_INST_FIELD
(
opcode_base
,
OPCODE_T16
(
DATA_PROC
))
&&
TEST_INST_FIELD
(
opcode
,
OPCODE_T16
(
CMP_REG
)))
void
decode
(
T16_STRUCT_CMP_REG
*
inst
)
override
;
void
decode
(
T16_STRUCT_CMP_REG
*
inst
)
override
;
void
assembler
()
override
;
void
assembler
()
override
;
public
:
public
:
RegisterA32
*
rm
;
RegisterA32
*
rm
;
RegisterA32
*
rn
;
RegisterA32
*
rn
;
};
};
...
@@ -328,7 +352,8 @@ namespace SandHook {
...
@@ -328,7 +352,8 @@ namespace SandHook {
DEFINE_INST_CODE
(
MOV_REG
)
DEFINE_INST_CODE
(
MOV_REG
)
DEFINE_IS_EXT
(
MOV_REG
,
TEST_INST_FIELD
(
opcode_base
,
OPCODE_T16
(
DATA_PROC
))
&&
TEST_INST_FIELD
(
opcode
,
OPCODE_T16
(
MOV_REG
)))
DEFINE_IS_EXT
(
MOV_REG
,
TEST_INST_FIELD
(
opcode_base
,
OPCODE_T16
(
DATA_PROC
))
&&
TEST_INST_FIELD
(
opcode
,
OPCODE_T16
(
MOV_REG
)))
void
decode
(
T16_STRUCT_MOV_REG
*
inst
)
override
;
void
decode
(
T16_STRUCT_MOV_REG
*
inst
)
override
;
...
@@ -337,8 +362,8 @@ namespace SandHook {
...
@@ -337,8 +362,8 @@ namespace SandHook {
bool
pcRelate
()
override
;
bool
pcRelate
()
override
;
public
:
public
:
RegisterA32
*
rd
;
RegisterA32
*
rd
;
RegisterA32
*
rm
;
RegisterA32
*
rm
;
};
};
...
@@ -359,9 +384,9 @@ namespace SandHook {
...
@@ -359,9 +384,9 @@ namespace SandHook {
void
assembler
()
override
;
void
assembler
()
override
;
public
:
public
:
RegisterA32
*
rd
;
RegisterA32
*
rd
;
RegisterA32
*
rn
;
RegisterA32
*
rn
;
RegisterA32
*
rm
;
RegisterA32
*
rm
;
};
};
...
@@ -382,8 +407,8 @@ namespace SandHook {
...
@@ -382,8 +407,8 @@ namespace SandHook {
public
:
public
:
RegisterA32
*
rn
;
RegisterA32
*
rn
;
RegisterA32
*
rm
;
RegisterA32
*
rm
;
};
};
...
...
nativehook/src/main/cpp/archs/arm/arm32/inst/inst_t32.cpp
View file @
e85c7f8d
...
@@ -15,6 +15,22 @@ using namespace SandHook::Asm;
...
@@ -15,6 +15,22 @@ using namespace SandHook::Asm;
using
namespace
SandHook
::
AsmA32
;
using
namespace
SandHook
::
AsmA32
;
//Unknow
T32_UNKNOW
::
T32_UNKNOW
(
STRUCT_T32
(
UNKNOW
)
&
inst
)
:
InstructionT32
(
&
inst
)
{
decode
(
&
inst
);
}
void
T32_UNKNOW
::
decode
(
T32_STRUCT_UNKNOW
*
inst
)
{
inst_backup
=
*
inst
;
}
void
T32_UNKNOW
::
assembler
()
{
set
(
inst_backup
);
}
T32_B32
::
T32_B32
(
T32_STRUCT_B32
*
inst
)
:
T32_INST_PC_REL
(
inst
)
{}
T32_B32
::
T32_B32
(
T32_STRUCT_B32
*
inst
)
:
T32_INST_PC_REL
(
inst
)
{}
T32_B32
::
T32_B32
(
T32_B32
::
OP
op
,
T32_B32
::
X
x
,
Off
offset
)
:
op
(
op
),
x
(
x
),
offset
(
offset
)
{}
T32_B32
::
T32_B32
(
T32_B32
::
OP
op
,
T32_B32
::
X
x
,
Off
offset
)
:
op
(
op
),
x
(
x
),
offset
(
offset
)
{}
...
...
nativehook/src/main/cpp/archs/arm/arm32/inst/inst_t32.h
View file @
e85c7f8d
...
@@ -7,7 +7,7 @@
...
@@ -7,7 +7,7 @@
#include "arm_base.h"
#include "arm_base.h"
#include "arm32_base.h"
#include "arm32_base.h"
#include "register_list_a32.h"
#include "register_list_a
rm
32.h"
#include "inst_struct_t16.h"
#include "inst_struct_t16.h"
#include "inst_code_arm32.h"
#include "inst_code_arm32.h"
#include "inst_struct_t32.h"
#include "inst_struct_t32.h"
...
@@ -17,7 +17,7 @@
...
@@ -17,7 +17,7 @@
#define IS_OPCODE_T32(RAW,OP) INST_T32(OP)::is(RAW)
#define IS_OPCODE_T32(RAW,OP) INST_T32(OP)::is(RAW)
#define DEFINE_IS_EXT(X, COND) \
#define DEFINE_IS_EXT(X, COND) \
inline static bool is(InstT
16
& inst) { \
inline static bool is(InstT
32
& inst) { \
union { \
union { \
InstT32 raw; \
InstT32 raw; \
STRUCT_T32(X) inst; \
STRUCT_T32(X) inst; \
...
@@ -107,6 +107,26 @@ namespace SandHook {
...
@@ -107,6 +107,26 @@ namespace SandHook {
};
};
class
INST_T32
(
UNKNOW
)
:
public
InstructionT32
<
STRUCT_T32
(
UNKNOW
)
>
{
public
:
T32_UNKNOW
(
STRUCT_T32
(
UNKNOW
)
&
inst
);
DEFINE_INST_CODE
(
UNKNOW
)
inline
bool
unknow
()
override
{
return
true
;
}
void
decode
(
T32_STRUCT_UNKNOW
*
inst
)
override
;
void
assembler
()
override
;
private
:
STRUCT_T32
(
UNKNOW
)
inst_backup
;
};
class
INST_T32
(
B32
)
:
public
T32_INST_PC_REL
<
STRUCT_T32
(
B32
)
>
{
class
INST_T32
(
B32
)
:
public
T32_INST_PC_REL
<
STRUCT_T32
(
B32
)
>
{
public
:
public
:
...
...
nativehook/src/main/cpp/archs/arm/arm32/register/register_a32.cpp
→
nativehook/src/main/cpp/archs/arm/arm32/register/register_a
rm
32.cpp
View file @
e85c7f8d
...
@@ -2,8 +2,8 @@
...
@@ -2,8 +2,8 @@
// Created by swift on 2019/5/12.
// Created by swift on 2019/5/12.
//
//
#include "register_a32.h"
#include "register_a
rm
32.h"
#include "register_list_a32.h"
#include "register_list_a
rm
32.h"
using
namespace
SandHook
::
RegistersA32
;
using
namespace
SandHook
::
RegistersA32
;
...
...
nativehook/src/main/cpp/archs/arm/arm32/register/register_a32.h
→
nativehook/src/main/cpp/archs/arm/arm32/register/register_a
rm
32.h
View file @
e85c7f8d
File moved
nativehook/src/main/cpp/archs/arm/arm32/register/register_list_a32.cpp
→
nativehook/src/main/cpp/archs/arm/arm32/register/register_list_a
rm
32.cpp
View file @
e85c7f8d
...
@@ -2,7 +2,7 @@
...
@@ -2,7 +2,7 @@
// Created by swift on 2019/5/16.
// Created by swift on 2019/5/16.
//
//
#include "register_list_a32.h"
#include "register_list_a
rm
32.h"
namespace
SandHook
{
namespace
SandHook
{
namespace
RegistersA32
{
namespace
RegistersA32
{
...
...
nativehook/src/main/cpp/archs/arm/arm32/register/register_list_a32.h
→
nativehook/src/main/cpp/archs/arm/arm32/register/register_list_a
rm
32.h
View file @
e85c7f8d
...
@@ -5,7 +5,7 @@
...
@@ -5,7 +5,7 @@
#ifndef SANDHOOK_NH_REGISTER_LIST_A32_H
#ifndef SANDHOOK_NH_REGISTER_LIST_A32_H
#define SANDHOOK_NH_REGISTER_LIST_A32_H
#define SANDHOOK_NH_REGISTER_LIST_A32_H
#include "register_a32.h"
#include "register_a
rm
32.h"
using
namespace
SandHook
::
Asm
;
using
namespace
SandHook
::
Asm
;
...
...
nativehook/src/main/cpp/archs/arm/arm64/assembler/assembler_a64.cpp
→
nativehook/src/main/cpp/archs/arm/arm64/assembler/assembler_a
rm
64.cpp
View file @
e85c7f8d
...
@@ -2,7 +2,7 @@
...
@@ -2,7 +2,7 @@
// Created by swift on 2019/5/11.
// Created by swift on 2019/5/11.
//
//
#include "assembler_a64.h"
#include "assembler_a
rm
64.h"
using
namespace
SandHook
::
Assembler
;
using
namespace
SandHook
::
Assembler
;
using
namespace
SandHook
::
RegistersA64
;
using
namespace
SandHook
::
RegistersA64
;
...
...
nativehook/src/main/cpp/archs/arm/arm64/assembler/assembler_a64.h
→
nativehook/src/main/cpp/archs/arm/arm64/assembler/assembler_a
rm
64.h
View file @
e85c7f8d
...
@@ -6,7 +6,7 @@
...
@@ -6,7 +6,7 @@
#define SANDHOOK_NH_ASSEMBLER_A64_H
#define SANDHOOK_NH_ASSEMBLER_A64_H
#include "assembler.h"
#include "assembler.h"
#include "register_a64.h"
#include "register_a
rm
64.h"
#include "inst_arm64.h"
#include "inst_arm64.h"
using
namespace
SandHook
::
AsmA64
;
using
namespace
SandHook
::
AsmA64
;
...
...
nativehook/src/main/cpp/archs/arm/arm64/decoder/decoder_arm64.cpp
View file @
e85c7f8d
...
@@ -15,6 +15,8 @@ unit = reinterpret_cast<Unit<Base> *>(new INST_A64(X)(*s)); \
...
@@ -15,6 +15,8 @@ unit = reinterpret_cast<Unit<Base> *>(new INST_A64(X)(*s)); \
goto label_matched; \
goto label_matched; \
}
}
Arm64Decoder
*
Arm64Decoder
::
instant
=
new
Arm64Decoder
();
void
Arm64Decoder
::
decode
(
void
*
codeStart
,
Addr
codeLen
,
InstVisitor
&
visitor
)
{
void
Arm64Decoder
::
decode
(
void
*
codeStart
,
Addr
codeLen
,
InstVisitor
&
visitor
)
{
InstA64
*
pc
=
reinterpret_cast
<
InstA64
*>
(
codeStart
);
InstA64
*
pc
=
reinterpret_cast
<
InstA64
*>
(
codeStart
);
Addr
endAddr
=
(
Addr
)
codeStart
+
codeLen
;
Addr
endAddr
=
(
Addr
)
codeStart
+
codeLen
;
...
@@ -40,7 +42,7 @@ void Arm64Decoder::decode(void *codeStart, Addr codeLen, InstVisitor &visitor) {
...
@@ -40,7 +42,7 @@ void Arm64Decoder::decode(void *codeStart, Addr codeLen, InstVisitor &visitor) {
CASE
(
EXCEPTION_GEN
)
CASE
(
EXCEPTION_GEN
)
label_matched
:
label_matched
:
if
(
unit
==
nullptr
)
{
if
(
unit
==
nullptr
)
{
unit
=
reinterpret_cast
<
Unit
<
Base
>
*>
(
new
A64_UNKNOW
(
*
reinterpret_cast
<
STRUCT_A64
(
UNKNOW
)
*>
(
pc
)));
unit
=
reinterpret_cast
<
Unit
<
Base
>
*>
(
new
INST_A64
(
UNKNOW
)
(
*
reinterpret_cast
<
STRUCT_A64
(
UNKNOW
)
*>
(
pc
)));
}
}
if
(
!
visitor
.
visit
(
unit
,
pc
))
{
if
(
!
visitor
.
visit
(
unit
,
pc
))
{
break
;
break
;
...
...
nativehook/src/main/cpp/archs/arm/arm64/decoder/decoder_arm64.h
View file @
e85c7f8d
...
@@ -13,6 +13,8 @@ namespace SandHook {
...
@@ -13,6 +13,8 @@ namespace SandHook {
class
Arm64Decoder
:
public
InstDecoder
{
class
Arm64Decoder
:
public
InstDecoder
{
public
:
public
:
void
decode
(
void
*
codeStart
,
Addr
codeLen
,
InstVisitor
&
visitor
)
override
;
void
decode
(
void
*
codeStart
,
Addr
codeLen
,
InstVisitor
&
visitor
)
override
;
public
:
static
Arm64Decoder
*
instant
;
};
};
}
}
...
...
nativehook/src/main/cpp/archs/arm/arm64/inst/inst_arm64.cpp
View file @
e85c7f8d
...
@@ -88,8 +88,8 @@ void A64_ADR_ADRP::assembler() {
...
@@ -88,8 +88,8 @@ void A64_ADR_ADRP::assembler() {
}
}
void
A64_ADR_ADRP
::
decode
(
STRUCT_A64
(
ADR_ADRP
)
*
inst
)
{
void
A64_ADR_ADRP
::
decode
(
STRUCT_A64
(
ADR_ADRP
)
*
inst
)
{
offset
=
getImmPCOffset
Target
();
offset
=
getImmPCOffset
();
rd
=
XReg
(
static_cast
<
U8
>
(
get
()
->
rd
)
);
DECODE_RD
(
XReg
);
op
=
OP
(
get
()
->
op
);
op
=
OP
(
get
()
->
op
);
}
}
...
...
nativehook/src/main/cpp/archs/arm/arm64/inst/inst_arm64.h
View file @
e85c7f8d
...
@@ -8,7 +8,7 @@
...
@@ -8,7 +8,7 @@
#include "inst_struct_aarch64.h"
#include "inst_struct_aarch64.h"
#include "instruction.h"
#include "instruction.h"
#include "base.h"
#include "base.h"
#include "register_list_a64.h"
#include "register_list_a
rm
64.h"
#define INST_A64(X) A64_##X
#define INST_A64(X) A64_##X
...
...
nativehook/src/main/cpp/archs/arm/arm64/register/register_a64.cpp
→
nativehook/src/main/cpp/archs/arm/arm64/register/register_a
rm
64.cpp
View file @
e85c7f8d
...
@@ -2,8 +2,8 @@
...
@@ -2,8 +2,8 @@
// Created by swift on 2019/5/8.
// Created by swift on 2019/5/8.
//
//
#include "register_a64.h"
#include "register_a
rm
64.h"
#include "register_list_a64.h"
#include "register_list_a
rm
64.h"
using
namespace
SandHook
::
Asm
;
using
namespace
SandHook
::
Asm
;
using
namespace
SandHook
::
RegistersA64
;
using
namespace
SandHook
::
RegistersA64
;
...
...
nativehook/src/main/cpp/archs/arm/arm64/register/register_a64.h
→
nativehook/src/main/cpp/archs/arm/arm64/register/register_a
rm
64.h
View file @
e85c7f8d
File moved
nativehook/src/main/cpp/archs/arm/arm64/register/register_list_a64.cpp
→
nativehook/src/main/cpp/archs/arm/arm64/register/register_list_a
rm
64.cpp
View file @
e85c7f8d
...
@@ -2,7 +2,7 @@
...
@@ -2,7 +2,7 @@
// Created by swift on 2019/5/9.
// Created by swift on 2019/5/9.
//
//
#include "register_list_a64.h"
#include "register_list_a
rm
64.h"
namespace
SandHook
{
namespace
SandHook
{
...
...
nativehook/src/main/cpp/archs/arm/arm64/register/register_list_a64.h
→
nativehook/src/main/cpp/archs/arm/arm64/register/register_list_a
rm
64.h
View file @
e85c7f8d
...
@@ -5,7 +5,7 @@
...
@@ -5,7 +5,7 @@
#ifndef SANDHOOK_NH_REGISTER_LIST_A64_H
#ifndef SANDHOOK_NH_REGISTER_LIST_A64_H
#define SANDHOOK_NH_REGISTER_LIST_A64_H
#define SANDHOOK_NH_REGISTER_LIST_A64_H
#include "register_a64.h"
#include "register_a
rm
64.h"
#include "base.h"
#include "base.h"
using
namespace
SandHook
::
Asm
;
using
namespace
SandHook
::
Asm
;
...
...
nativehook/src/main/cpp/archs/arm/arm64/relocate/code_relocate_a64.cpp
→
nativehook/src/main/cpp/archs/arm/arm64/relocate/code_relocate_a
rm
64.cpp
View file @
e85c7f8d
...
@@ -2,7 +2,7 @@
...
@@ -2,7 +2,7 @@
// Created by swift on 2019/5/12.
// Created by swift on 2019/5/12.
//
//
#include "code_relocate_a64.h"
#include "code_relocate_a
rm
64.h"
#include "decoder_arm64.h"
#include "decoder_arm64.h"
#include "lock.h"
#include "lock.h"
...
...
nativehook/src/main/cpp/archs/arm/arm64/relocate/code_relocate_a64.h
→
nativehook/src/main/cpp/archs/arm/arm64/relocate/code_relocate_a
rm
64.h
View file @
e85c7f8d
...
@@ -8,7 +8,7 @@
...
@@ -8,7 +8,7 @@
#include <mutex>
#include <mutex>
#include <map>
#include <map>
#include "code_relocate.h"
#include "code_relocate.h"
#include "assembler_a64.h"
#include "assembler_a
rm
64.h"
using
namespace
SandHook
::
Assembler
;
using
namespace
SandHook
::
Assembler
;
using
namespace
SandHook
::
Decoder
;
using
namespace
SandHook
::
Decoder
;
...
...
nativehook/src/main/cpp/asm/memory.h
0 → 100644
View file @
e85c7f8d
//
// Created by swift on 2019/5/23.
//
#ifndef SANDHOOK_MEMORY_H
#define SANDHOOK_MEMORY_H
namespace
SandHook
{
namespace
VM
{
class
Memory
{
};
}
}
#endif //SANDHOOK_MEMORY_H
nativehook/src/main/cpp/buffer/code_buffer.cpp
View file @
e85c7f8d
...
@@ -4,6 +4,7 @@
...
@@ -4,6 +4,7 @@
#include <sys/mman.h>
#include <sys/mman.h>
#include <platform.h>
#include <platform.h>
#include "log.h"
#include "code_buffer.h"
#include "code_buffer.h"
#include "lock.h"
#include "lock.h"
...
@@ -42,7 +43,9 @@ AndroidCodeBuffer::AndroidCodeBuffer() {}
...
@@ -42,7 +43,9 @@ AndroidCodeBuffer::AndroidCodeBuffer() {}
StaticCodeBuffer
::
StaticCodeBuffer
(
Addr
pc
)
:
pc
(
pc
)
{}
StaticCodeBuffer
::
StaticCodeBuffer
(
Addr
pc
)
:
pc
(
pc
)
{}
void
*
StaticCodeBuffer
::
getBuffer
(
U32
bufferSize
)
{
void
*
StaticCodeBuffer
::
getBuffer
(
U32
bufferSize
)
{
memUnprotect
(
pc
,
bufferSize
);
if
(
!
memUnprotect
(
pc
,
bufferSize
))
{
LOGE
(
"error memUnprotect!"
);
}
return
reinterpret_cast
<
void
*>
(
pc
);
return
reinterpret_cast
<
void
*>
(
pc
);
}
}
...
...
nativehook/src/main/cpp/decoder/decoder.cpp
View file @
e85c7f8d
...
@@ -3,17 +3,32 @@
...
@@ -3,17 +3,32 @@
//
//
#include "decoder.h"
#include "decoder.h"
#if defined(__arm__)
#include "decoder_arm32.h"
#elif defined(__aarch64__)
#include "decoder_arm64.h"
#endif
using
namespace
SandHook
::
Decoder
;
using
namespace
SandHook
::
Decoder
;
//do not support now
InstDecoder
*
Decoder
::
get
(
Arch
arch
)
{
InstDecoder
*
Decoder
::
get
(
Arch
arch
)
{
switch
(
arch
)
{
switch
(
arch
)
{
case
arm32
:
case
arm32
:
break
;
return
get
()
;
case
arm64
:
case
arm64
:
break
;
return
get
()
;
default
:
default
:
return
nullptr
;
return
nullptr
;
}
}
}
InstDecoder
*
Decoder
::
get
()
{
#if defined(__arm__)
return
Arm32Decoder
::
instant
;
#elif defined(__aarch64__)
return
Arm64Decoder
::
instant
;
#else
return
nullptr
;
return
nullptr
;
#endif
}
}
nativehook/src/main/cpp/hook/hook.cpp
View file @
e85c7f8d
...
@@ -15,9 +15,9 @@ using namespace SandHook::Utils;
...
@@ -15,9 +15,9 @@ using namespace SandHook::Utils;
#include "assembler_a64.h"
#include "assembler_a
rm
64.h"
#include "code_relocate_a64.h"
#include "code_relocate_a
rm
64.h"
#include "code_relocate_a64.h"
#include "code_relocate_a
rm
64.h"
using
namespace
SandHook
::
RegistersA64
;
using
namespace
SandHook
::
RegistersA64
;
AndroidCodeBuffer
*
backupBuffer
=
new
AndroidCodeBuffer
();
AndroidCodeBuffer
*
backupBuffer
=
new
AndroidCodeBuffer
();
void
*
InlineHookArm64Android
::
inlineHook
(
void
*
origin
,
void
*
replace
)
{
void
*
InlineHookArm64Android
::
inlineHook
(
void
*
origin
,
void
*
replace
)
{
...
...
nativehook/src/main/cpp/includes/decoder.h
View file @
e85c7f8d
...
@@ -27,6 +27,7 @@ namespace SandHook {
...
@@ -27,6 +27,7 @@ namespace SandHook {
class
Decoder
{
class
Decoder
{
static
InstDecoder
*
get
(
Arch
arch
);
static
InstDecoder
*
get
(
Arch
arch
);
static
InstDecoder
*
get
();
};
};
}
}
}
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment