2019年11月13日

Visual C++ 里的 Classes, Methods and RTTI

摘要: 类的基本布局 为了说明以下内容,让我们考虑这个简单的例子: class A { int a1; public: virtual int A_virt1(); virtual int A_virt2(); static void A_static1(); void A_simple1(); }; cl 阅读全文

posted @ 2019-11-13 23:01 活着的虫子 阅读(504) 评论(0) 推荐(0) 编辑

Visual C++ 里的异常处理

摘要: 微软Visual C++是Win32最广泛使用的编译器,因此Win32反向器对其内部工作非常熟悉。能够识别编译器生成的粘合代码有助于快速集中于程序员编写的实际代码。它还有助于恢复程序的高级结构。我将集中讨论MSVC编译程序中的堆栈布局、异常处理和相关结构。假设对汇编程序、寄存器、调用约定等有一定的了 阅读全文

posted @ 2019-11-13 21:37 活着的虫子 阅读(1301) 评论(0) 推荐(0) 编辑

Windows加载器与模块初始化

摘要: 本文是Matt Pietrek在1999年9月的MSJ杂志上发表的关于Windows加载器与模块初始化方面的文章。作者深入分析了LdrpRunInitialize璕outines例程的作用,用C语言写出了此函数的伪代码,并剖析了模块初始化的整个过程,对于想了解Windows加载器的读者来说是不可多得 阅读全文

posted @ 2019-11-13 19:57 活着的虫子 阅读(977) 评论(0) 推荐(0) 编辑

记又一次内存爆掉导致的崩溃

该文被密码保护。 阅读全文

posted @ 2019-11-13 19:28 活着的虫子 阅读(1) 评论(0) 推荐(0) 编辑

Win32下的中断和异常

摘要: 本文是Matt Pietrek在1997年月10月的MSJ杂志Under The Hood专栏上发表的文章。中断和异常在DOS时代是整个系统的灵魂,但Windows已将其隐藏到了系统深处。Matt Pietrek详细剖析了Windows下的中断和异常及其处理机制以及内核模式与用户模式代码之间调用的问 阅读全文

posted @ 2019-11-13 18:30 活着的虫子 阅读(1123) 评论(0) 推荐(0) 编辑

从TEB到PEB再到SEH(二)

摘要: 什么是SEH? SEH( Structured Exception Handling , 结构化异常处理 ) 结构化异常处理(SEH)是Windows操作系统提供的强大异常处理功能。而Visual C++中的__try{}/__finally{}和__try{}/__except{}结构本质上是对W 阅读全文

posted @ 2019-11-13 16:37 活着的虫子 阅读(912) 评论(0) 推荐(0) 编辑

从TEB到PEB再到SEH(一)

摘要: 什么是TEB? TEB(Thread Environment Block,线程环境块) 线程环境块中存放着进程中所有线程的各种信息 这里我们了解到了TEB即为线程环境块, 进程中每一条线程都对应着的自己的“TEB”。 TEB的访问方法 ntdll.NtCurrentTeb() 函数用来返回当前线程的 阅读全文

posted @ 2019-11-13 16:03 活着的虫子 阅读(1697) 评论(0) 推荐(0) 编辑

2019年11月12日

微软安全技术Shim

