一:背景 1.讲故事 这些天计划好好研究下tcp/ip,以及socket套接字,毕竟工控中设计到各种交互协议,如果只是模模糊糊的了解,对分析此类dump还是非常不利的,而研究协议最好的入手点就是用抓包工具wireshark,废话不多说,这篇通过wireshark提取一个小图片作为入手。 二:wireshark图片抓包 1.捕获图片 为了方便演示,我们就用最简单的http上传图片的方式,客户端代码如下: <formmethod="post"action="/Home/Upload"enctype="multipart/form-data"> <inputtype="file"...

  eN9dsiqvgeuP   2023年12月31日   21   0   0 .NET

一:背景 1.讲故事 最近接连遇到了几起2G虚拟地址紧张导致的程序崩溃,基本上90%都集中在医疗行业,真的很无语,他们用的都是一些上古的XP,Windows7x86,我也知道技术人很难也基本无法推动硬件系统和设备的升级,这里蕴含了巨大的人情世故。 写这一篇的目的是想系统化的整理一下如何配置3G开关让程序吃到更多的内存,让程序崩溃的不那么频繁一些,以及如何验证是否成功开启! 二:32位操作系统 1.测试代码 首先大家要有一个理念:就是32bit系统上跑的程序,默认只能吃到2G内存,因为这涉及到公平,用户态吃2G,内核态吃2G,为了方便演示,向一个List塞入5000w的string,大概占用2G...

  eN9dsiqvgeuP   2023年12月31日   17   0   0 .NET

一:背景 1.讲故事 在高级调试的旅程中,经常会有一些朋友问我什么是工作集(内存),什么是提交大小,什么是VirtualSize,什么是WorkingSet。。。截图如下: 既然有很多朋友问,这些用口头也不怎么好描述,刚好上午有时间就系统的聊一下吧。 二:内存术语解读 1.VirtualSize是什么 可能有些朋友知道,内存中的虚拟地址被划分成了三类。 Reserved(预定地址) Committed(提交地址) Free(蛮荒地址) 上面的预定+提交就是我们的VirtualSize,即VirtualSize=Reserved+Committed。 当然口说无凭,得要拿出证据,写一个x8...

  eN9dsiqvgeuP   2023年12月31日   12   0   0 .NET

一:背景 1.讲故事 前几天有位朋友找到我,说他的程序会偶发性的报存储空间不足,无法处理此命令的错误,让我帮忙看下到底怎么回事,哈哈,人家是有备而来,dump都准备好了,话不多说,直接分析开干。 二:WinDbg分析 1.捕获dump中的异常 一般来讲别人说的只是一个参考,我们需要自己到dump中去验证,可以用!t观察下。 0:000:x86>!t ThreadCount:61 UnstartedThread:0 BackgroundThread:52 PendingThread:0 DeadThread:3 HostedRuntime:no Lock IDOSIDThreadOBJS...

  eN9dsiqvgeuP   2023年12月31日   15   0   0 .NET

一:背景 1.讲故事 上周有位朋友找到我,说他的程序经常会偶发性崩溃,一直没找到原因,自己也抓了dump也没分析出个所以然,让我帮忙看下怎么回事,那既然有dump,那就开始分析呗。 二:Windbg分析 1.到底是哪里的崩溃 一直跟踪我这个系列的朋友应该知道分析崩溃第一个命令就是!analyze-v,让windbg帮我们自动化异常分析。 0:033>!analyze-v CONTEXT:(.ecxr) rax=00000039cccff2d7rbx=00000039c85fc2b0rcx=00000039cccff2d8 rdx=0000000000000000rsi=00000000...

  eN9dsiqvgeuP   2023年12月31日   13   0   0 .NET

