线程调度的监视

说一下 synchronized 底层实现原理:Java 对象头、Monitor(监视器锁)以及 JVM 的线程调度机制 synchronized 是 Java 中用于控制多个线程对共享资源的访问的关键字,它可以确保在同一时刻只有一个线程能够执行某个代码块或方法。synchronized 的底层实现原理主要涉及到 Java 对象头、Monitor(监视器锁)以及 JVM 的线程调度机制。 阅读详情
 pjf(jfpan20000@sina.com)
    接着上次的小话题说。
    上次提到因为想要无需硬编码的方案从而未选用SwapContext,后来又想了想用SwapContext也基本不用硬编码,但因为用了其它做法,没有再实现hook SwapContext了。前两天难得放假,写了一下看看效果。
    首先进入2000的SwapContext中,看看它作了什么。

0008:8040422C  OR        CL,CL
0008:8040422E  MOV       BYTE PTR ES:[ESI+2D],02
0008:80404233  PUSHFD                                          //ESP+4 -> EFLAGS
0008:80404234  MOV       ECX,[EBX]
0008:80404236  CMP       DWORD PTR [EBX+0000080C],00
0008:8040423D  PUSH      ECX                                 //ESP -> exception list 
0008:8040423E  JNZ       80404338
0008:80404244  MOV       EBP,CR0
0008:80404247  MOV       EDX,EBP
0008:80404249  MOV       CL,[ESI+2C]
0008:8040424C  MOV       [EBX+50],CL
0008:8040424F  CLI
0008:80404250  MOV       [EDI+28],ESP                    //将ESP存入了KTHREAD的KernelStack
0008:80404253  MOV       EAX,[ESI+18]
0008:80404256  MOV       ECX,[ESI+1C]
... ...
    很明显,ESP+8的地方就是在KiSwapThread中的调用SwapContext的返回地址,可由它得到SwapContext函数地址,但没必要,直接hook这个在KiSwapThread中的地址更好些。也可以直接修改上面那条Call指令。
    下面的问题就是找出一个KernelStack可访问的非当前线程,这个很容易。示例代码片断(在2000/XP测试):

以下内容为程序代码:

PCHAR GetSwapAddr()
{
PCHAR res = 0;
NTSTATUS  Status;
PETHREAD Thread;

if (*NtBuildNumber <= 2195)
Status = PsLookupThreadByThreadId((PVOID)4, &Thread);
else
Status = PsLookupThreadByThreadId((PVOID)8, &Thread);

if (NT_SUCCESS(Status))
{
if (MmIsAddressValid(Thread))
res = (PCHAR)*PULONG(PCHAR(Thread)+0x28);
if (MmIsAddressValid(res+8))
res = (PCHAR)*PULONG(res+8);
else
res = 0;
}

return res;
}

PBYTE GoBackAddr = 0;
__declspec(naked) VOID HookSwap()
{
_asm pushad
DbgPrint("%08x/n", KeGetCurrentThread());
_asm popad
_asm jmp DWORD PTR[GoBackAddr]
}

HookSwapFunc()
{
... ...
PCHAR SwapAddr = GetSwapAddr();
if (SwapAddr)
GoBackAddr = HookFunction(SwapAddr, HookSwap);
... ...
}


    HookFunction代码的具体实现自然是仁者见仁了。
    下面是一些结果:

 4.343  Default    SwapAddr=80404141
 4.343  Default    813b8c00
 4.343  Default    fe995480
 4.359  Default    81429660
 4.359  Default    81429260
 4.359  Default    805e5520
 4.359  Default    813e15c0
 4.359  Default    8139f500
 4.359  Default    8139f260
 4.375  Default    805e5520
 4.375  Default    812ea140
 4.390  Default    805e5520
 4.390  Default    8139f500
 4.390  Default    8139f260
 4.406  Default    805e5520
 4.422  Default    805e5520
 4.422  Default    fe995480
 4.422  Default    fe995480
 4.422  Default    fe995480
 4.422  Default    8139f500
 4.422  Default    8139f260
 4.422  Default    813a66e0

    没仔细想,可能有错,欢迎指出。