摘要: Shim是微软系统中一个小型函数库,用于透明地拦截API调用,修改传递的参数、自身处理操作、或把操作重定向到其他地方。Shim主要用于解决遗留应用程序在新版Windows系统上的兼容性问题,但Shim也可用于其他方面。例如上周微软紧急推出针对“微软Office Powerpoint 0day漏洞(C 阅读全文

posted @ 2019-11-12 18:51 活着的虫子 阅读(2349) 评论(0) 推荐(0) 编辑

堆内存腐败异常(STATUS_HEAP_CORRUPTION---0xC0000374)

摘要: 什么是内存腐败 当堆内存位置的内容由于编程行为而被修改,超出了原始程序构造的意图时,计算机程序就会发生内存腐败,也可以叫内存破坏;这被称为违反内存安全。内存腐败的最可能原因是编程错误。当腐败的内存内容稍后在该程序中使用时,它要么导致程序崩溃,要么导致奇怪的程序行为。Windows系统上近10%的应用 阅读全文

posted @ 2019-11-12 16:21 活着的虫子 阅读(8085) 评论(0) 推荐(1) 编辑

记一次堆破坏引起的崩溃

该文被密码保护。 阅读全文

posted @ 2019-11-12 11:46 活着的虫子 阅读(0) 评论(0) 推荐(0) 编辑

2019年11月11日

不用VS调试.Net

摘要: 将来,任何开发人员都将需要调试应用程序,并且将无法访问Visual Studio,在某些情况下甚至无法访问源代码。例如,在生产web或应用服务器上调试问题时,我真的不想安装Visual Studio并跨所有源代码进行复制;这是不实际的,有时甚至是不允许的。正是在这种时候,我们需要另一个工具,一个调试 阅读全文

posted @ 2019-11-11 19:28 活着的虫子 阅读(489) 评论(0) 推荐(0) 编辑

查看.NET应用程序中的异常(下)

摘要: 为什么要使用内存转储进行调试? 在两种主要情况下,您可能需要使用内存转储进行调试。第一种情况是应用程序有一个未处理的异常并崩溃,而您只有一个内存转储。第二种情况是,在生产环境中出现异常或特定行为,并且在排除故障时不能将调试器保留在附件中,因为调试器可能会中断用户服务。相反,您可以附加cdb,在正确的 阅读全文

posted @ 2019-11-11 17:33 活着的虫子 阅读(377) 评论(0) 推荐(0) 编辑

查看.NET应用程序中的异常(上)

摘要: 内存转储是查明托管.NET应用程序中异常的原因的一种极好的方法,特别是在生产应用程序中发生异常时。当您在无法使用Visual Studio的应用程序中跟踪异常时,cdb和sos.dll的使用技术就变成了它们自己的技术。它们可能也不是你需要经常使用的技能,但在某些时候,它们将是无价的。Edward提供 阅读全文

posted @ 2019-11-11 16:59 活着的虫子 阅读(658) 评论(0) 推荐(1) 编辑

用于未处理异常错误的.NET框架清理工具

摘要: 当你启动某些程序时,会收到与此错误类似的未处理异常错误:Unhandled e0434f4dh exception at 7c81eb33h。此问题是由于.NET框架未正确安装或.NET框架系统中的另一个问题引起的。 最常见的情况是,可以通过重新安装相应的.NET框架先决条件来解决此问题。但是,在许 阅读全文

posted @ 2019-11-11 14:08 活着的虫子 阅读(574) 评论(0) 推荐(0) 编辑

CLR内部异常(下)

摘要: 直接使用SEH 有些情况里直接使用SEH会更合适一些。特别是,如果需要在第一次遍历(first pass - SEH异常处理流程里的第一遍处理)时需要执行某些操作时,也就是在堆栈向上展开之前,SEH是唯一的选项。一个SEH里的 __try/__except 过滤代码除了决定是否要处理某个异常以外,还 阅读全文

posted @ 2019-11-11 10:55 活着的虫子 阅读(247) 评论(0) 推荐(0) 编辑

CLR内部异常(中)

摘要: 不捕捉某一个异常 常常有这种情况,代码不需要捕捉异常,但需要执行一些清理或者修正操作。虽然不总是,支持物(holders)经常用在这种场景里。在支持物(holders)不适用的情况里,CLR提供了两个“finally”块的变种。 EX_TRY_FOR_FINALLY 当需要在代码退出时执行修正操作时 阅读全文

posted @ 2019-11-11 10:49 活着的虫子 阅读(262) 评论(0) 推荐(0) 编辑

CLR内部异常(上)

摘要: 当我们提到CLR里的“异常”,要注意一个很重要的区别。有通过如C#的try/catch/finally暴露给应用程序,并由运行时提供机制全权实现的托管异常。也有运行时自己使用的异常。大部分运行时开发人员很少需要想到如何实现并暴露托管异常模型。但每个运行时开发人员都应该懂得CLR实现里是怎么使用异常的 阅读全文

posted @ 2019-11-11 10:45 活着的虫子 阅读(545) 评论(0) 推荐(0) 编辑

2019年11月9日

深入解析pure virtual function call

摘要: 在本文中,我们将不解释为什么会提示“纯虚拟函数调用”和如何提示“纯虚拟函数调用”,而是详细解释在win32平台的构造函数/析构函数中直接/间接调用纯虚拟函数时程序本身。在开始时,将显示一个经典示例,在这个示例中,它将提示一个带有“纯虚拟函数调用”的消息框。 /** * "pure virtual f 阅读全文

posted @ 2019-11-09 14:50 活着的虫子 阅读(7953) 评论(0) 推荐(0) 编辑

_purecall函数

摘要: 默认纯虚拟函数调用错误处理程序。 当调用纯虚拟成员函数时,编译器生成调用此函数的代码。 原型: extern "C" int __cdecl _purecall(); _Purecall函数是 microsoft C++编译器的特定于 microsoft 的实现细节。 此函数不可以直接通过代码调用, 阅读全文

posted @ 2019-11-09 11:38 活着的虫子 阅读(1251) 评论(0) 推荐(0) 编辑

2019年11月8日

RaiseFailFastException函数

摘要: 引发绕过所有异常处理程序(基于帧或矢量)的异常。引发此异常将终止应用程序并调用Windows错误报告(如果Windows错误报告正在运行)。 原型: VOID WINAPI RaiseFailFastException( __in_opt PEXCEPTION_RECORD pExceptionRe 阅读全文

posted @ 2019-11-08 18:05 活着的虫子 阅读(1751) 评论(0) 推荐(0) 编辑

windows系统的快速失败机制---fastfail

摘要: windows系统的快速失败机制 fastfail,是一种用于“快速失败”请求的机制 — 一种潜在破坏进程请求立即终止进程的方法。 无法使用常规异常处理设施处理可能已破坏程序状态和堆栈至无法恢复的的严重故障。 使用 __fastfail 终止进程开销最少。 快速失败请求是独立的请求,通常只需执行两个 阅读全文

posted @ 2019-11-08 16:08 活着的虫子 阅读(1842) 评论(0) 推荐(0) 编辑

悲伤的 C++ throw(…)

摘要: 当在C++语言中引入异常时,引入了相应的throw(…)动态异常说明符,注释了哪些异常可以由函数抛出。比如: // this function might throw an integer or a pointer to char, // but nothing else. void foo() t 阅读全文

posted @ 2019-11-08 15:23 活着的虫子 阅读(2694) 评论(0) 推荐(0) 编辑

STATUS_STACK_BUFFER_OVERRUN不一定是栈缓冲区溢出

摘要: STATUS_STACK_BUFFER_OVERRUN异常一般是指栈缓冲区溢出的溢出,代码为0xC0000409,消息提示一般为“Security check failure or stack buffer overrun”。微软给出的解释如下:系统在应用程序中检测到基于堆栈的缓冲区溢出。此溢出可能 阅读全文

posted @ 2019-11-08 14:15 活着的虫子 阅读(16185) 评论(1) 推荐(0) 编辑

2019年11月7日

记一次在父类析构里调用纯虚函数而引发的异常

该文被密码保护。 阅读全文

posted @ 2019-11-07 19:34 活着的虫子 阅读(4) 评论(0) 推荐(0) 编辑

2019年11月5日

万能五笔输入法引发的血案

该文被密码保护。 阅读全文

posted @ 2019-11-05 19:03 活着的虫子 阅读(5) 评论(0) 推荐(0) 编辑

2019年11月4日

Windows是如何将64位Ntdll映射到32位进程的---转自简书

摘要: 今天我们探索一个问题: 64位的ntdll是如何被加载到WoW64下的32位进程?今天的旅程将会带领我们进入到Windows内核逻辑中的未知领域,我们将会发现32位进程的内存地址空间是如何被初始化的。 WoW64是什么? 来自MSDN: WOW64是允许32位Windows应用程序无缝运行在64位W 阅读全文

posted @ 2019-11-04 18:46 活着的虫子 阅读(719) 评论(0) 推荐(0) 编辑

记一次std::__non_rtti_object异常的崩溃

该文被密码保护。 阅读全文

posted @ 2019-11-04 18:01 活着的虫子 阅读(3) 评论(0) 推荐(0) 编辑

2019年10月15日

记一次数据库少表引发的异常

该文被密码保护。 阅读全文

posted @ 2019-10-15 17:18 活着的虫子 阅读(3) 评论(0) 推荐(0) 编辑

2019年10月10日

记一次程序跑飞掉的问题

该文被密码保护。 阅读全文

posted @ 2019-10-10 16:56 活着的虫子 阅读(2) 评论(0) 推荐(0) 编辑

2019年9月23日

WinDbg常用命令系列---显示当前异常处理程序链!exchain

摘要: !exchain 这个!exchain扩展命令显示当前异常处理程序链。 参数: Options下列值之一: /c 如果检测到异常,则显示与调试C++ try/catch异常相关的信息。 /C 显示与调试C++try/catch异常相关的信息,即使在没有检测到异常的情况下也是如此。 /f 显示通过遍历 阅读全文

posted @ 2019-09-23 21:04 活着的虫子 阅读(883) 评论(2) 推荐(0) 编辑

WinDbg常用命令系列---错误消息显示!error

摘要: !error 这个!error扩展命令解码并显示有关错误值的信息。 参数: Value指定以下错误代码之一:Win32、Winsock、NTSTATUS、NetAPI Flags如果标志设置为1,则错误代码将作为ntstatus代码读取。 DLL Windows 2000 Ext.dll Windo 阅读全文

posted @ 2019-09-23 20:52 活着的虫子 阅读(1320) 评论(0) 推荐(0) 编辑

WinDbg常用命令系列---检查符号X

摘要: x (Examine Symbols) x命令在所有与指定模式匹配的上下文中显示符号。 参数: Options特定符号搜索选项。您可以使用以下一个或多个选项:/0 只显示每个符号的地址。 /1 只显示每个符号的名称。 /2 只显示每个符号 (而非数据类型) 的地址和名称。 /D 使用调试器标记语言显 阅读全文

posted @ 2019-09-23 20:20 活着的虫子 阅读(2428) 评论(0) 推荐(0) 编辑

WinDbg常用命令系列---线程栈中局部上下文切换.frame

摘要: .frame (Set Local Context) .frame命令指定使用哪个本地上下文(作用域)解释本地变量或显示当前本地上下文。 参数: /c将指定的帧设置为当前本地重写上下文。此操作允许用户访问调用堆栈中任何函数的非易失性寄存器。 /r显示有关指定本地上下文的寄存器和其他信息。 Frame 阅读全文

posted @ 2019-09-23 19:49 活着的虫子 阅读(1644) 评论(0) 推荐(0) 编辑

WinDbg常用命令系列---显示数字格式化.formats

摘要: .formats (Show Number Formats) .formats命令在当前线程和进程的上下文中计算表达式或符号,并以多种数字格式显示它。 参数: expression指定要计算的表达式。 环境: 模式 用户模式下,内核模式 目标 实时、 崩溃转储 平台 全部 计算的表达式以十六进制、十 阅读全文

posted @ 2019-09-23 19:20 活着的虫子 阅读(933) 评论(0) 推荐(0) 编辑

WinDbg常用命令系列---清屏

摘要: .cls (Clear Screen) .cls命令清除调试器命令窗口显示。 环境: 模式 用户模式下,内核模式 目标 实时、 崩溃转储 平台 全部 清屏前 清屏后 阅读全文

posted @ 2019-09-23 18:53 活着的虫子 阅读(1718) 评论(0) 推荐(0) 编辑

记一次CLR异常的崩溃

该文被密码保护。 阅读全文

posted @ 2019-09-23 16:51 活着的虫子 阅读(0) 评论(0) 推荐(0) 编辑

记一次访问空指针崩溃

该文被密码保护。 阅读全文

posted @ 2019-09-23 14:25 活着的虫子 阅读(2) 评论(0) 推荐(0) 编辑

2019年9月21日

WinDbg常用命令系列---!address

摘要: !address 这个!address扩展命令显示有关目标进程或目标计算机使用的内存的信息。 用户模式: 内核模式: 参数: Address仅显示包含地址的地址空间区域。 -summary仅显示摘要信息。 -f:F1, F2, ...仅显示由筛选器f1、f2等指定的区域。以下筛选器值通过目标进程使用 阅读全文

posted @ 2019-09-21 16:13 活着的虫子 阅读(3247) 评论(0) 推荐(1) 编辑

WinDbg常用命令系列---日志操作相关命令log*

摘要: .logopen (Open Log File) .logopen命令将事件和命令的副本从调试器命令窗口发送到新的日志文件。 .logopen [Options] [FileName] .logopen /d 参数: Options下列任一选项:/t 将带有当前日期和时间的进程id附加到日志文件名中 阅读全文

posted @ 2019-09-21 15:34 活着的虫子 阅读(1291) 评论(0) 推荐(0) 编辑

WinDbg常用命令系列---.effmach

摘要: .effmach (Effective Machine) .effmach命令显示或更改调试器使用的处理器模式。 .effmach [MachineType] 参数: MachineType指定调试器用于此会话的处理器类型。如果省略此参数,调试器将显示当前计算机类型。您可以输入下列机器类型之一。 计 阅读全文

posted @ 2019-09-21 15:10 活着的虫子 阅读(572) 评论(0) 推荐(0) 编辑

导航