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
56e5ee2c
Commit
56e5ee2c
authored
May 28, 2019
by
swift_gan
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
[NativeHook]add inst stp ldp
parent
d202ce56
Show whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
124 additions
and
3 deletions
+124
-3
dlfcn_nougat.cpp
hooklib/src/main/cpp/utils/dlfcn_nougat.cpp
+3
-1
assembler_arm64.cpp
...rc/main/cpp/archs/arm/arm64/assembler/assembler_arm64.cpp
+8
-0
assembler_arm64.h
.../src/main/cpp/archs/arm/arm64/assembler/assembler_arm64.h
+3
-0
decoder_arm64.cpp
...ok/src/main/cpp/archs/arm/arm64/decoder/decoder_arm64.cpp
+1
-0
inst_arm64.cpp
nativehook/src/main/cpp/archs/arm/arm64/inst/inst_arm64.cpp
+58
-0
inst_arm64.h
nativehook/src/main/cpp/archs/arm/arm64/inst/inst_arm64.h
+38
-0
inst_code_arm64.h
...ehook/src/main/cpp/archs/arm/arm64/inst/inst_code_arm64.h
+2
-1
inst_struct_aarch64.h
...k/src/main/cpp/archs/arm/arm64/inst/inst_struct_aarch64.h
+11
-1
No files found.
hooklib/src/main/cpp/utils/dlfcn_nougat.cpp
View file @
56e5ee2c
...
...
@@ -252,7 +252,9 @@ void *getSymCompat(const char *filename, const char *name) {
if
(
SDK_INT
>=
ANDROID_N
)
{
void
*
handle
=
fake_dlopen
(
filename
,
RTLD_NOW
);
if
(
handle
)
{
return
fake_dlsym
(
handle
,
name
);
void
*
ret
=
fake_dlsym
(
handle
,
name
);
fake_dlclose
(
handle
);
return
ret
;
}
}
else
{
void
*
handle
=
dlopen
(
filename
,
RTLD_LAZY
|
RTLD_GLOBAL
);
...
...
nativehook/src/main/cpp/archs/arm/arm64/assembler/assembler_arm64.cpp
View file @
56e5ee2c
...
...
@@ -207,6 +207,14 @@ void AssemblerA64::Subs(RegisterA64 &rd, RegisterA64 &rn, const Operand &operand
Emit
(
reinterpret_cast
<
Unit
<
Base
>
*>
(
new
INST_A64
(
SUB_EXT_REG
)(
rd
,
rn
,
operand
,
SetFlags
)));
}
void
AssemblerA64
::
stp
(
RegisterA64
&
rt1
,
RegisterA64
&
rt2
,
const
MemOperand
operand
)
{
Emit
(
reinterpret_cast
<
Unit
<
Base
>
*>
(
new
INST_A64
(
STP_LDP
)(
INST_A64
(
STP_LDP
)
::
STP
,
rt1
,
rt2
,
operand
)));
}
void
AssemblerA64
::
ldp
(
RegisterA64
&
rt1
,
RegisterA64
&
rt2
,
const
MemOperand
operand
)
{
Emit
(
reinterpret_cast
<
Unit
<
Base
>
*>
(
new
INST_A64
(
STP_LDP
)(
INST_A64
(
STP_LDP
)
::
LDP
,
rt1
,
rt2
,
operand
)));
}
nativehook/src/main/cpp/archs/arm/arm64/assembler/assembler_arm64.h
View file @
56e5ee2c
...
...
@@ -74,6 +74,9 @@ namespace SandHook {
void
Subs
(
RegisterA64
&
rd
,
RegisterA64
&
rn
,
const
Operand
&
operand
);
void
Cmp
(
RegisterA64
&
rn
,
const
Operand
&
operand
);
void
stp
(
RegisterA64
&
rt1
,
RegisterA64
&
rt2
,
const
MemOperand
operand
);
void
ldp
(
RegisterA64
&
rt1
,
RegisterA64
&
rt2
,
const
MemOperand
operand
);
public
:
CodeContainer
codeContainer
=
CodeContainer
(
nullptr
);
...
...
nativehook/src/main/cpp/archs/arm/arm64/decoder/decoder_arm64.cpp
View file @
56e5ee2c
...
...
@@ -43,6 +43,7 @@ void Arm64Decoder::decode(void *codeStart, Addr codeLen, InstVisitor &visitor, b
CASE
(
SUB_EXT_REG
)
CASE
(
SVC
)
CASE
(
EXCEPTION_GEN
)
CASE
(
STP_LDP
)
label_matched
:
if
(
unit
==
nullptr
)
{
unit
=
reinterpret_cast
<
Unit
<
Base
>
*>
(
new
INST_A64
(
UNKNOW
)(
*
reinterpret_cast
<
STRUCT_A64
(
UNKNOW
)
*>
(
pc
)));
...
...
nativehook/src/main/cpp/archs/arm/arm64/inst/inst_arm64.cpp
View file @
56e5ee2c
...
...
@@ -789,3 +789,61 @@ void A64_LDRSW_UIMM::assembler() {
get
()
->
rn
=
operand
.
base
->
getCode
();
get
()
->
imm12
=
operand
.
offset
>>
Size32
;
}
A64_STP_LDP
::
A64_STP_LDP
(
A64_STRUCT_STP_LDP
&
inst
)
:
InstructionA64
(
&
inst
)
{
decode
(
&
inst
);
}
A64_STP_LDP
::
A64_STP_LDP
(
OP
op
,
RegisterA64
&
rt1
,
RegisterA64
&
rt2
,
const
MemOperand
&
operand
)
:
op
(
op
),
rt1
(
&
rt1
),
rt2
(
&
rt2
),
operand
(
operand
)
{}
void
A64_STP_LDP
::
decode
(
A64_STRUCT_STP_LDP
*
inst
)
{
DECODE_OP
;
Size
s
=
Size
(
inst
->
size
);
if
(
s
==
Size64
)
{
rt1
=
XReg
(
inst
->
rt
);
rt2
=
XReg
(
inst
->
rt2
);
operand
.
offset
=
signExtend64
(
7
,
inst
->
imm7
)
<<
3
;
}
else
{
rt1
=
WReg
(
inst
->
rt
);
rt2
=
WReg
(
inst
->
rt2
);
operand
.
offset
=
signExtend64
(
7
,
inst
->
imm7
)
<<
2
;
}
operand
.
base
=
XReg
(
inst
->
rn
);
AdMod
adMod
=
AdMod
(
inst
->
addrmode
);
switch
(
adMod
)
{
case
SignOffset
:
operand
.
addr_mode
=
AddrMode
::
Offset
;
break
;
case
PostIndex
:
operand
.
addr_mode
=
AddrMode
::
PostIndex
;
break
;
case
PreIndex
:
operand
.
addr_mode
=
AddrMode
::
PreIndex
;
break
;
}
}
void
A64_STP_LDP
::
assembler
()
{
SET_OPCODE
(
STP_LDP
);
ENCODE_OP
;
get
()
->
size
=
rt1
->
isX
()
?
Size64
:
Size32
;
get
()
->
rt
=
rt1
->
getCode
();
get
()
->
rt2
=
rt2
->
getCode
();
get
()
->
rn
=
operand
.
base
->
getCode
();
switch
(
operand
.
addr_mode
)
{
case
Offset
:
get
()
->
addrmode
=
SignOffset
;
break
;
case
AddrMode
:
:
PostIndex
:
get
()
->
addrmode
=
PostIndex
;
break
;
case
AddrMode
:
:
PreIndex
:
get
()
->
addrmode
=
PreIndex
;
break
;
}
get
()
->
imm7
=
TruncateToUint7
(
operand
.
offset
>>
(
rt1
->
isX
()
?
3
:
2
));
}
nativehook/src/main/cpp/archs/arm/arm64/inst/inst_arm64.h
View file @
56e5ee2c
...
...
@@ -739,6 +739,44 @@ namespace SandHook {
void
assembler
()
override
;
};
class
INST_A64
(
STP_LDP
)
:
public
InstructionA64
<
STRUCT_A64
(
STP_LDP
)
>
{
public
:
enum
OP
{
STP
=
0
b0
,
LDP
=
0
b1
};
enum
AdMod
{
SignOffset
=
0
b10
,
PostIndex
=
0
b01
,
PreIndex
=
0
b11
};
enum
Size
{
Size32
=
0
b00
,
Size64
=
0
b10
};
A64_STP_LDP
(
A64_STRUCT_STP_LDP
&
inst
);
A64_STP_LDP
(
OP
op
,
RegisterA64
&
rt1
,
RegisterA64
&
rt2
,
const
MemOperand
&
operand
);
DEFINE_IS
(
STP_LDP
)
DEFINE_INST_CODE
(
STP_LDP
)
void
decode
(
A64_STRUCT_STP_LDP
*
inst
)
override
;
void
assembler
()
override
;
public
:
OP
op
;
RegisterA64
*
rt1
;
RegisterA64
*
rt2
;
MemOperand
operand
;
};
}
}
...
...
nativehook/src/main/cpp/archs/arm/arm64/inst/inst_code_arm64.h
View file @
56e5ee2c
...
...
@@ -26,7 +26,8 @@ enum class InstCodeA64 {
TBZ_TBNZ
,
SUB_EXT_REG
,
EXCEPTION_GEN
,
SVC
SVC
,
STP_LDP
,
};
#endif //SANDHOOK_NH_INST_CODE_ARM64_H
nativehook/src/main/cpp/archs/arm/arm64/inst/inst_struct_aarch64.h
View file @
56e5ee2c
...
...
@@ -203,7 +203,17 @@ DEFINE_STRUCT_A64(EXCEPTION_GEN) {
struct
STRUCT_A64
(
SVC
)
:
STRUCT_A64
(
EXCEPTION_GEN
)
{
};
DEFINE_OPCODE_A64
(
STP_LDP
,
0
b10100
)
DEFINE_STRUCT_A64
(
STP_LDP
)
{
InstA64
rt
:
WideReg
;
InstA64
rn
:
WideReg
;
InstA64
rt2
:
WideReg
;
InstA64
imm7
:
7
;
InstA64
op
:
1
;
InstA64
addrmode
:
2
;
InstA64
opcode
:
5
;
InstA64
size
:
2
;
};
...
...
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