一:背景 1.讲故事 在高级调试的旅行中,发现有不少人对符号表不是很清楚,其实简而言之符号表中记录着一些程序的生物特征,比如哪个地址是函数(签名信息),哪个地址是全局变量,静态变量,行号是多少,数据类型是什么等等,目的就是辅助我们可视化的调试,如果没有这些辅助我们看到的都是一些无意义的汇编代码,逆向起来会非常困难,这一篇我们就来系统的聊一聊。 二:程序编译的四个阶段 1.案例代码 要想理解符号表,首先需要理解代码文件是如何变成可执行文件的,即如下的四个阶段。 预处理阶段 编译阶段 汇编阶段 链接阶段 为了能够看到每一个阶段,用gcc的相关命令手工推进,并用chatgpt写一段测试代码,包含...

  eN9dsiqvgeuP   2023年12月31日   13   0   0 .NET

一:背景 1.讲故事 前几天有位朋友找到我,说他的机器内存在不断的上涨,但在任务管理器中查不出是哪个进程吃的内存,特别奇怪,截图如下: 在我的分析旅程中都是用户态模式的内存泄漏,像上图中的异常征兆已经明确告诉你了,不是用户态程序吃的内存,那就是内核态程序吃的,比如: 某些驱动程序 操作系统 从概率上来说一般都是某些第三方程序内存泄露导致的,这一篇我们就来聊一聊这种问题该如何解决。 二:内核模式堆泄露分析 1.驱动程序是如何分配内存的 相信有很多朋友都知道,用户态的程序是直接或者间接的调用VirtualAlloc方法来向操作系统要内存,包括C的GC堆也是一样,它的方法签名如下: LPVO...

  eN9dsiqvgeuP   2023年12月31日   35   0   0 .NET

一:背景 1.讲故事 前段时间有位朋友找到我,说他们的程序出现了CPU爆高,让我帮忙看下怎么回事?这种问题好的办法就是抓个dump丢给我,推荐的工具就是用procdump自动化抓捕。 二:Windbg分析 1.CPU真的爆高吗 还是老规矩,要想找到这个答案,可以使用!tp命令。 0:044>!tp logStart:1 logSize:200 CPUutilization:88% WorkerThread:Total:8Running:4Idle:4MaxLimit:1023MinLimit:4 WorkRequestinQueue:0 ------------------------...

  eN9dsiqvgeuP   2023年12月31日   48   0   0 .NET

一:背景 1.讲故事 总会有一些朋友问一个问题,在Windows中线程做了上下文切换,请问被切的线程他的寄存器上下文都去了哪里?能不能给我挖出来?这个问题其实比较底层,如果对操作系统没有个体系层面的理解以及做过源码分析,其实很难说明白,这篇我们就从.NET高级调试的角度试着分析一下吧。 二:寄存器上下文去哪了 1.用户线程的两态空间 用C代码创建的线程在操作系统层面上来说属于用户态线程,这种线程拥有两个线程栈,哈哈,是不是打破了一些朋友的三观。分别为用户态栈和内核态栈。 为了方便讲解,写一段简单的测试代码,不断的调用Sleep(1)让代码在用户态和内核态不断的切换,也就能观察得到这两套栈空间,...

  eN9dsiqvgeuP   2023年12月31日   53   0   0 .NET

一:背景 1.讲故事 为什么要提宇宙射线,太阳耀斑导致的程序崩溃呢?主要是昨天在知乎上看了这篇文章:莫非我遇到了传说中的bug?,由于rip中的0x41变成了0x61出现了bit位翻转导致程序崩溃,截图如下: 下面的评论大多是说由于宇宙射线,这个太玄乎了,说实话看到这个传说bug的提法,我还是挺兴奋的,毕竟在我的分析旅程中,我也是真的遇到过,这篇就拿出来给大家分享吧,当时百思不得其解,真的是无语死了。 这位朋友找到我的时候,说程序会出现偶发性崩溃,自己在网上也发了很多帖子来寻找答案,最后都不了了之,问题确实太玄乎了,这一篇我们就开始这个奇妙之旅吧。 二:Windbg分析 1.为什么会崩溃 找...

  eN9dsiqvgeuP   2023年12月31日   29   0   0 .NET

