【文件属性】:
文件名称:jvm-suspend-working-thread-机制:jvm暂停工作线程的机制
文件大小:7.22MB
文件格式:ZIP
更新时间:2021-02-16 00:30:30
C
JVM挂起工作线程的机制与原理
首选使用Clang编译GCC编译会报错目前未研究清楚
内嵌的汇编代码依赖编译后的栈上临时变量跟RBP指针的相对位置不保证编译器优化后内嵌的编译代码能正常运行
怎么运行的
由于编译可能产生问题可以直接在linux上运行
./main
通过mprotect设置内存访问权限
mprotect提供下图多个访问权限设置
使用mprotect对特定内存区域设置附加保护并注册信号量处理器
当线程访问下图缓冲区指针指向的内存,会产生一个信号量,线程会转移到handler方法
handler方法暂时按下不表
main函数流程
保存几个寄存器rsp rbp rip(pc寄存器)插入其写入变量,刹车处理程序恢复
第一次访问p指针(也是buffer指针)由于权限的问题,会转移到handler方法
handler流程
处理信号量,重新设置缓冲区指向的区域为精确可写
恢复快照jmp到之
【文件预览】:
jvm-suspend-working-thread-mechanism-master
----pic()
--------main_method.png(687KB)
--------how-it-works.gif(4.99MB)
--------register_handler_and_set_memory_access.png(616KB)
--------mprotect_access.png(514KB)
--------handler.png(707KB)
----main.c(3KB)
----LICENSE(1KB)
----main(25KB)
----.gitignore(35B)
----CMakeLists.txt(115B)
----README.md(2KB)