冰刃 IceSword 1.22 冰刃IceSword 1.22 简介 IceSword是一斩断黑手的利刃(所以取这土名,有点搞e,呵呵)。它适用于Windows 2000/XP/2003/Vista操作系统,用于查探系统中的幕后黑手(木马后门)并作出处理,当然使用它需要用户有一些操作系统的知识。 在对软件做讲解之前,首先说明第一注意事项 :此程序运行时不要激活内核调试器(如softice),否则系统可能即刻崩溃。另外使用前请保存好您的数据,以防万一未知的Bug带来损失。 IceSword目前只为使用32位的x86兼容CPU的系统设计,另外运行IceSword需要管理员权限。 如果您使用过老版本,请一定注意,使用新版本前要重新启动系统,不要交替使用二者。 IceSword内部功能是十分强大的。可能您也用过很多类似功能的软件,比如一些进程工具、端口工具,但是现在的系统级后门功能越来越强,一般都可轻而易举地隐藏进程、端口、注册表、文件信息,一般的工具根本无法发现这些“幕后黑手”。IceSword使用大量新颖的内核技术,使得这些后门躲无所躲。 如何退出IceSword:直接关闭,若你要防止进程被结束时,需要以命令行形式输入:IceSword.exe /c,此时需要Ctrl+Alt+D才能关闭(使用三键前先按一下任意键)。 如果最小化到托盘时托盘图标又消失了:此时可以使用Ctrl+Alt+S将IceSword主界面唤出。因为偷懒没有重绘图标,将就用吧^_^。 您无须为此软件付费,但如果您使用时发现了什么Bug,请mail to me:jfpan20000@sina.com ,十分感谢。 更新说明: 1.20:(1)恢复了插件功能,并提供一个文件注册表的小插件,详见FileReg.chm;(2)对核心部分作了些许改动,界面部分仅文件菜单有一点变化。 1.20(SubVer 111E3):添加对32位版本Vista(NtBuildNumber:6000)的支持。 1.22:(1)增加普通文件、ADS、注册表、模块的搜索功能;(2)隐藏签名项;(3)添加模块的HOOK扫描;(4)核心功能的加强。 立即下载

相关推荐

线程调度分析、监控工具(demo)

线程调度图形化分析工具,根据优先级依次分行排列线程信息:分别显示 序号、优先级、线程名、线程调度运行图形化信息 可以统计运行次数、调度次数、实际运行时间、运行总时间(含被抢占时间)、有效运行时间比(实际运行时间/运行总时间),CPU使用率 可以在线监控,也可以导入数据分析 demo例程使用ti sys\bios 系统做演示,内含演示源代码及相应的数据 demo使用方式:加载.dat数据以及.out程序文件,通过ctrl+滚轮控制缩放,通过垂直、水平滚动条控制图形上下左右移动

“暴力”注入Explorer

“暴力”注入Explorer                     pjf(jfpan20000@sina.com)    写点无聊的东西,一段时间blog弄得不成样子了。    向一个运行中的进程注入自己的代码,最自然莫过于使用CreateRemoteThread,如今远线程注入已经是泛滥成灾,同样的监测远线程注入、防止远线程注入的工具也举不胜举,一个木马或后门启动时向Explorer或IE的

Mycro的专栏 1542

微生物组β-多样性——PCoA分析及可视化

让你的数据映入眼帘

qq_47369980的博客 1万+

监控线程的3种方法

1. JDK命令行工具 - jstack jps -l 查询当前运行线程 barry@Y430P:~/data/projects/test$ jps -l 18339 /usr/share/dbeaver//plugins/org.eclipse.equinox.launcher_1.4.0.v20161219-1356.jar 9046 org.jetbrains.jps.cmdline.L...

weixin_33763244的博客 6006

3D Slicer:从入门到精通(二)——入门指南

本篇文章包含开始使用3D Slicer所需的信息,包括如何安装和快速开始使用基本功能,以及在哪里找到更多信息。

walt3433的博客 2万+

OpenRA引擎实战:如何从零开始搭建一个经典RTS游戏模组(附资源包)

本文详细介绍了如何利用开源游戏引擎OpenRA从零开始搭建经典RTS游戏模组。内容涵盖开发环境配置、资源管线处理、YAML规则定义、地图编辑与Lua脚本编写等全流程实战指南,并提供了资源包,帮助开发者和爱好者快速创建属于自己的即时战略游戏世界。