一:背景 1.讲故事 在dump分析的旅程中也会碰到一些让我无法解释的灵异现象,追过这个系列的朋友应该知道,上一篇我聊过宇宙射线导致的程序崩溃,后来我又发现了一例,而这一例恰恰是高铁的列控连锁一体化程序,所以更加让我确定这是由于电离辐射干扰了计算机的数字信号导致程序的bit翻转,而这一篇也是一个我认为的灵异现象,拿出来给朋友们分享一下。 前段时间有位朋友找到我,说他的程序会偶发性崩溃,一直找不到原因很纠结,看我在这一块非常有经验让我帮忙看一下怎么回事,既然是有备而来自然dump也准备好了,接下来开始分析之旅吧。 二:WinDbg分析 1.为什么会崩溃 要想分析崩溃的原因还得windbg自带的自...

  eN9dsiqvgeuP   2023年12月31日   15   0   0 .NET

一:背景 1.讲故事 在dump分析的旅程中也会碰到一些让我无法解释的灵异现象,追过这个系列的朋友应该知道,上一篇我聊过宇宙射线导致的程序崩溃,后来我又发现了一例,而这一例恰恰是高铁的列控连锁一体化程序,所以更加让我确定这是由于电离辐射干扰了计算机的数字信号导致程序的bit翻转,而这一篇也是一个我认为的灵异现象,拿出来给朋友们分享一下。 前段时间有位朋友找到我,说他的程序会偶发性崩溃,一直找不到原因很纠结,看我在这一块非常有经验让我帮忙看一下怎么回事,既然是有备而来自然dump也准备好了,接下来开始分析之旅吧。 二:WinDbg分析 1.为什么会崩溃 要想分析崩溃的原因还得windbg自带的自...

  eN9dsiqvgeuP   2023年12月28日   12   0   0 .NET

一:背景 1.讲故事 为什么要提宇宙射线,太阳耀斑导致的程序崩溃呢?主要是昨天在知乎上看了这篇文章:莫非我遇到了传说中的bug?,由于rip中的0x41变成了0x61出现了bit位翻转导致程序崩溃,截图如下: 下面的评论大多是说由于宇宙射线,这个太玄乎了,说实话看到这个传说bug的提法,我还是挺兴奋的,毕竟在我的分析旅程中,我也是真的遇到过,这篇就拿出来给大家分享吧,当时百思不得其解,真的是无语死了。 这位朋友找到我的时候,说程序会出现偶发性崩溃,自己在网上也发了很多帖子来寻找答案,最后都不了了之,问题确实太玄乎了,这一篇我们就开始这个奇妙之旅吧。 二:Windbg分析 1.为什么会崩溃 找...

  eN9dsiqvgeuP   2023年12月25日   13   0   0 .NET

一:背景 1.讲故事 总会有一些朋友问一个问题,在Windows中线程做了上下文切换,请问被切的线程他的寄存器上下文都去了哪里?能不能给我挖出来?这个问题其实比较底层,如果对操作系统没有个体系层面的理解以及做过源码分析,其实很难说明白,这篇我们就从.NET高级调试的角度试着分析一下吧。 二:寄存器上下文去哪了 1.用户线程的两态空间 用C代码创建的线程在操作系统层面上来说属于用户态线程,这种线程拥有两个线程栈,哈哈,是不是打破了一些朋友的三观。分别为用户态栈和内核态栈。 为了方便讲解,写一段简单的测试代码,不断的调用Sleep(1)让代码在用户态和内核态不断的切换,也就能观察得到这两套栈空间,...

  eN9dsiqvgeuP   2023年12月22日   29   0   0 .NET

一:背景 1.讲故事 前段时间有位朋友找到我,说他们的程序出现了CPU爆高,让我帮忙看下怎么回事?这种问题好的办法就是抓个dump丢给我,推荐的工具就是用procdump自动化抓捕。 二:Windbg分析 1.CPU真的爆高吗 还是老规矩,要想找到这个答案,可以使用!tp命令。 0:044>!tp logStart:1 logSize:200 CPUutilization:88% WorkerThread:Total:8Running:4Idle:4MaxLimit:1023MinLimit:4 WorkRequestinQueue:0 ------------------------...

  eN9dsiqvgeuP   2023年12月22日   9   0   0 .NET

