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
42cd4e9a
Commit
42cd4e9a
authored
Apr 03, 2019
by
swift_gan
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
[doc]fix typo
parent
f6e97fcc
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
7 additions
and
6 deletions
+7
-6
doc.md
doc/doc.md
+7
-6
No files found.
doc/doc.md
View file @
42cd4e9a
...
...
@@ -170,17 +170,18 @@ https://github.com/ganyao114/SandVXposed
----
### ArtMethod
#### Mirror
在了解 ArtMethod 之前先了解一下这个概念:
-
Java 对象在内存中的布局可以看成一个结构体,父类的变量在开头,本身的变量紧随其后。
-
这些对象结构体在 ART 中被映射成 mirror::Object cpp 类。
-
有一些虚拟机比较在意的类型,例如 Class,Method
,Thread
这些 Art 内部所需要的类型,他们在 mirror 中是有对应的类型的
-
有一些虚拟机比较在意的类型,例如 Class,Method 这些 Art 内部所需要的类型,他们在 mirror 中是有对应的类型的
-
成员变量的内存布局也是对应映射的
----
####
Mirror
####
ArtMethod
-
在大约 6.0 及之前,java 层中有隐藏类 ArtMethod,Method 与之一对一,而 mirror::ArtMethod 就是 java 层 ArtMethod 的映射。
-
6.0 之后,java ArtMethod 不复存在,Method 与 mirror::ArtMethod 一对一映射,只不过大部分 Field 被 "隐藏" 了。
...
...
@@ -735,7 +736,7 @@ ldr x5, [x19, #PeerOffset]
### resolve 静态方法
-
静态方法是懒加载的。
-
如果一个类没有被
加载
,那么其中的静态方法的入口统一为 art_quick_proxy_invoke_handler
-
如果一个类没有被
初始化
,那么其中的静态方法的入口统一为 art_quick_proxy_invoke_handler
-
第一次调用时,art_quick_proxy_invoke_handler 会走到类初始化流程
----
...
...
@@ -870,7 +871,7 @@ ART 的判断逻辑
-
正在 JIT 你修改的方法时
-
GC 时,GC 将会搜索栈,栈中有修改的 ArtMethod
-
正好其他线程调到了正在被修改的方法
-
其他线程发生栈回
朔(异常),回朔
到了正在修改的 ArtMethod
-
其他线程发生栈回
溯(异常),回溯
到了正在修改的 ArtMethod
----
...
...
@@ -1561,7 +1562,7 @@ SandHook.disableVMInline()
### 阻止 dex2oat Inline
-
Android N 以上默认的 ART 编译策略为 speed-profile
-
除了 JIT 期间的内联,系统在空闲
实践
会根据这个所谓的 profile 进行 speed 模式的 dex2oat
-
除了 JIT 期间的内联,系统在空闲
时
会根据这个所谓的 profile 进行 speed 模式的 dex2oat
-
speed 模式包含 Inline 优化
-
现象是 App 多打开几次发现 Hook 不到了
...
...
@@ -1630,7 +1631,7 @@ bool ProfileCompilationInfo::Load(const std::string& filename, bool clear_if_inv
-
这两个跳板不在动态链接表中,(fake)dlsym 无法搜索到
-
但是这个符号是被保留的,在 SHT_SYMTAB 中,这个表存储了所有的符号,所以我重新实现了符号搜索
-
除此之外也可以从
从
未调用的方法中获取,但是可能遇到被强制 dex2oat 的情况
-
除此之外也可以从未调用的方法中获取,但是可能遇到被强制 dex2oat 的情况
https://github.com/ganyao114/AndroidELF
...
...
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