silver的专栏 907

[转]防止全局钩子的侵入

防止全局钩子的侵入Author: pjf(jfpan20000@sina.com)Windows消息钩子一般都很熟悉了。它的用处很多,耳熟能详的就有——利用键盘钩子获取目标进程的键盘输入,从而获得各类密码以达到不可告人的目的。朋友想让他的软件不被别人的全局钩子监视,有没有办法实现呢?答案是肯定的,不过缺陷也是有的:)。首先简单看看全局钩子如何注入别的进程。消息钩子是由Win32子系统提供,其核

Ywind 909

IPMItool 控制风扇转速

然后手动设置风扇,最后一位0x1e为设置30%的转速(16进制)。最后4位 0x0f 表示15%,0x0a,表示10%,不建议小于10%,因为10%已经很静音了 如果再小怕不能控温,烧毁硬件。首先停止服务器的自动风扇控制,最后一位0x00表示停止自动风扇控制,0x01为开启自动风扇控制。首先开启主板上的ipmi 设置好 用户名密码。此过程可以在网上搜索,有很多的资料可以参考。解压只有在目录里面有ipmltool。下面是一些常用的修改温度命令。

m0_37970303的博客 5063

暴力”注入Explorer

http://blog.youkuaiyun.com/wuna66320/archive/2006/09/01/1155348.aspx

tikycc2的专栏 466

基于Spring Boot 3 + Vue 3 + Vite的现代化社区订餐系统设计与实现

本文将详细阐述系统的整体架构、数据库设计、核心功能模块(用户管理、餐厅管理、菜品浏览、购物车、订单管理)的实现细节,并提供关键代码示例。<el-input v-model="loginForm.password" type="password" placeholder="密码" prefix-icon="Lock" show-password />.requestMatchers("/api/auth/**", "/api/dishes/public/**").permitAll() // 公开接口。

2201_76125393的博客 468

ESP32-C3入门教程 蓝牙篇①——基于Blufi 的 WiFi 智能配网

文章目录一、前言二、WiFi配网方式三、快速运行四、运行效果五、ESP32-C3程序流程5.1 主程序5.2 回调函数5.3 SmartConfig线程5.4 流程图六、关键函数6.1 设置SmartConfig的协议类型6.2 启动SmartConfig6.3 停止SmartConfig七、其他八、参考 一、前言 本文基于VS Code IDE进行编程、编译、下载、运行等操作 基础知识点请查阅:ESP32-C3入门教程 基础篇①——基于VS Code构建Hello World 二、WiFi配网方式 W

7766

我之见--线程调度基本知识

之前我们已经学习过了,线程的一

743

基于Pycatia的智能孔特征识别技术:无参模型圆心自动化提取方案

基于Pycatia的智能孔特征识别技术:无参模型圆心自动化提取方案

KE17RS的博客 2881

java线程和其工作原理

Java线程是一个执行上下文或者一个轻量级的进程,它是程序里的一个单一连续的控制流。 程序员可以使用java线程机制同时执行多个任务。 Thread类和run()方法  java.lang.Thread类为线程提供了底层支持,并且提供了一个线程的API和线程的所有行为。这些行为包括开始(start),睡眠(sleeping),运行(running),让步(yielding)和获得优先权。

LUOXINJIE的专栏 1470

Isaac Sim 入门教程(四)强化学习策略训练宇树人形机器人四足机器人示例

isaac_sim_policy_example Extension 是在 Isaac Sim 中部署 Isaac Lab 强化学习策略的一个框架和一组辅助函数。有关在 Isaac Sim 中训练和构建策略的详细信息,请访问在 Isaac Sim 中部署策略。该扩展程序默认已启用。如果被禁用,可在扩展管理器中搜索 isaacsim.robot.policy.example 重新启用。要运行下面的示例,请激活 “视窗”>“示例”>“机器人示例”,这将打开 “机器人示例 ”选项卡。

机器人控制与仿真应用 3932

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

仓颉协程调度机制深度解析:从理论模型到运行时实现