一:背景 1.讲故事 前几天有位朋友找到我,说他的机器内存在不断的上涨,但在任务管理器中查不出是哪个进程吃的内存,特别奇怪,截图如下: 在我的分析旅程中都是用户态模式的内存泄漏,像上图中的异常征兆已经明确告诉你了,不是用户态程序吃的内存,那就是内核态程序吃的,比如: 某些驱动程序 操作系统 从概率上来说一般都是某些第三方程序内存泄露导致的,这一篇我们就来聊一聊这种问题该如何解决。 二:内核模式堆泄露分析 1.驱动程序是如何分配内存的 相信有很多朋友都知道,用户态的程序是直接或者间接的调用VirtualAlloc方法来向操作系统要内存,包括C的GC堆也是一样,它的方法签名如下: LPVO...

  eN9dsiqvgeuP   2023年12月14日   60   0   0 .NET

一:背景 1.讲故事 在高级调试的旅行中,发现有不少人对符号表不是很清楚,其实简而言之符号表中记录着一些程序的生物特征,比如哪个地址是函数(签名信息),哪个地址是全局变量,静态变量,行号是多少,数据类型是什么等等,目的就是辅助我们可视化的调试,如果没有这些辅助我们看到的都是一些无意义的汇编代码,逆向起来会非常困难,这一篇我们就来系统的聊一聊。 二:程序编译的四个阶段 1.案例代码 要想理解符号表,首先需要理解代码文件是如何变成可执行文件的,即如下的四个阶段。 预处理阶段 编译阶段 汇编阶段 链接阶段 为了能够看到每一个阶段,用gcc的相关命令手工推进,并用chatgpt写一段测试代码,包含...

  eN9dsiqvgeuP   2023年12月12日   13   0   0 .NET

一:背景 1.讲故事 上周有位朋友找到我,说他的程序经常会偶发性崩溃,一直没找到原因,自己也抓了dump也没分析出个所以然,让我帮忙看下怎么回事,那既然有dump,那就开始分析呗。 二:Windbg分析 1.到底是哪里的崩溃 一直跟踪我这个系列的朋友应该知道分析崩溃第一个命令就是!analyze-v,让windbg帮我们自动化异常分析。 0:033>!analyze-v CONTEXT:(.ecxr) rax=00000039cccff2d7rbx=00000039c85fc2b0rcx=00000039cccff2d8 rdx=0000000000000000rsi=00000000...

  eN9dsiqvgeuP   2023年12月11日   9   0   0 .NET

一:背景 1.讲故事 前几天有位朋友找到我,说他的程序会偶发性的报存储空间不足,无法处理此命令的错误,让我帮忙看下到底怎么回事,哈哈,人家是有备而来,dump都准备好了,话不多说,直接分析开干。 二:WinDbg分析 1.捕获dump中的异常 一般来讲别人说的只是一个参考,我们需要自己到dump中去验证,可以用!t观察下。 0:000:x86>!t ThreadCount:61 UnstartedThread:0 BackgroundThread:52 PendingThread:0 DeadThread:3 HostedRuntime:no Lock IDOSIDThreadOBJS...

  eN9dsiqvgeuP   2023年12月06日   16   0   0 .NET

一:背景 1.讲故事 在高级调试的旅程中,经常会有一些朋友问我什么是工作集(内存),什么是提交大小,什么是VirtualSize,什么是WorkingSet。。。截图如下: 既然有很多朋友问,这些用口头也不怎么好描述,刚好上午有时间就系统的聊一下吧。 二:内存术语解读 1.VirtualSize是什么 可能有些朋友知道,内存中的虚拟地址被划分成了三类。 Reserved(预定地址) Committed(提交地址) Free(蛮荒地址) 上面的预定+提交就是我们的VirtualSize,即VirtualSize=Reserved+Committed。 当然口说无凭,得要拿出证据,写一个x8...

  eN9dsiqvgeuP   2023年12月04日   14   0   0 .NET
关注 更多

空空如也 ~ ~

粉丝 更多

空空如也 ~ ~