1.module
模块
此片段说明了模块的作用.
模块, Java9 开始引入的一个新的系统
- 模块可以定义其他模块可以访问该模块的什么东西
- 该模块的东西有什么不能被访问
- 模块权限控制是包级别
为了更好的明白该文章是如何进行越权的, 我们会先给出一个例子, 便于理解
- 假设有一个模块
protected
protected0.Class0
protected0.Class1
protected0.Class2
protected1.Class1
- 有另外一个模块
hacker
- 模块
protected
export 了protected0
这个包给了hacker
hacker
可以随便访问并使用protected0
这个包的内容hacker
依然没有protected1
的访问权, 但是hacker
不需要protected1
的任何内容
- 如果模块
protected
并没有 exportprotected0
给hacker
- 那么
hacker
访问protected0
就会得到一个java.lang.IllegalAccessError
- 那么
此时…
hacker
就是module UnsafeAccessor
protected
就是module java.base
protected0
就是jdk.internal.access
模块的划分
在同一个 ClassLoader
下
假设有以下模块
module m1
package m1.m1
package m1.m2
module m2
package m2.m1
package m2.m2
当往该 ClassLoader
define 一个 Class
的时候, 会自动划分 module.
- 如果包名是
m1.m1
-> 归module m1
- 如果包名是
m1.m2
-> 归module m1
- .
- 如果包名是
m2.m1
-> 归module m2
- 如果包名是
m2.m2
-> 归module m2
- …..
- 该class归
ClassLoader#getUnnamedModule()