在多核时代,如何高效地调度成千上万个并发任务成为编程语言运行时系统的核心挑战。传统的操作系统线程虽然强大,但创建和切换的开销过大,难以支撑海量并发场景。仓颉语言通过实现精巧的协程调度机制,在轻量级用户态线程的基础上,构建了一套高性能、公平性好、可扩展的调度系统。本文将深入剖析仓颉协程调度器的设计理念、核心算法和工程实践,揭示其如何在有限的物理资源上实现海量并发任务的高效调度。

2401_88163728的博客 931

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

线程的生命周期

线程的生命周期

rua的博客 1651

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

java sleep方法_java线程休眠之sleep

Sleep方法介绍sleep方法是Thread类中的一个静态方法,当一个执行中的线程调用了Thread的sleep方法之后,调用线程会暂时让出指定时间的执行权,这期间不参与CPU的调度,但是该线程所拥有的监视器资源,比如锁还是持有且不让出的。指定的睡眠时间到了之后,sleep函数会正常返回,线程就处于就绪状态,然后参与CPU调度,获取到CPU的资源后就可以运行了。线程睡眠时不释放拥有的监视器资源i...

weixin_39521835的博客 943

你真的了解虚拟线程的wait/notify实现吗?(底层监视器重构全揭秘)

深入解析虚拟线程的监视器实现,揭示Java中wait/notify在虚拟线程下的底层重构机制。涵盖轻量级线程同步的应用场景、基于载体线程的调度优化及性能优势,帮助开发者高效掌握并发编程新范式。原理清晰,实践性强,值得收藏。

LearnFlow的博客 1021

多个线程等待同一个Synchronized锁的时候,JVM如何选择下一个获取锁的线程?

JVM 在选择下一个获取锁的线程时,主要依据监视器的机制,采用 FIFO 原则或其他策略,并不是绝对公平。大多数情况下,线程的具体选择也受到 JVM 实现和操作系统调度策略的影响。在实际应用中,如果需要严格的公平性,可以考虑使用带有公平锁特性的同步工具,例如。如果你还有其他问题或者需要更详细的解释,请随时在评论区留言探讨!

java永无止境! 458

线程(一)

如何保证线程安全 通过合理的时间调度,避开共享资源的存取冲突。另外,在并行任务设计上可以通过适当的策略,保证任务与任务之间不存在共享资源,设计一个规则来保护一个客户的计算工作和数据访问只会被一个线程或一台机器完成,而不是把一个客户的计算工作分配给多个线程去完成 线程的基本状态以及状态之间的关系 其中Running表示运行状态,Runable表示就绪状态(万事俱备,只欠CPU),Blocked表示阻塞状态,阻塞状态又有多种情况,可能是因为调用wait()方法进入等待池,也可能执行同步方法或同步代码块进入等锁池

weixin_44387195的博客 450

多线程的入门学习之一

写在前面: 多线程:一个进程在运行时产生了多个线程。 并行:真正的同时执行,多个cpu或多台机器同时执行一段处理逻辑。 并发:通过cpu调度算法,用户看上去像同时进行,实际从cpu层面看并不是。往往就是对公共资源的竞争使用。 线程安全:在并发的情况下,该代码经过多线程的使用,线程的调度顺序不影响任何结果。相反如果调度顺序会影响最终结果,那就是线程不安全的,如著名的不加事务的转账代码。 同步:通过...

qq_41030039的博客 166

虚拟线程与传统线程监视器对比(性能提升90%的关键技术拆解)

深入解析虚拟线程的监视器实现,揭示高并发场景下性能提升90%的核心机制。对比传统线程模型,详解轻量级调度与高效同步方法,适用于大规模I/O密集型应用。技术进阶必读,值得收藏。

ByteVein的博客 707

java 多线程——一个定时调度的例子

java 多线程 目录: Java 多线程——基础知识 Java 多线程 —— synchronized关键字 java 多线程——一个定时调度的例子 java 多线程——quartz 定时调度的例子 java 多线程—— 线程等待与唤醒 学习了一段时间的多线程内容,项目中有个定时调度的需求,将之前的需求重新梳理了下,写了一个多线程调用的简单例子,加深学习。这块内容整理完,考虑单...

weixin_30663391的博客 157
上一篇: HOOK SwapContext 枚举隐藏进程(学习笔记4)
下一篇: 运行程序前执行自己的代码
iiprogram
博客等级 码龄25年 1068粉丝 1515原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值