JVM-0x00-启动入口
1 定位jdk的入口
1.1 全局搜索main方法
我对c\cpp的了解还停留在语言语法层面,对工程构建并不熟悉,因此只能使用原始的方式。
下个断点,然后启动Java进程再根据调用栈往回精确定位。
1.2 启动Java进程
代码就一行,只要能让Java进程运行起来,停在断点就行。
java
1 |
|
1.3 调用栈
从线程调用栈可以看出来1.1搜索出来的就是Jdk源码的入口main方法所在之处。
即src/java.base/share/native/launcher/main.c。
2 main方法
2.1 场景
指定一个明确的启动场景,方便更直观地理解代码流程。
从1.2中可以知道写了一个叫VMLoaderTest.java的源码单文件,然后通过javac命令将其编译为字节码文件,该Java类为VMLoaderTest。
然后通过java命令执行该该类的main方法,完整命令为java VMLoaderTest
。
而编译好的java
可执行文件放在哪儿取决于编译的设置,比如我的路径是build/macosx-x86_64-server-slowdebug/jdk/bin/java
。
2.2 启动参数
c
1 |
|
2.2 解析启动参数
没有在启动参数中指定预处理可选项的时候,解析出来的就是main方法的启动参数。
c
1 |
|
2.3 调用JLI_Launch
c
1 |
|
JVM-0x00-启动入口
https://bannirui.github.io/2023/04/27/JVM-0x00-启动入口/