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
5524b33b
Commit
5524b33b
authored
Jan 25, 2019
by
swift_gan
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
if virtual method skip compile
parent
c1e5d6e2
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
6 additions
and
1 deletion
+6
-1
native-lib.cpp
hooklib/src/main/cpp/native-lib.cpp
+6
-1
No files found.
hooklib/src/main/cpp/native-lib.cpp
View file @
5524b33b
...
@@ -39,6 +39,11 @@ void setPrivate(art::mirror::ArtMethod* method) {
...
@@ -39,6 +39,11 @@ void setPrivate(art::mirror::ArtMethod* method) {
SandHook
::
CastArtMethod
::
accessFlag
->
set
(
method
,
accessFlag
);
SandHook
::
CastArtMethod
::
accessFlag
->
set
(
method
,
accessFlag
);
}
}
bool
isAbsMethod
(
art
::
mirror
::
ArtMethod
*
method
)
{
uint32_t
accessFlags
=
SandHook
::
CastArtMethod
::
accessFlag
->
get
(
method
);
return
((
accessFlags
&
0x0400
)
!=
0
);
}
void
ensureMethodCached
(
art
::
mirror
::
ArtMethod
*
hookMethod
,
art
::
mirror
::
ArtMethod
*
backupMethod
)
{
void
ensureMethodCached
(
art
::
mirror
::
ArtMethod
*
hookMethod
,
art
::
mirror
::
ArtMethod
*
backupMethod
)
{
if
(
SDK_INT
>=
ANDROID_P
)
if
(
SDK_INT
>=
ANDROID_P
)
return
;
return
;
...
@@ -153,7 +158,7 @@ Java_com_swift_sandhook_SandHook_hookMethod(JNIEnv *env, jclass type, jobject or
...
@@ -153,7 +158,7 @@ Java_com_swift_sandhook_SandHook_hookMethod(JNIEnv *env, jclass type, jobject or
if
(
isInterpreter
)
{
if
(
isInterpreter
)
{
if
(
SDK_INT
>=
ANDROID_N
)
{
if
(
SDK_INT
>=
ANDROID_N
)
{
Size
threadId
=
getAddressFromJavaByCallMethod
(
env
,
"com/swift/sandhook/SandHook"
,
"getThreadId"
);
Size
threadId
=
getAddressFromJavaByCallMethod
(
env
,
"com/swift/sandhook/SandHook"
,
"getThreadId"
);
if
(
compileMethod
(
origin
,
reinterpret_cast
<
void
*>
(
threadId
))
&&
SandHook
::
CastArtMethod
::
entryPointQuickCompiled
->
get
(
origin
)
!=
SandHook
::
CastArtMethod
::
quickToInterpreterBridge
)
{
if
(
!
isAbsMethod
(
origin
)
&&
compileMethod
(
origin
,
reinterpret_cast
<
void
*>
(
threadId
))
&&
SandHook
::
CastArtMethod
::
entryPointQuickCompiled
->
get
(
origin
)
!=
SandHook
::
CastArtMethod
::
quickToInterpreterBridge
)
{
return
static_cast
<
jboolean
>
(
doHookWithInline
(
env
,
origin
,
hook
,
backup
));
return
static_cast
<
jboolean
>
(
doHookWithInline
(
env
,
origin
,
hook
,
backup
));
}
else
{
}
else
{
return
static_cast
<
jboolean
>
(
doHookWithReplacement
(
origin
,
hook
,
backup
));
return
static_cast
<
jboolean
>
(
doHookWithReplacement
(
origin
,
hook
,
backup
));
...
...
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