- 博客(652)
- 收藏
- 关注
原创 MinHook 对.NET底层的 SendMessage 拦截真实案例反思
再回头看文章开头的 cogxImagingDevice.dll 导致的程序卡死,如果用本篇的解决方案,是不是非常的轻量级,从此以后再也不需要抓内核的dump,也不需要在客户的电脑上用 spy++ 捣鼓来捣鼓去了。。。完美!
2025-06-10 11:10:57
547
原创 MinHook 如何对.NET底层的 Win32函数 进行拦截(上)
开箱和融合两种方式都有自己的用途,下一篇我们上一个很真实的场景,让大家体会下 win32 的注入对高级调试领域的强大功效。
2025-06-09 11:38:41
600
原创 聊一聊 .NET在Linux下的IO多路复用select和epoll
说了这么多,文尾总结下目前主流的 epoll 和 iocp 各自的特点。特性模型事件驱动 (Reactor)完成端口 (Proactor)核心思想通知可读写事件通知I/O操作完成适用场景高并发网络编程高并发I/O操作编程复杂度较低较高网络I/O性能极佳(百万级连接)优秀磁盘I/O支持有限完善CPU利用率高中内存开销低中。
2025-06-05 11:22:56
1156
原创 聊一聊 C# NativeAOT 多平台下的函数导出
这篇我们演示了 windows 上的C# 调用 C# AOT及 linux 上的C 调用 C# AOT,是不是挺有意思,也算是给训练营学员提供的一份资料参考。
2025-05-28 11:05:42
344
原创 聊一聊 .NET Dump 中的 Linux信号机制
简单的说Linux信号是一种进程间通信机制,大概可以做三件事情。通知进程发生了某种事件,比如:段错误。允许进程间发送简单的消息。控制进程行为,比如:终止、暂停、继续等。信号名称信号编号说明SIGQUIT3通常由 Ctrl+\ 触发SIGILL4非法指令SIGABRT6由 abort() 函数产生SIGFPE8浮点异常SIGSEGV11段错误(非法内存访问)SIGBUS7总线错误(内存访问对齐问题等)SIGSYS31错误的系统调用SIGTRAP5。
2025-05-27 11:39:37
633
原创 .NET外挂系列:8. harmony 的IL编织 Transpiler
这个系列总计8篇,已经全部写完啦!希望对同行们在解决.NET程序疑难杂症相关问题时提供一些资料和灵感,同时也是对.NET调试训练营的学员们功力提升添砖加瓦!
2025-05-24 14:02:09
852
原创 .NET外挂系列:7. harmony在高级调试中的一些实战案例
本篇列出的3个案例在.NET高级调试领域中还是非常经典的,如果用的合适,相信对你找出程序的疑难杂症事半功倍。
2025-05-23 13:52:10
1063
原创 .NET外挂系列:6. harmony中一些实用的反射工具包
这篇我们讲述的三个小工具包,更多的还是提高我们工作效率而准备的,用完之后也确实让人爱不释手。
2025-05-23 09:26:52
642
原创 .NET外挂系列:5. harmony 中补丁参数的有趣玩法(下)
这篇文章我们聊到的一些参数多多少少都带点黑客性质,建议大家不要乱用,这里声明一下,我所说的一切都是为.NET高级调试训练营服务的,也是给学员们提供的拓展资料。
2025-05-21 22:20:30
1018
原创 .NET外挂系列:4. harmony 中补丁参数的有趣玩法(上)
灵活运用这些奇奇怪怪的参数,相信你对 harmony 的使用有了一个全新的认识,大家可以开开心心的投放生产吧,去解决那些 Windows,Linux 上的 .NET程序的疑难杂症。
2025-05-21 10:02:34
1004
原创 .NET外挂系列:3. 了解 harmony 中灵活的纯手工注入方式
在特性搞不定的时候,手工HarmonyMethod编程是一个很好的补充,这几篇我们只关注了Prefix,毕竟从高级调试的角度看,我们更关注问题代码的调用栈,从而寻找引发故障的元凶。
2025-05-20 11:42:08
1073
原创 .NET外挂系列:2. 了解强大的 harmony 注解特性
通过不断的对方法进行注入优化,相信大家也感受到了harmony的异常强大,最后就是希望给训练营里的朋友一些思考和资料参考吧。
2025-05-19 10:20:06
425
原创 .NET外挂系列:1. harmony 基本原理和骨架分析
说了这么说,还是说一些比较实际的案例可能大家更感兴趣,我的一个 .NET 程序平时都是好好的,不知道为啥线程突然就暴涨到了1000+,现在很惶恐,不知道是什么逻辑导致的,我用 windbg 观察后发现是都是普通的Thread0:013>!tLock...人对一些未知的东西一般都很焦虑惶恐,那怎么反向找到是什么代码导致的呢?大家可以仔细想一想,既然有人开了Thread, 那必然要调用相应的 Start 方法,所以思路就很简单了,外挂方法就好,先用 ilspy 观察源码。
2025-05-18 15:38:09
964
1
原创 .NET程序启动就报错,如何截获初期化时的问题json
有了windbg之后,很多东西都会豁然开朗,而不再像以前那样人云亦云,高级调试这门救火技术应该是高级程序员必须的进阶之路。
2025-05-14 13:55:01
937
原创 如何反向绘制出 .NET程序 异步方法调用栈
手工绘制异步调用栈需要对异步的底层构建有一个清晰的认识,调试师是痛苦的,要想进阶为资深,需要日积月累的底层知识沉淀,在自我学习的过程中如果没有无数次的在绝望中寻找希望的能力,很容易从入门到放弃。。。
2025-05-11 18:31:25
574
原创 Linux系列:聊一聊 SystemV 下的进程间共享内存
其实在 Linux 中有很多中方式进行 IPC(进程间通信),我用大模型帮我做了一下汇总,截图如下:现如今Linux使用最多的还是POSIX标准,而System V相对来说比较老,为了研究我们写一个小例子观察下基本实现。哈哈,dump分析之旅就是这样,在分析中不断的学习新知识,再用新知识指导dump分析,就这样的不断的螺旋迭代,乐此不疲。
2025-05-10 11:03:20
331
原创 Linux系列:如何用perf跟踪.NET程序的mmap泄露
这类问题的泄露真的费了我不少心思,曾经让我纠结过,迷茫过,我也捣鼓过 strace,最终都无法找出栈上的托管函数,真的,目前 .NET 在 Linux 调试生态上还是很弱,好无奈,这篇文章我相信弥补了国内,甚至国外在这一块领域的空白,也算是这一年来对自己的一个交代。
2025-05-07 12:13:29
759
原创 记一次 .NET某工控任务调度系统 卡死分析
这次任务延迟事故在分析过程中还是有相当大的迷惑性,如果你缺乏对状态机的理解以及不知!dumpasync命令的使用,我相信这个问题你很难搞定。
2025-04-23 09:59:30
595
原创 记一次 .NET某旅行社酒店管理系统 卡死分析
这次卡死的生产事故,是大量数据库的慢请求导致SDK侧的数据库连接池(100)耗尽所致,如果有数据库侧的监控工具,我想一眼就能找到答案。
2025-04-21 12:38:45
717
原创 记一次 .NET某固高运动卡测试 卡慢分析
这次卡慢事故是由于赛门铁克导致,其实杀毒软件对我们程序来说真的是一个特别不稳定的因素,在我的分析旅程中,我见过杀毒软件导致的崩溃,卡死,卡慢,内存泄露 等等奇葩情况,无语了。。。
2025-04-14 11:34:20
808
原创 记一次 .NET某云HIS系统 CPU爆高分析
这次CPU爆高事故属于典型的蝴蝶效应,用 4 个线程间接的把64核的CPU直接干爆,这种问题有一定的隐蔽性,需要调试者对 后台GC 有一个总体的认识,否则还真不好解决,最后来一张 引发龙卷风 的小蝴蝶。。。
2025-04-11 12:03:04
1080
原创 Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
Linux 上的调试总觉得少了一位总管太监,能分析非托管内存的工具不鸟dotnet, 同样的,能分析dotnet托管内存的工具也不鸟非托管内存,大家各自为政。。。让习惯使用通杀一切的windbg使用者太不可思议了。
2025-03-07 11:10:36
661
原创 Linux系列:如何调试 malloc 的底层源码
对 Win32 级别的 libc 进行源码调试,有助于我们对书籍中那些malloc的底层理论知识有一个很好的眼见为实,也是给Linux上的.NET高级调试打开了一扇窗!
2025-03-04 14:46:13
341
原创 Linux系列:如何用 C#调用 C方法造成内存泄露
部署在 Linux上的.NET程序同样存在非托管内存泄露的问题,这篇文章的例子虽然很简单,希望能给大家带来一些思考和观测途径吧。
2025-03-03 14:08:13
493
原创 记一次 .NET某数字化协同管理系统 内存暴涨分析
EnableWriteXorExecute特性是在.NET7之后默认将0设为1的,在某些开源linux上会因为各种兼容性问题导致各种奇葩的问题发生,这东西我感觉目前还是能禁掉就禁掉吧。
2025-01-20 13:52:27
1389
原创 聊一聊 操作系统蓝屏 c0000102 的故障分析
操作系统的代码固若金汤,我们常人基本上遇不到代码导致的bug,更多的是第三方配件导致的不给力,解决此类问题大多都是修复,更换。。。
2025-01-19 14:19:13
1137
原创 一个超经典 WinForm,WPF 卡死问题的终极反思
作为一名专业的.NET高级调试师,在这个经典卡死的问题溯源上一直没有提供非常好的解决方案,还是有些内疚的,在我的高级调试之旅中还是会不间断的收到类似dump,相信这篇文章之后,不再有人被它所困扰!
2025-01-13 12:11:46
1072
原创 聊一聊 C#异步 任务延续的三种底层玩法
虽然异步任务延续有三种实现方法,但底层都是一个套路,即借助字段玩出的各种花样,当然他们也是有一些区别的,即对任务是否用单独的线程调度,产生了不同的意见分歧。
2025-01-09 14:56:14
1015
原创 为什么 .NET8线程池 容易引发线程饥饿
可以肯定的是减少callback重入队列次数可以尽可能的避免线程饥饿,但怎么说呢?.NET8的线程池综合性能绝对比.NET6要强悍的多,但.NET8中的设计理念可能也不能达到100%的全域领跑,可能在某些1%的场景下还不如 .NET6 的简单粗暴。
2025-01-07 14:42:35
1024
原创 聊一聊 C#异步中的Overlapped是如何寻址的
C#的传统做法大多都是采用传参数的方式来建议映射关系,而本篇中用 malloc 开辟一块私有区域来映射两者的关系也真是独一份,实属无奈!
2025-01-06 11:40:43
1075
原创 记一次 .NET某汗液测试机系统 崩溃分析
分析完这个dump之后其实我挺感慨的,人生也如此dump一样,在真相和假象之间不断的交织穿梭,有些人走出来了,有些人永远留在了里面。。。
2024-12-31 11:16:25
640
原创 记一次 .NET某电商医药网站 CPU爆高分析
说实话像这种生产事故,我以前在公司的项目中也会偶发的遇到,都是赶时间,加班加点写出来的代码,只想把功能写出来早点下班,复杂度高?后面再说吧。。。代码写的太好,容易被老板优化。。。
2024-12-30 11:46:52
878
原创 记一次 .NET某工业视觉软件 崩溃分析
在我的dump分析之旅中曾遇到过一次相似的生产故障,本篇文章主要还是对训练营里这位朋友的有求必应吧,不过说实话,多分析几个像这样的dump,会极大的提升你的高级调试能力。
2024-12-27 11:56:15
610
原创 聊一聊 C#线程池 的线程动态注入 (下)
我们聊到了两种提升线程注入的方法,尤其是第二种让人意难平,面对上游洪水猛兽般的对线程池进行DDOS攻击,下游的线程不顾一切,倾家荡产的去承接,这是一种明知不可为而为之的悲壮之举。
2024-12-25 13:33:19
711
原创 聊一聊 C#线程池 的线程动态注入 (中)
采用主动通知的方式唤醒GateThread可以让每秒线程注入数由原来的1~2个提升到4个,虽然有所优化,但面对上游洪水猛兽般的请求,很显然也是杯水车薪,最终还是酿成了线程饥饿的悲剧,下一篇我们继续研究如何让线程注入的快一点,再快一点。。。
2024-12-24 13:32:17
696
原创 聊一聊 C#线程池 的线程动态注入 (上)
可能有些朋友很感慨,线程的动态注入咋怎么慢?1s才1-2个,难怪会出现线程饥饿。。。哈哈,下一篇我们聊一聊Task.Result下的注入优化。
2024-12-23 13:30:50
803
原创 聊一聊 C#前台线程 如何阻塞程序退出
现在我们知道了前后台线程本质上是 coreclr 弄出来的概念,并非系统线程素有之物。还是那句话,知识不重要,重要的是会使用合适的工具和保有的探索心,这也是在训练营里重度强调的。
2024-12-22 13:08:13
733
原创 聊一聊坑人的 C# MySql.Data SDK
挺意外的是 MySql.Data 项目在 github:https://github.com/mysql/mysql-connector-net 上没开 issue 栏。这就无法让社区开发者介入,真的很奇葩,只能在这里给大家做个预警吧。
2024-12-20 12:31:35
597
原创 记一次 .NET某差旅系统 CPU爆高分析
我的学员没有分析出来,我觉得应该是被 Task.Result 给误导了,真实的dump分析可能会真真假假,假假真真,就像这个社会一样,需要更多的实践历练吧。
2024-12-11 11:57:43
1400
原创 记一次 .NET某hdp智能柜系统 卡死分析
这次生产事故,对一般人来说还是有一定的难度,毕竟这种东西不是几个命令就能弄出来的,还是需要考察你对coreclr 一些底层知识的熟悉度。
2024-11-29 09:18:29
878
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人