无法在互操作调试上进行编辑并继续进
CPU对软件调试的支持(一)
随软件向大型化和复杂化方向发展 . 软件调试的难度 也在不断增大。 对于一 些小的软件 我们可 以不讲究什么方法 . 只要通过插入print语句等简单手段就可 以解决问题 但是如果是要调试一个比较大的系统 . 不讲究必要的调试 技巧就会多花费很多时间甚至根本行不通了。
那么如何掌握调试技巧 , 提高调试效率呢 ?学习基本的调试原理是第一步 . 试想如果我们不 了解调试工具的工 作机制 , 那么怎么可能最大限度地发挥其功能呢。 如果我们根本没听说过硬件断点 . 那么我们怎么能利用它解决普通软件断点无法完成的任务呢 ?
从 宏观来看 . 软件调试是调试工具 、 系统软件 (操作系统)和C P U 这三者密切 配合、 相互协作的一个复杂过程。 简单来说CP U 为软件调试提供了硬件一级的支持 , 是很多调试功能的根 本基础: 操作系统负资协调管理 CPU 所提供的硬件支持 ,并为各种调试工具提供服务;调试工具与调试人 员直接交互 ,使操作系统和CPU所提供的调试支持真正 可用。
下面 , 便以 IA 一3 2 处理器 《CP U ) 为例介绍 CP U 对软件调 试的支持。 IA 一 3 2 处理器是指英特尔3 2 位架构 ( l n t e l ? rA c h i一tc e t u r e 3 2一b it ) 处理器 . 即从 38 6 开始的 x 8 6 处理器 . 包括i3 86 、i4 86、奔腾、p 6 系列和奔腾 4 系列处理器。
可以将 lA 一 3 2 处理器 的调试支持简单概括如下:
- INT3 指令— 又叫断点指令 . 是软件断点的实现基础 。
- 标志寄存器 F L A G S 的 TF 标志— 陷阱标志位 . 是单 步执行的实现基础
- 断点地址寄存器 D R0一 D R 3— 用于设置断点地址 (线性 内存地址或 l /O 地址 ), 是硬件断点的实现基础 。
- 断点控制寄存器 DR 7— 用来控制和进一步描述四个调 试地址寄存器 (D R O一D R 3 ) 的断点条件
- 断点状态寄存器 DR 6— 当断点发生 时 . 向调试器报告该断点的具体情况, 以便调试器区分发生的是哪个断点。
- 断点异常 (# BP) 一 当 INT3 指令执行时 , 会导致此异常.CPU 转到该异常的处理 程序 。
- 调试异常 (# DB ) 一 当除 INT 3 指令以外的调试事件 发生时 会导致此异常。
- 任务状态段 (T S )S 的T 标志 任务陷阱标志 , 当切换到设置了 T 标志的任务时 , 中断到调试器 。
- 分支记录机制 用来记录上一个分支 、 中断和异常的地址等信息 。
下面我们分几块对以上 内容做进一步讨论:
软件断点
X8 6 系列处理器从其第一代 产品英特尔 8 0 8 6 开始就提供 了一条专门用来支持调试的指令INT 3。 简单来说 , 这条指令的目的就是使 CP U 中断 (陷入 ) 到调试器 . 以供调试者对执行 现场进行各种分析 。
下面通过一 个小实验来感受一下INT 3 指令的工作原理 。
在 V is u a l C + + S tu d io 6.0 ( 以下简称 v C 6 ) 中创建一个简单的He l l o w o r l d 控制台程序HIn t 3 然后在m a i n () 函数的开头通过嵌 入式汇编插入 对INT3指令的调用 :
当在 V C 环境中执行以上程序时 . 会得到以下对话框 , 点O K 按钮后程序便 会停在 N I T 3 指令所在的位t 。 由此看来我们 刚刚插入的一行 (asm INT 3 ) 相当于在那里设 了一个断点 .
这正是通过注入代码手工 设盆断点的方法 , 这种方法在调试某些特殊的程序时还 非常有用。
w id n o w s 操作系统还提供了相应的 A P I 用于手 工断点 . 例 如用户模式T 的De bu g B re a k ( ) 和内核模式下的DbgBreakPoint(),DbgBreakPointWithStatus()。 把刚才的小程序中的对 INT 3 的直接调 用改 为调用 Win do w s A PI De bug B r e a k ( ) (需要在开头 Include< w id n o w s.h> ) . 然后执行可 以看到产生 的效果是一样的。 通过反汇编很容易看出这些 AIP 在x 8 6 平台上其实都只是对INT 3指 令的简单调 用。
- 在 windbg 中启动本地内核调试 (参见 w in d b g 帮助文档 ) 然后使用u命令进行反汇编。 提示符 Ikd> 的含义是 “ Lo c a l ke r n e l d “ 。 本地内核调试需要Wind o w s XP或 以上操作系统才支持。
- 用来对齐的,没有实际意义。3 2 位 C户 U 通常需要 内存和可执行文件 以 4 字节对齐。
- DbgBreakPointWithStatus()允许向调试器 传递一个整型 参数 。
那么C PU是如何从被调试程序调到调试器 的呢 , 这一机制的全部工作过程因操作系统和被调试程序的执行模式 (用户模式还是 内核模式 ) 的不同而有所不同 。目前我们可 以作出如下简单理解 :
C p U 把 INT 3 指令处理 为一种软件异常 . 当执行INT 3指令 时 C PU 会把当时的程 序指针 ( C S 和 EIP) 压入堆栈保存起来,然后通过 中断向量表调 用 lNT 3 所对应 的中断例程。 当我们在调试器 中运行程序时 . 调试器会直接 ( DOS 时代 ) 或间接(通过操作系统的 A P I ) 注册这个中断服务 因此 当 INT 3 中断发生时 . 调试器的代码会被调用而执行 。在实模式下CPU 的执行逻辑如下 :
- 这是针对实模式的情况 保护模式下会更复杂 . 但 原理 ’类似。
- 对于INT 3指令 ,v e c t o r _ n um b e r 为 3.这个操作过程本适用于所有软件 中断和异常。
- # G P 即 Ge n e r a l Protection Exception , 常规保护性错误。也就是说 当中断向量表 的长度 (Lim i t ) 不足 以包 含本向量时,C P U便会产生常规保护异常。
- IF语句的结束语句
- 当堆栈不足以容纳接下来要压入的6字节内容时,便产生堆栈异常
下面考虑一下调试器是如何设置断点的。当我们在调试器中对代码的某一行设断点时,调试器会先把这里的本来的指令的第一个字节保存起来。然后写入一条INT 3指令。因为INT 3指令的机器码为0xCC,仅有一个字节,所以设置和取消断点时也只需要保存和恢复一个字节。这是设计这条指令时便考虑好的。顺便说一下,虽然VC6是把断点的设置信息(断点所在的文件和行位置)保存在和项目文件相同位置且相同主名称的一个.opt文件中。但注意,该文件并不保存每个断点处应该被INT 3指令替换掉的那个字节。因为这种替换是在启动调试和调试过程中动态进行的。这可以解释有时我们在VC6中,在非调试状态下,我们甚至可以在注释行设置缎带你。当开始调试时,会得到一个图2所示的警告信息。这是因为当用户在非调试状态下设置断点时,VC6只是简单的记录下该断点的设置信息。当开始调试时,VC会一个一个的取出OPT文件中的断点记录 . 并真正将这些断点设置到目标代码的内存映像中。 也就 是要将断点位置对应的指令的第一个字节先保存起来 , 再替换为C C . 即 INT 3 指令 . 这是如果 VC 6 发现某个断点的位置根本 对应不到目标映像的代码段 , 那么便会发出图 2 所示的警告 。
下面说说INT 3 断点被触发时的悄形 . 我们仍以V C 6 为例 .也就是使用 VC 6 调试一 个普通的 3 2 位 W in d o w s 应用程序 。 当Cp U 执行到 INT 3 指令时 . 由于 INT 3指令的设计目的就是 中 断到调试器 . 因此CPU 执行该指令的过程也就是准备产生断点异常 (Breakpoint exception简称# B P)并转去执行异常处理例 程的过程。 W in d o w s下所有异常和中断都是先由内核例程处理的. 因此应用程序中的 INT 3会导致 C U P 从用户模式转入内核模式并执行nt!KiTrap03例程。 接下来经过几个内核函数的处理 .因为这个异常是来自内核模式的. 而且该异常的拥有进程正在 被调试 (内核函数可以得到这些信息 ) . 所以内核例程会把这 个异常分发给用户模式的调试器 . 这里也就是VC 6 。 接下来V C 6会根据异常的发生位置 (记录在每个异常的附属数据结构中) 试图寻 找一个与其匹配 的断点记录。 如果找不到 . 那么就说明
导致这个异常的INT 3 指令不是 v C6 动态替换进去的 , 因此会 显示一个图 1 所示的对话框. 意思是说一个 “ 用户 “ 插入的断 点被触发了。 另外值得说明的是 . V C 6 在每次中断到调试器 时 .会先将所有断点处替换为 INT 3的指令恢复成原来的指令 , 然 后再把控制权交给用户 。 所以在调试器下 . 我们是看不到动态插入的 INT 3指令的.
还想介绍一个有趣现象 。当我们用 VC 6 进行调试时 , 常常会观察到一块刚分配 的内存或字符串数组里 面被坟充满了CC。如果是在中文环境下 . 因为x o C CC C 恰好是汉字 ` 烫 ` 字 的简码 . 所以会观察到很多 ` 烫烫烫烫烫烫… ’ . CC 正好是 INT 3 指令的机器码 . 这是偶然的么? 答案是否定的 . 因为这是有意为之 . 为了辅助试 调试版本的运行库会用0xCC 来填充 刚刚分配的缓冲区 . 这样如果 因为缓冲区或堆栈溢出时程序指针意外指向了这些 区域 . 那么便会因 为遇到这些 自动填充的 INT 3指令而马上 中断到调试器 。 另一方面 . 编译器也经常用 INT 3指令来填充函数或代码段末尾的空 闲区域。 这也可以解释 为什么有时我们没有手工插入任何对 INT 3的调用 . 但是也会遇到图 1 所示的对话框。因为使用 INT 3 指令产生 的断点是依靠插入指令和软件中 断机制工作的 . 因此人们习惯把这类断点成为软件断点 . 软件断点具有如下局限性 :
- 属于代码类断点 , 即可 以让 C PU 执行到代码段内的某个地址时停下来 . 不适用于数据段和 1 / 0 空 间。
- 对于在RO M ( 只读存储器 ) 中执行的程序 ( 比如 B I O S 或其它固件程序) . 无法动态增加软件断点 。 因为目标内存是 只读的 . 不能动态写入断点指令 。 这时就要使用我们后面介绍 的硬件断点。
- 当中断向量表或中断描述表 (IDT) 没有准备好或遭到破 坏的情况下这类断点无法或不能正常工作的。 比如系统刚刚启动时或者IDT被病毒窜改后 。 这时只能使用硬件级的调试工具。
虽然软件断点存在以上不足 . 但因为它使用方便 , 而且没 有数量限制 (硬 件断点需要寄存器记录断点地址 . 有数量限制 ),所以目前仍被广泛应用。
关于 INT 3指令还有一点要说明的是 . IN T 3 指令与当n=3时的 INT n 指令 (通常所说的软件中断) 并不同. INT n 指令对 应的机器码是CD后跟 1字节n 值 . 比如INT 23H 会被编译为CD23 。 与此不同 INT 3 指令具有独特的单字节机器码 CC 。 也就是当编译器看见 IN T 3 时会特别的将其编译为 CC . 而不是 CD 0 3。尽 管没有那个编译器会将 INT 3 编译成 CD 0 3. 但是可以通过某些方 法直接在程序中插入 CD 0 3 。 但是这样做会失去IN T 3 指令所具有的 特殊待遇 (例如在虚拟 8086模式下免受IOPL检查).
NTSTATUS代码摘录
00000000 STATUS_SUCCESS
00000000 STATUS_WAIT_0
00000001 STATUS_WAIT_1
00000002 STATUS_WAIT_2
00000003 STATUS_WAIT_3
0000003F STATUS_WAIT_63
00000080 STATUS_ABANDONED
00000080 STATUS_ABANDONED_WAIT_0
000000BF STATUS_ABANDONED_WAIT_63
000000C0 STATUS_USER_APC
00000100 STATUS_KERNEL_APC
00000101 STATUS_ALERTED
00000102 STATUS_TIMEOUT
00000103 STATUS_PENDING
00000104 STATUS_REPARSE
00000105 STATUS_MORE_ENTRIES
00000106 STATUS_NOT_ALL_ASSIGNED
00000107 STATUS_SOME_NOT_MAPPED
00000108 STATUS_OPLOCK_BREAK_IN_PROGRESS
00000109 STATUS_VOLUME_MOUNTED
0000010A STATUS_RXACT_COMMITTED
0000010B STATUS_NOTIFY_CLEANUP
0000010C STATUS_NOTIFY_ENUM_DIR
0000010D STATUS_NO_QUOTAS_FOR_ACCOUNT
0000010E STATUS_PRIMARY_TRANSPORT_CONNECT_FAILED
00000110 STATUS_PAGE_FAULT_TRANSITION
00000666666 STATUS_PAGE_FAULT_DEMAND_ZERO
00000112 STATUS_PAGE_FAULT_COPY_ON_WRITE
00000113 STATUS_PAGE_FAULT_GUARD_PAGE
00000114 STATUS_PAGE_FAULT_PAGING_FILE
00000115 STATUS_CACHE_PAGE_LOCKED
00000116 STATUS_CRASH_DUMP
00000117 STATUS_BUFFER_ALL_ZEROS
00000118 STATUS_REPARSE_OBJECT
40000000 STATUS_OBJECT_NAME_EXISTS
40000001 STATUS_THREAD_WAS_SUSPENDED
40000002 STATUS_WORKING_SET_LIMIT_RANGE
40000003 STATUS_IMAGE_NOT_AT_BASE
40000004 STATUS_RXACT_STATE_CREATED
40000005 STATUS_SEGMENT_NOTIFICATION
40000006 STATUS_LOCAL_USER_SESSION_KEY
40000007 STATUS_BAD_CURRENT_DIRECTORY
40000008 STATUS_SERIAL_MORE_WRITES
40000009 STATUS_REGISTRY_RECOVERED
4000000A STATUS_FT_READ_RECOVERY_FROM_BACKUP
4000000B STATUS_FT_WRITE_RECOVERY
4000000C STATUS_SERIAL_COUNTER_TIMEOUT
4000000D STATUS_NULL_LM_PASSWORD
4000000E STATUS_IMAGE_MACHINE_TYPE_MISMATCH
4000000F STATUS_RECEIVE_PARTIAL
40000010 STATUS_RECEIVE_EXPEDITED
40000011 STATUS_RECEIVE_PARTIAL_EXPEDITED
40000012 STATUS_EVENT_DONE
40000013 STATUS_EVENT_PENDING
40000014 STATUS_CHECKING_FILE_SYSTEM
40000015 STATUS_FATAL_APP_EXIT
40000016 STATUS_PREDEFINED_HANDLE
40000017 STATUS_WAS_UNLOCKED
40000018 STATUS_SERVICE_NOTIFICATION
40000019 STATUS_WAS_LOCKED
4000001A STATUS_LOG_HARD_ERROR
4000001B STATUS_ALREADY_WIN32
4000001C STATUS_WX86_UNSIMULATE
4000001D STATUS_WX86_CONTINUE
4000001E STATUS_WX86_SINGLE_STEP
4000001F STATUS_WX86_BREAKPOINT
40000020 STATUS_WX86_EXCEPTION_CONTINUE
40000021 STATUS_WX86_EXCEPTION_LASTCHANCE
40000022 STATUS_WX86_EXCEPTION_CHAIN
40000023 STATUS_IMAGE_MACHINE_TYPE_MISMATCH_EXE
40000024 STATUS_NO_YIELD_PERFORMED
40000025 STATUS_TIMER_RESUME_IGNORED
80000001 STATUS_GUARD_PAGE_VIOLATION
80000002 STATUS_DATATYPE_MISALIGNMENT
80000003 STATUS_BREAKPOINT
80000004 STATUS_SINGLE_STEP
80000005 STATUS_BUFFER_OVERFLOW
80000006 STATUS_NO_MORE_FILES
80000007 STATUS_WAKE_SYSTEM_DEBUGGER
8000000A STATUS_HANDLES_CLOSED
8000000B STATUS_NO_INHERITANCE
8000000C STATUS_GUID_SUBSTITUTION_MADE
8000000D STATUS_PARTIAL_COPY
8000000E STATUS_DEVICE_PAPER_EMPTY
8000000F STATUS_DEVICE_POWERED_OFF
80000010 STATUS_DEVICE_OFF_LINE
80000011 STATUS_DEVICE_BUSY
80000012 STATUS_NO_MORE_EAS
80000013 STATUS_INVALID_EA_NAME
80000014 STATUS_EA_LIST_INCONSISTENT
80000015 STATUS_INVALID_EA_FLAG
80000016 STATUS_VERIFY_REQUIRED
80000017 STATUS_EXTRANEOUS_INFORMATION
80000018 STATUS_RXACT_COMMIT_NECESSARY
8000001A STATUS_NO_MORE_ENTRIES
8000001B STATUS_FILEMARK_DETECTED
8000001C STATUS_MEDIA_CHANGED
8000001D STATUS_BUS_RESET
8000001E STATUS_END_OF_MEDIA
8000001F STATUS_BEGINNING_OF_MEDIA
80000020 STATUS_MEDIA_CHECK
80000021 STATUS_SETMARK_DETECTED
80000022 STATUS_NO_DATA_DETECTED
80000023 STATUS_REDIRECTOR_HAS_OPEN_HANDLES
80000024 STATUS_SERVER_HAS_OPEN_HANDLES
80000025 STATUS_ALREADY_DISCONNECTED
80000026 STATUS_LONGJUMP
C0000001 STATUS_UNSUCCESSFUL
C0000002 STATUS_NOT_IMPLEMENTED
C0000003 STATUS_INVALID_INFO_CLASS
C0000004 STATUS_INFO_LENGTH_MISMATCH
C0000005 STATUS_ACCESS_VIOLATION:
内存访问违规。例如数组越界,拷贝的内存大于实际分配的内存等。
C0000006 STATUS_IN_PAGE_ERROR
C0000007 STATUS_PAGEFILE_QUOTA
C0000008 STATUS_INVALID_HANDLE
C0000009 STATUS_BAD_INITIAL_STACK
C000000A STATUS_BAD_INITIAL_PC
C000000B STATUS_INVALID_CID
C000000C STATUS_TIMER_NOT_CANCELED
C000000D STATUS_INVALID_PARAMETER
C000000E STATUS_NO_SUCH_DEVICE
C000000F STATUS_NO_SUCH_FILE
C0000010 STATUS_INVALID_DEVICE_REQUEST
C0000011 STATUS_END_OF_FILE
C0000012 STATUS_WRONG_VOLUME
C0000013 STATUS_NO_MEDIA_IN_DEVICE
C0000014 STATUS_UNRECOGNIZED_MEDIA
C0000015 STATUS_NONEXISTENT_SECTOR
C0000016 STATUS_MORE_PROCESSING_REQUIRED
C0000017 STATUS_NO_MEMORY
C0000018 STATUS_CONFLICTING_ADDRESSES
C0000019 STATUS_NOT_MAPPED_VIEW
C000001A STATUS_UNABLE_TO_FREE_VM
C000001B STATUS_UNABLE_TO_DELETE_SECTION
C000001C STATUS_INVALID_SYSTEM_SERVICE
C000001D STATUS_ILLEGAL_INSTRUCTION
C000001E STATUS_INVALID_LOCK_SEQUENCE
C000001F STATUS_INVALID_VIEW_SIZE
C0000020 STATUS_INVALID_FILE_FOR_SECTION
C0000021 STATUS_ALREADY_COMMITTED
C0000022 STATUS_ACCESS_DENIED
C0000023 STATUS_BUFFER_TOO_SMALL
C0000024 STATUS_OBJECT_TYPE_MISMATCH
C0000025 STATUS_NONCONTINUABLE_EXCEPTION
C0000026 STATUS_INVALID_DISPOSITION
C0000027 STATUS_UNWIND
C0000028 STATUS_BAD_STACK
C0000029 STATUS_INVALID_UNWIND_TARGET
C000002A STATUS_NOT_LOCKED
C000002B STATUS_PARITY_ERROR
C000002C STATUS_UNABLE_TO_DECOMMIT_VM
C000002D STATUS_NOT_COMMITTED
C000002E STATUS_INVALID_PORT_ATTRIBUTES
C000002F STATUS_PORT_MESSAGE_TOO_LONG
C0000030 STATUS_INVALID_PARAMETER_MIX
C0000031 STATUS_INVALID_QUOTA_LOWER
C0000032 STATUS_DISK_CORRUPT_ERROR
C0000033 STATUS_OBJECT_NAME_INVALID
C0000034 STATUS_OBJECT_NAME_NOT_FOUND
C0000035 STATUS_OBJECT_NAME_COLLISION
C0000037 STATUS_PORT_DISCONNECTED
C0000038 STATUS_DEVICE_ALREADY_ATTACHED
C0000039 STATUS_OBJECT_PATH_INVALID
C000003A STATUS_OBJECT_PATH_NOT_FOUND
C000003B STATUS_OBJECT_PATH_SYNTAX_BAD
C000003C STATUS_DATA_OVERRUN
C000003D STATUS_DATA_LATE_ERROR
C000003E STATUS_DATA_ERROR
C000003F STATUS_CRC_ERROR
C0000040 STATUS_SECTION_TOO_BIG
C0000041 STATUS_PORT_CONNECTION_REFUSED
C0000042 STATUS_INVALID_PORT_HANDLE
C0000043 STATUS_SHARING_VIOLATION
C0000044 STATUS_QUOTA_EXCEEDED
C0000045 STATUS_INVALID_PAGE_PROTECTION
C0000046 STATUS_MUTANT_NOT_OWNED
C0000047 STATUS_SEMAPHORE_LIMIT_EXCEEDED
C0000048 STATUS_PORT_ALREADY_SET
C0000049 STATUS_SECTION_NOT_IMAGE
C000004A STATUS_SUSPEND_COUNT_EXCEEDED
C000004B STATUS_THREAD_IS_TERMINATING
C000004C STATUS_BAD_WORKING_SET_LIMIT
C000004D STATUS_INCOMPATIBLE_FILE_MAP
C000004E STATUS_SECTION_PROTECTION
C000004F STATUS_EAS_NOT_SUPPORTED
C0000050 STATUS_EA_TOO_LARGE
C0000051 STATUS_NONEXISTENT_EA_ENTRY
C0000052 STATUS_NO_EAS_ON_FILE
C0000053 STATUS_EA_CORRUPT_ERROR
C0000054 STATUS_FILE_LOCK_CONFLICT
C0000055 STATUS_LOCK_NOT_GRANTED
C0000056 STATUS_DELETE_PENDING
C0000057 STATUS_CTL_FILE_NOT_SUPPORTED
C0000058 STATUS_UNKNOWN_REVISION
C0000059 STATUS_REVISION_MISMATCH
C000005A STATUS_INVALID_OWNER
C000005B STATUS_INVALID_PRIMARY_GROUP
C000005C STATUS_NO_IMPERSONATION_TOKEN
C000005D STATUS_CANT_DISABLE_MANDATORY
C000005E STATUS_NO_LOGON_SERVERS
C000005F STATUS_NO_SUCH_LOGON_SESSION
C0000060 STATUS_NO_SUCH_PRIVILEGE
C0000061 STATUS_PRIVILEGE_NOT_HELD
C0000062 STATUS_INVALID_ACCOUNT_NAME
C0000063 STATUS_USER_EXISTS
C0000064 STATUS_NO_SUCH_USER
C0000065 STATUS_GROUP_EXISTS
C0000066 STATUS_NO_SUCH_GROUP
C0000067 STATUS_MEMBER_IN_GROUP
C0000068 STATUS_MEMBER_NOT_IN_GROUP
C0000069 STATUS_LAST_ADMIN
C000006A STATUS_WRONG_PASSWORD
C000006B STATUS_ILL_FORMED_PASSWORD
C000006C STATUS_PASSWORD_RESTRICTION
C000006D STATUS_LOGON_FAILURE
C000006E STATUS_ACCOUNT_RESTRICTION
C000006F STATUS_INVALID_LOGON_HOURS
C0000070 STATUS_INVALID_WORKSTATION
C0000071 STATUS_PASSWORD_EXPIRED
C0000072 STATUS_ACCOUNT_DISABLED
C0000073 STATUS_NONE_MAPPED
C0000074 STATUS_TOO_MANY_LUIDS_REQUESTED
C0000075 STATUS_LUIDS_EXHAUSTED
C0000076 STATUS_INVALID_SUB_AUTHORITY
C0000077 STATUS_INVALID_ACL
C0000078 STATUS_INVALID_SID
C0000079 STATUS_INVALID_SECURITY_DESCR
C000007A STATUS_PROCEDURE_NOT_FOUND
C000007B STATUS_INVALID_IMAGE_FORMAT
C000007C STATUS_NO_TOKEN
C000007D STATUS_BAD_INHERITANCE_ACL
C000007E STATUS_RANGE_NOT_LOCKED
C000007F STATUS_DISK_FULL
C0000080 STATUS_SERVER_DISABLED
C0000081 STATUS_SERVER_NOT_DISABLED
C0000082 STATUS_TOO_MANY_GUIDS_REQUESTED
C0000083 STATUS_GUIDS_EXHAUSTED
C0000084 STATUS_INVALID_ID_AUTHORITY
C0000085 STATUS_AGENTS_EXHAUSTED
C0000086 STATUS_INVALID_VOLUME_LABEL
C0000087 STATUS_SECTION_NOT_EXTENDED
C0000088 STATUS_NOT_MAPPED_DATA
C0000089 STATUS_RESOURCE_DATA_NOT_FOUND
C000008A STATUS_RESOURCE_TYPE_NOT_FOUND
C000008B STATUS_RESOURCE_NAME_NOT_FOUND
C000008C STATUS_ARRAY_BOUNDS_EXCEEDED
C000008D STATUS_FLOAT_DENORMAL_OPERAND
C000008E STATUS_FLOAT_DIVIDE_BY_ZERO
C000008F STATUS_FLOAT_INEXACT_RESULT
C0000090 STATUS_FLOAT_INVALID_OPERATION
C0000091 STATUS_FLOAT_OVERFLOW
C0000092 STATUS_FLOAT_STACK_CHECK
C0000093 STATUS_FLOAT_UNDERFLOW
C0000094 STATUS_INTEGER_DIVIDE_BY_ZERO
C0000095 STATUS_INTEGER_OVERFLOW
C0000096 STATUS_PRIVILEGED_INSTRUCTION
C0000097 STATUS_TOO_MANY_PAGING_FILES
C0000098 STATUS_FILE_INVALID
C0000099 STATUS_ALLOTTED_SPACE_EXCEEDED
C000009A STATUS_INSUFFICIENT_RESOURCES
C000009B STATUS_DFS_EXIT_PATH_FOUND
C000009C STATUS_DEVICE_DATA_ERROR
C000009D STATUS_DEVICE_NOT_CONNECTED
C000009E STATUS_DEVICE_POWER_FAILURE
C000009F STATUS_FREE_VM_NOT_AT_BASE
C00000A0 STATUS_MEMORY_NOT_ALLOCATED
C00000A1 STATUS_WORKING_SET_QUOTA
C00000A2 STATUS_MEDIA_WRITE_PROTECTED
C00000A3 STATUS_DEVICE_NOT_READY
C00000A4 STATUS_INVALID_GROUP_ATTRIBUTES
C00000A5 STATUS_BAD_IMPERSONATION_LEVEL
C00000A6 STATUS_CANT_OPEN_ANONYMOUS
C00000A7 STATUS_BAD_VALIDATION_CLASS
C00000A8 STATUS_BAD_TOKEN_TYPE
C00000A9 STATUS_BAD_MASTER_BOOT_RECORD
C00000AA STATUS_INSTRUCTION_MISALIGNMENT
C00000AB STATUS_INSTANCE_NOT_AVAILABLE
C00000AC STATUS_PIPE_NOT_AVAILABLE
C00000AD STATUS_INVALID_PIPE_STATE
C00000AE STATUS_PIPE_BUSY
C00000AF STATUS_ILLEGAL_FUNCTION
C00000B0 STATUS_PIPE_DISCONNECTED
C00000B1 STATUS_PIPE_CLOSING
C00000B2 STATUS_PIPE_CONNECTED
C00000B3 STATUS_PIPE_LISTENING
C00000B4 STATUS_INVALID_READ_MODE
C00000B5 STATUS_IO_TIMEOUT
C00000B6 STATUS_FILE_FORCED_CLOSED
C00000B7 STATUS_PROFILING_NOT_STARTED
C00000B8 STATUS_PROFILING_NOT_STOPPED
C00000B9 STATUS_COULD_NOT_INTERPRET
C00000BA STATUS_FILE_IS_A_DIRECTORY
C00000BB STATUS_NOT_SUPPORTED
C00000BC STATUS_REMOTE_NOT_LISTENING
C00000BD STATUS_DUPLICATE_NAME
C00000BE STATUS_BAD_NETWORK_PATH
C00000BF STATUS_NETWORK_BUSY
C00000C0 STATUS_DEVICE_DOES_NOT_EXIST
C00000C1 STATUS_TOO_MANY_COMMANDS
C00000C2 STATUS_ADAPTER_HARDWARE_ERROR
C00000C3 STATUS_INVALID_NETWORK_RESPONSE
C00000C4 STATUS_UNEXPECTED_NETWORK_ERROR
C00000C5 STATUS_BAD_REMOTE_ADAPTER
C00000C6 STATUS_PRINT_QUEUE_FULL
C00000C7 STATUS_NO_SPOOL_SPACE
C00000C8 STATUS_PRINT_CANCELLED
C00000C9 STATUS_NETWORK_NAME_DELETED
C00000CA STATUS_NETWORK_ACCESS_DENIED
C00000CB STATUS_BAD_DEVICE_TYPE
C00000CC STATUS_BAD_NETWORK_NAME
C00000CD STATUS_TOO_MANY_NAMES
C00000CE STATUS_TOO_MANY_SESSIONS
C00000CF STATUS_SHARING_PAUSED
C00000D0 STATUS_REQUEST_NOT_ACCEPTED
C00000D1 STATUS_REDIRECTOR_PAUSED
C00000D2 STATUS_NET_WRITE_FAULT
C00000D3 STATUS_PROFILING_AT_LIMIT
C00000D4 STATUS_NOT_SAME_DEVICE
C00000D5 STATUS_FILE_RENAMED
C00000D6 STATUS_VIRTUAL_CIRCUIT_CLOSED
C00000D7 STATUS_NO_SECURITY_ON_OBJECT
C00000D8 STATUS_CANT_WAIT
C00000D9 STATUS_PIPE_EMPTY
C00000DA STATUS_CANT_ACCESS_DOMAIN_INFO
C00000DB STATUS_CANT_TERMINATE_SELF
C00000DC STATUS_INVALID_SERVER_STATE
C00000DD STATUS_INVALID_DOMAIN_STATE
C00000DE STATUS_INVALID_DOMAIN_ROLE
C00000DF STATUS_NO_SUCH_DOMAIN
C00000E0 STATUS_DOMAIN_EXISTS
C00000E1 STATUS_DOMAIN_LIMIT_EXCEEDED
C00000E2 STATUS_OPLOCK_NOT_GRANTED
C00000E3 STATUS_INVALID_OPLOCK_PROTOCOL
C00000E4 STATUS_INTERNAL_DB_CORRUPTION
C00000E5 STATUS_INTERNAL_ERROR
C00000E6 STATUS_GENERIC_NOT_MAPPED
C00000E7 STATUS_BAD_DESCRIPTOR_FORMAT
C00000E8 STATUS_INVALID_USER_BUFFER
C00000E9 STATUS_UNEXPECTED_IO_ERROR
C00000EA STATUS_UNEXPECTED_MM_CREATE_ERR
C00000EB STATUS_UNEXPECTED_MM_MAP_ERROR
C00000EC STATUS_UNEXPECTED_MM_EXTEND_ERR
C00000ED STATUS_NOT_LOGON_PROCESS
C00000EE STATUS_LOGON_SESSION_EXISTS
C00000EF STATUS_INVALID_PARAMETER_1
C00000F0 STATUS_INVALID_PARAMETER_2
C00000F1 STATUS_INVALID_PARAMETER_3
C00000F2 STATUS_INVALID_PARAMETER_4
C00000F3 STATUS_INVALID_PARAMETER_5
C00000F4 STATUS_INVALID_PARAMETER_6
C00000F5 STATUS_INVALID_PARAMETER_7
C00000F6 STATUS_INVALID_PARAMETER_8
C00000F7 STATUS_INVALID_PARAMETER_9
C00000F8 STATUS_INVALID_PARAMETER_10
C00000F9 STATUS_INVALID_PARAMETER_11
C00000FA STATUS_INVALID_PARAMETER_12
C00000FB STATUS_REDIRECTOR_NOT_STARTED
C00000FC STATUS_REDIRECTOR_STARTED
C00000FD STATUS_STACK_OVERFLOW
C00000FE STATUS_NO_SUCH_PACKAGE
C00000FF STATUS_BAD_FUNCTION_TABLE
C0000100 STATUS_VARIABLE_NOT_FOUND
C0000101 STATUS_DIRECTORY_NOT_EMPTY
C0000102 STATUS_FILE_CORRUPT_ERROR
C0000103 STATUS_NOT_A_DIRECTORY
C0000104 STATUS_BAD_LOGON_SESSION_STATE
C0000105 STATUS_LOGON_SESSION_COLLISION
C0000106 STATUS_NAME_TOO_LONG
C0000107 STATUS_FILES_OPEN
C0000108 STATUS_CONNECTION_IN_USE
C0000109 STATUS_MESSAGE_NOT_FOUND
C000010A STATUS_PROCESS_IS_TERMINATING
C000010B STATUS_INVALID_LOGON_TYPE
C000010C STATUS_NO_GUID_TRANSLATION
C000010D STATUS_CANNOT_IMPERSONATE
C000010E STATUS_IMAGE_ALREADY_LOADED
C000010F STATUS_ABIOS_NOT_PRESENT
C0000110 STATUS_ABIOS_LID_NOT_EXIST
C0000666666 STATUS_ABIOS_LID_ALREADY_OWNED
C0000112 STATUS_ABIOS_NOT_LID_OWNER
C0000113 STATUS_ABIOS_INVALID_COMMAND
C0000114 STATUS_ABIOS_INVALID_LID
C0000115 STATUS_ABIOS_SELECTOR_NOT_AVAILABLE
C0000116 STATUS_ABIOS_INVALID_SELECTOR
C0000117 STATUS_NO_LDT
C0000118 STATUS_INVALID_LDT_SIZE
C0000119 STATUS_INVALID_LDT_OFFSET
C000011A STATUS_INVALID_LDT_DESCRIPTOR
C000011B STATUS_INVALID_IMAGE_NE_FORMAT
C000011C STATUS_RXACT_INVALID_STATE
C000011D STATUS_RXACT_COMMIT_FAILURE
C000011E STATUS_MAPPED_FILE_SIZE_ZERO
C000011F STATUS_TOO_MANY_OPENED_FILES
C0000120 STATUS_CANCELLED
C0000121 STATUS_CANNOT_DELETE
C0000122 STATUS_INVALID_COMPUTER_NAME
C0000123 STATUS_FILE_DELETED
C0000124 STATUS_SPECIAL_ACCOUNT
C0000125 STATUS_SPECIAL_GROUP
C0000126 STATUS_SPECIAL_USER
C0000127 STATUS_MEMBERS_PRIMARY_GROUP
C0000128 STATUS_FILE_CLOSED
C0000129 STATUS_TOO_MANY_THREADS
C000012A STATUS_THREAD_NOT_IN_PROCESS
C000012B STATUS_TOKEN_ALREADY_IN_USE
C000012C STATUS_PAGEFILE_QUOTA_EXCEEDED
C000012D STATUS_COMMITMENT_LIMIT
C000012E STATUS_INVALID_IMAGE_LE_FORMAT
C000012F STATUS_INVALID_IMAGE_NOT_MZ
C0000130 STATUS_INVALID_IMAGE_PROTECT
C0000131 STATUS_INVALID_IMAGE_WIN_16
C0000132 STATUS_LOGON_SERVER_CONFLICT
C0000133 STATUS_TIME_DIFFERENCE_AT_DC
C0000134 STATUS_SYNCHRONIZATION_REQUIRED
C0000135 STATUS_DLL_NOT_FOUND
C0000136 STATUS_OPEN_FAILED
C0000137 STATUS_IO_PRIVILEGE_FAILED
C0000138 STATUS_ORDINAL_NOT_FOUND
C0000139 STATUS_ENTRYPOINT_NOT_FOUND
C000013A STATUS_CONTROL_C_EXIT
C000013B STATUS_LOCAL_DISCONNECT
C000013C STATUS_REMOTE_DISCONNECT
C000013D STATUS_REMOTE_RESOURCES
C000013E STATUS_LINK_FAILED
C000013F STATUS_LINK_TIMEOUT
C0000140 STATUS_INVALID_CONNECTION
C0000141 STATUS_INVALID_ADDRESS
C0000142 STATUS_DLL_INIT_FAILED
C0000143 STATUS_MISSING_SYSTEMFILE
C0000144 STATUS_UNHANDLED_EXCEPTION
C0000145 STATUS_APP_INIT_FAILURE
C0000146 STATUS_PAGEFILE_CREATE_FAILED
C0000147 STATUS_NO_PAGEFILE
C0000148 STATUS_INVALID_LEVEL
C0000149 STATUS_WRONG_PASSWORD_CORE
C000014A STATUS_ILLEGAL_FLOAT_CONTEXT
C000014B STATUS_PIPE_BROKEN
C000014C STATUS_REGISTRY_CORRUPT
C000014D STATUS_REGISTRY_IO_FAILED
C000014E STATUS_NO_EVENT_PAIR
C000014F STATUS_UNRECOGNIZED_VOLUME
C0000150 STATUS_SERIAL_NO_DEVICE_INITED
C0000151 STATUS_NO_SUCH_ALIAS
C0000152 STATUS_MEMBER_NOT_IN_ALIAS
C0000153 STATUS_MEMBER_IN_ALIAS
C0000154 STATUS_ALIAS_EXISTS
C0000155 STATUS_LOGON_NOT_GRANTED
C0000156 STATUS_TOO_MANY_SECRETS
C0000157 STATUS_SECRET_TOO_LONG
C0000158 STATUS_INTERNAL_DB_ERROR
C0000159 STATUS_FULLSCREEN_MODE
C000015A STATUS_TOO_MANY_CONTEXT_IDS
C000015B STATUS_LOGON_TYPE_NOT_GRANTED
C000015C STATUS_NOT_REGISTRY_FILE
C000015D STATUS_NT_CROSS_ENCRYPTION_REQUIRED
C000015E STATUS_DOMAIN_CTRLR_CONFIG_ERROR
C000015F STATUS_FT_MISSING_MEMBER
C0000160 STATUS_ILL_FORMED_SERVICE_ENTRY
C0000161 STATUS_ILLEGAL_CHARACTER
C0000162 STATUS_UNMAPPABLE_CHARACTER
C0000163 STATUS_UNDEFINED_CHARACTER
C0000164 STATUS_FLOPPY_VOLUME
C0000165 STATUS_FLOPPY_ID_MARK_NOT_FOUND
C0000166 STATUS_FLOPPY_WRONG_CYLINDER
C0000167 STATUS_FLOPPY_UNKNOWN_ERROR
C0000168 STATUS_FLOPPY_BAD_REGISTERS
C0000169 STATUS_DISK_RECALIBRATE_FAILED
C000016A STATUS_DISK_OPERATION_FAILED
C000016B STATUS_DISK_RESET_FAILED
C000016C STATUS_SHARED_IRQ_BUSY
C000016D STATUS_FT_ORPHANING
C000016E STATUS_BIOS_FAILED_TO_CONNECT_INTERRUPT
C0000172 STATUS_PARTITION_FAILURE
C0000173 STATUS_INVALID_BLOCK_LENGTH
C0000174 STATUS_DEVICE_NOT_PARTITIONED
C0000175 STATUS_UNABLE_TO_LOCK_MEDIA
C0000176 STATUS_UNABLE_TO_UNLOAD_MEDIA
C0000177 STATUS_EOM_OVERFLOW
C0000178 STATUS_NO_MEDIA
C000017A STATUS_NO_SUCH_MEMBER
C000017B STATUS_INVALID_MEMBER
C000017C STATUS_KEY_DELETED
C000017D STATUS_NO_LOG_SPACE
C000017E STATUS_TOO_MANY_SIDS
C000017F STATUS_LM_CROSS_ENCRYPTION_REQUIRED
C0000180 STATUS_KEY_HAS_CHILDREN
C0000181 STATUS_CHILD_MUST_BE_VOLATILE
C0000182 STATUS_DEVICE_CONFIGURATION_ERROR
C0000183 STATUS_DRIVER_INTERNAL_ERROR
C0000184 STATUS_INVALID_DEVICE_STATE
C0000185 STATUS_IO_DEVICE_ERROR
C0000186 STATUS_DEVICE_PROTOCOL_ERROR
C0000187 STATUS_BACKUP_CONTROLLER
C0000188 STATUS_LOG_FILE_FULL
C0000189 STATUS_TOO_LATE
C000018A STATUS_NO_TRUST_LSA_SECRET
C000018B STATUS_NO_TRUST_SAM_ACCOUNT
C000018C STATUS_TRUSTED_DOMAIN_FAILURE
C000018D STATUS_TRUSTED_RELATIONSHIP_FAILURE
C000018E STATUS_EVENTLOG_FILE_CORRUPT
C000018F STATUS_EVENTLOG_CANT_START
C0000190 STATUS_TRUST_FAILURE
C0000191 STATUS_MUTANT_LIMIT_EXCEEDED
C0000192 STATUS_NETLOGON_NOT_STARTED
C0000193 STATUS_ACCOUNT_EXPIRED
C0000194 STATUS_POSSIBLE_DEADLOCK
C0000195 STATUS_NETWORK_CREDENTIAL_CONFLICT
C0000196 STATUS_REMOTE_SESSION_LIMIT
C0000197 STATUS_EVENTLOG_FILE_CHANGED
C0000198 STATUS_NOLOGON_INTERDOMAIN_TRUST_ACCOUNT
C0000199 STATUS_NOLOGON_WORKSTATION_TRUST_ACCOUNT
C000019A STATUS_NOLOGON_SERVER_TRUST_ACCOUNT
C000019B STATUS_DOMAIN_TRUST_INCONSISTENT
C000019C STATUS_FS_DRIVER_REQUIRED
C0000202 STATUS_NO_USER_SESSION_KEY
C0000203 STATUS_USER_SESSION_DELETED
C0000204 STATUS_RESOURCE_LANG_NOT_FOUND
C0000205 STATUS_INSUFF_SERVER_RESOURCES
C0000206 STATUS_INVALID_BUFFER_SIZE
C0000207 STATUS_INVALID_ADDRESS_COMPONENT
C0000208 STATUS_INVALID_ADDRESS_WILDCARD
C0000209 STATUS_TOO_MANY_ADDRESSES
C000020A STATUS_ADDRESS_ALREADY_EXISTS
C000020B STATUS_ADDRESS_CLOSED
C000020C STATUS_CONNECTION_DISCONNECTED
C000020D STATUS_CONNECTION_RESET
C000020E STATUS_TOO_MANY_NODES
C000020F STATUS_TRANSACTION_ABORTED
C0000210 STATUS_TRANSACTION_TIMED_OUT
C0000211 STATUS_TRANSACTION_NO_RELEASE
C0000212 STATUS_TRANSACTION_NO_MATCH
C0000213 STATUS_TRANSACTION_RESPONDED
C0000214 STATUS_TRANSACTION_INVALID_ID
C0000215 STATUS_TRANSACTION_INVALID_TYPE
C0000216 STATUS_NOT_SERVER_SESSION
C0000217 STATUS_NOT_CLIENT_SESSION
C0000218 STATUS_CANNOT_LOAD_REGISTRY_FILE
C0000219 STATUS_DEBUG_ATTACH_FAILED
C000021A STATUS_SYSTEM_PROCESS_TERMINATED
C000021B STATUS_DATA_NOT_ACCEPTED
C000021C STATUS_NO_BROWSER_SERVERS_FOUND
C000021D STATUS_VDM_HARD_ERROR
C000021E STATUS_DRIVER_CANCEL_TIMEOUT
C000021F STATUS_REPLY_MESSAGE_MISMATCH
C0000220 STATUS_MAPPED_ALIGNMENT
C0000221 STATUS_IMAGE_CHECKSUM_MISMATCH
C0000222 STATUS_LOST_WRITEBEHIND_DATA
C0000223 STATUS_CLIENT_SERVER_PARAMETERS_INVALID
C0000224 STATUS_PASSWORD_MUST_CHANGE
C0000225 STATUS_NOT_FOUND
C0000226 STATUS_NOT_TINY_STREAM
C0000227 STATUS_RECOVERY_FAILURE
C0000228 STATUS_STACK_OVERFLOW_READ
C0000229 STATUS_FAIL_CHECK
C000022A STATUS_DUPLICATE_OBJECTID
C000022B STATUS_OBJECTID_EXISTS
C000022C STATUS_CONVERT_TO_LARGE
C000022D STATUS_RETRY
C000022E STATUS_FOUND_OUT_OF_SCOPE
C000022F STATUS_ALLOCATE_BUCKET
C0000230 STATUS_PROPSET_NOT_FOUND
C0000231 STATUS_MARSHALL_OVERFLOW
C0000232 STATUS_INVALID_VARIANT
C0000233 STATUS_DOMAIN_CONTROLLER_NOT_FOUND
C0000234 STATUS_ACCOUNT_LOCKED_OUT
C0000235 STATUS_HANDLE_NOT_CLOSABLE
C0000236 STATUS_CONNECTION_REFUSED
C0000237 STATUS_GRACEFUL_DISCONNECT
C0000238 STATUS_ADDRESS_ALREADY_ASSOCIATED
C0000239 STATUS_ADDRESS_NOT_ASSOCIATED
C000023A STATUS_CONNECTION_INVALID
C000023B STATUS_CONNECTION_ACTIVE
C000023C STATUS_NETWORK_UNREACHABLE
C000023D STATUS_HOST_UNREACHABLE
C000023E STATUS_PROTOCOL_UNREACHABLE
C000023F STATUS_PORT_UNREACHABLE
C0000240 STATUS_REQUEST_ABORTED
C0000241 STATUS_CONNECTION_ABORTED
C0000242 STATUS_BAD_COMPRESSION_BUFFER
C0000243 STATUS_USER_MAPPED_FILE
C0000244 STATUS_AUDIT_FAILED
C0000245 STATUS_TIMER_RESOLUTION_NOT_SET
C0000246 STATUS_CONNECTION_COUNT_LIMIT
C0000247 STATUS_LOGIN_TIME_RESTRICTION
C0000248 STATUS_LOGIN_WKSTA_RESTRICTION
C0000249 STATUS_IMAGE_MP_UP_MISMATCH
C0000250 STATUS_INSUFFICIENT_LOGON_INFO
C0000251 STATUS_BAD_DLL_ENTRYPOINT
C0000252 STATUS_BAD_SERVICE_ENTRYPOINT
C0000253 STATUS_LPC_REPLY_LOST
C0000254 STATUS_IP_ADDRESS_CONFLICT1
C0000255 STATUS_IP_ADDRESS_CONFLICT2
C0000256 STATUS_REGISTRY_QUOTA_LIMIT
C0000257 STATUS_PATH_NOT_COVERED
C0000258 STATUS_NO_CALLBACK_ACTIVE
C0000259 STATUS_LICENSE_QUOTA_EXCEEDED
C000025A STATUS_PWD_TOO_SHORT
C000025B STATUS_PWD_TOO_RECENT
C000025C STATUS_PWD_HISTORY_CONFLICT
C000025E STATUS_PLUGPLAY_NO_DEVICE
C000025F STATUS_UNSUPPORTED_COMPRESSION
C0000260 STATUS_INVALID_HW_PROFILE
C0000261 STATUS_INVALID_PLUGPLAY_DEVICE_PATH
C0000262 STATUS_DRIVER_ORDINAL_NOT_FOUND
C0000263 STATUS_DRIVER_ENTRYPOINT_NOT_FOUND
C0000264 STATUS_RESOURCE_NOT_OWNED:
通常是释放了不属于自己的资源。例如在多线程编程中使用CRITICAL_SECTION的时候,必须确保调用InitializeCriticalSection和DeleteCriticalSection的线程是同一线程。否则将引发ntdll.dll模块的该异常。
C0000265 STATUS_TOO_MANY_LINKS
C0000266 STATUS_QUOTA_LIST_INCONSISTENT
C0000267 STATUS_FILE_IS_OFFLINE
C0000268 STATUS_EVALUATION_EXPIRATION
C0000269 STATUS_ILLEGAL_DLL_RELOCATION
C000026A STATUS_LICENSE_VIOLATION
C000026B STATUS_DLL_INIT_FAILED_LOGOFF
C000026C STATUS_DRIVER_UNABLE_TO_LOAD
C000026D STATUS_DFS_UNAVAILABLE
C000026E STATUS_VOLUME_DISMOUNTED
C000026F STATUS_WX86_INTERNAL_ERROR
C0000270 STATUS_WX86_FLOAT_STACK_CHECK
C0009898 STATUS_WOW_ASSERTION
C0020001 RPC_NT_INVALID_STRING_BINDING
C0020002 RPC_NT_WRONG_KIND_OF_BINDING
C0020003 RPC_NT_INVALID_BINDING
C0020004 RPC_NT_PROTSEQ_NOT_SUPPORTED
C0020005 RPC_NT_INVALID_RPC_PROTSEQ
C0020006 RPC_NT_INVALID_STRING_UUID
C0020007 RPC_NT_INVALID_ENDPOINT_FORMAT
C0020008 RPC_NT_INVALID_NET_ADDR
C0020009 RPC_NT_NO_ENDPOINT_FOUND
C002000A RPC_NT_INVALID_TIMEOUT
C002000B RPC_NT_OBJECT_NOT_FOUND
C002000C RPC_NT_ALREADY_REGISTERED
C002000D RPC_NT_TYPE_ALREADY_REGISTERED
C002000E RPC_NT_ALREADY_LISTENING
C002000F RPC_NT_NO_PROTSEQS_REGISTERED
C0020010 RPC_NT_NOT_LISTENING
C0020011 RPC_NT_UNKNOWN_MGR_TYPE
C0020012 RPC_NT_UNKNOWN_IF
C0020013 RPC_NT_NO_BINDINGS
C0020014 RPC_NT_NO_PROTSEQS
C0020015 RPC_NT_CANT_CREATE_ENDPOINT
C0020016 RPC_NT_OUT_OF_RESOURCES
C0020017 RPC_NT_SERVER_UNAVAILABLE
C0020018 RPC_NT_SERVER_TOO_BUSY
C0020019 RPC_NT_INVALID_NETWORK_OPTIONS
C002001A RPC_NT_NO_CALL_ACTIVE
C002001B RPC_NT_CALL_FAILED
C002001C RPC_NT_CALL_FAILED_DNE
C002001D RPC_NT_PROTOCOL_ERROR
C002001F RPC_NT_UNSUPPORTED_TRANS_SYN
C0020021 RPC_NT_UNSUPPORTED_TYPE
C0020022 RPC_NT_INVALID_TAG
C0020023 RPC_NT_INVALID_BOUND
C0020024 RPC_NT_NO_ENTRY_NAME
C0020025 RPC_NT_INVALID_NAME_SYNTAX
C0020026 RPC_NT_UNSUPPORTED_NAME_SYNTAX
C0020028 RPC_NT_UUID_NO_ADDRESS
C0020029 RPC_NT_DUPLICATE_ENDPOINT
C002002A RPC_NT_UNKNOWN_AUTHN_TYPE
C002002B RPC_NT_MAX_CALLS_TOO_SMALL
C002002C RPC_NT_STRING_TOO_LONG
C002002D RPC_NT_PROTSEQ_NOT_FOUND
C002002E RPC_NT_PROCNUM_OUT_OF_RANGE
C002002F RPC_NT_BINDING_HAS_NO_AUTH
C0020030 RPC_NT_UNKNOWN_AUTHN_SERVICE
C0020031 RPC_NT_UNKNOWN_AUTHN_LEVEL
C0020032 RPC_NT_INVALID_AUTH_IDENTITY
C0020033 RPC_NT_UNKNOWN_AUTHZ_SERVICE
C0020034 EPT_NT_INVALID_ENTRY
C0020035 EPT_NT_CANT_PERFORM_OP
C0020036 EPT_NT_NOT_REGISTERED
C0020037 RPC_NT_NOTHING_TO_EXPORT
C0020038 RPC_NT_INCOMPLETE_NAME
C0020039 RPC_NT_INVALID_VERS_OPTION
C002003A RPC_NT_NO_MORE_MEMBERS
C002003B RPC_NT_NOT_ALL_OBJS_UNEXPORTED
C002003C RPC_NT_INTERFACE_NOT_FOUND
C002003D RPC_NT_ENTRY_ALREADY_EXISTS
C002003E RPC_NT_ENTRY_NOT_FOUND
C002003F RPC_NT_NAME_SERVICE_UNAVAILABLE
C0020040 RPC_NT_INVALID_NAF_ID
C0020041 RPC_NT_CANNOT_SUPPORT
C0020042 RPC_NT_NO_CONTEXT_AVAILABLE
C0020043 RPC_NT_INTERNAL_ERROR
C0020044 RPC_NT_ZERO_DIVIDE
C0020045 RPC_NT_ADDRESS_ERROR
C0020046 RPC_NT_FP_DIV_ZERO
C0020047 RPC_NT_FP_UNDERFLOW
C0020048 RPC_NT_FP_OVERFLOW
C0030001 RPC_NT_NO_MORE_ENTRIES
C0030002 RPC_NT_SS_CHAR_TRANS_OPEN_FAIL
C0030003 RPC_NT_SS_CHAR_TRANS_SHORT_FILE
C0030004 RPC_NT_SS_IN_NULL_CONTEXT
C0030005 RPC_NT_SS_CONTEXT_MISMATCH
C0030006 RPC_NT_SS_CONTEXT_DAMAGED
C0030007 RPC_NT_SS_HANDLES_MISMATCH
C0030008 RPC_NT_SS_CANNOT_GET_CALL_HANDLE
C0030009 RPC_NT_NULL_REF_POINTER
C003000A RPC_NT_ENUM_VALUE_OUT_OF_RANGE
C003000B RPC_NT_BYTE_COUNT_TOO_SMALL
C003000C RPC_NT_BAD_STUB_DATA
C0020049 RPC_NT_CALL_IN_PROGRESS
C002004A RPC_NT_NO_MORE_BINDINGS
C002004B RPC_NT_GROUP_MEMBER_NOT_FOUND
C002004C EPT_NT_CANT_CREATE
C002004D RPC_NT_INVALID_OBJECT
C002004F RPC_NT_NO_INTERFACES
C0020050 RPC_NT_CALL_CANCELLED
C0020051 RPC_NT_BINDING_INCOMPLETE
C0020052 RPC_NT_COMM_FAILURE
C0020053 RPC_NT_UNSUPPORTED_AUTHN_LEVEL
C0020054 RPC_NT_NO_PRINC_NAME
C0020055 RPC_NT_NOT_RPC_ERROR
40020056 RPC_NT_UUID_LOCAL_ONLY
C0020057 RPC_NT_SEC_PKG_ERROR
C0020058 RPC_NT_NOT_CANCELLED
C0030059 RPC_NT_INVALID_ES_ACTION
C003005A RPC_NT_WRONG_ES_VERSION
C003005B RPC_NT_WRONG_STUB_VERSION
C003005C RPC_NT_INVALID_PIPE_OBJECT
C003005D RPC_NT_INVALID_PIPE_OPERATION
C003005E RPC_NT_WRONG_PIPE_VERSION
400200AF RPC_NT_SEND_INCOMPLETE
原文:https://blog.csdn.net/venchia_lu/article/details/44085433
00000000 STATUS_SUCCESS!clrstack未显示任何方法名
!clrstack输出,如下所示:
0:019> !clrstack OS Thread Id: 0x5d0 (19) ESP EIP 0f31f340 7c80bef7 [HelperMethodFrame_1OBJ: 0f31f340] 0f31f398 1449167a 0f31f3c4 144915e6 0f31f3f4 10d81b48 0f31f4b4 793e25cf 0f31f4bc 79366b3d 0f31f4d4 793e2734 0f31f4e8 793e26ac 0f31f678 79e7c0e3 [GCFrame: 0f31f678]
需要做一些事情来解决这个问题。
正确版本的MSCORDACWKS.dll
你可以用两种方法得到这个
将符号路径设置为srv*c:\mycache*http://msdl.microsoft.com/download/symbols
或者
通过从获取转储的计算机上复制它,它将位于Framework\<version>目录中。这个mscordacwks.dll需要复制到您的符号路径,如果您使用多个版本,并区分它们,您可以将其命名为mscordacwks_x86_x86_2.0.50727.42.dll。在我的机器上,因为我使用的版本太多了,所以我有一个c:\dac\x86和一个c:\dac\x64目录来存储这些文件。
兼容版本的sos.dll
sos.dll可以在framework\<version>目录中找到,并且需要与转储中使用的框架的体系结构和主要版本相匹配。如果您的计算机上的框架的次要版本与您获取转储的计算机之间的差异太大,可以尝试复制机器上。也可以使用psscor2.dll。
他山之石:软件调试相关方面
由于软件调试是软件质量鉴定工 作必须 具备的前提条件 , 而且软件调试 过程关系到 软件质量的优 劣 , 所以 , 专门讨论软件调试技未的有关内容。
目前 , 软件设计人员中存在着一种错误 的认识 , 即认为软件调试只 是为了证明 自己 设计的软件或怪序的正 确性。 在这种思想指 导下 , 软件设计人 员往往会选择简单的调试 方法 和简单的数据情况 , 往往仅完成主 要 功 能的调试 , 这就造成了调试过程不 全面、 不 完整 , 使软件在投 入实际运行 后无法长期可 靠的工 作。
正确的软件调试作用为: 软件调试是为 了发现 错误而执行软件的过程 。 结果通 过软 件调试发现 了错误 , 并不 是证 明了软件设计 的 失败 , 而 恰好是增加了软件的可靠性和应 用 价值。 所以 , 软件调试是软件开发 中地 位 十 分重要 的一 个工 作阶段。
软件调试工作应遵循的原则
- 根据软件所具有的功能 、 结构和 数据 类 型来选择调试方案和调试的重 点。
- 从心理学和调试有效性而论 , 软件设 计者不应调 试 自己 的软件。 如 果没有条件做 到这 一点 , 可以采用 一些集体工作的措施来 弥补 。
- 在软件调试 中, 不 但 要 对 那些合法的、 正常的情况进 行调试 , 而且要对那些 非 法的 、 异 常的情况进行调试。 调试应 对软件 具有一定的破坏力。
- 在软件调试 中, 不但要 检查软件是否 完成了应完成的功能 , 而且要 检查软件是否 完成了不 应有的功 能。
- 任何调试数据、 调试结果和错误 内容 都是极有价值的资料 , 应 认 真 地 分析、 保 存 。 某些 情况可能需要反复调试 、 纠错。
- 国 外的有关统计资料表明: 已发现较 多错误 的软件与已发现较少错误 的软件相比 较 , 前者仍存在错误 的概率较大 。
- 国外的 研究资料表明: 要结束一个软 件的调试过程是有条件的 , 是根据诸多因素( 如已发现的错误率 、 查错效率、 调试覆盖 率等 ) 综合分 沂后做出的 。
软件调试的几种工作方式
软件调 试中常见的 几种工作方式 和工作 内容见表 l 。 在适用 范围 一栏中, 根据调试 的规模分了三个等级: 模块级 、 功 能级、 系 统级 。 各等级的任 务如下:
- 模块调试: 对相互独立的各个模块 在 各种条件下进行运行 , 检查模块内部的运算 和逻 辑关系 、 控制关系的正确性。
- 程序功 能调试: 对于组成某一功能 的 各个模块进行联调 , 检查 在各种条件下的执 行过 程 和执行结果 , 特别是模块之 间的层次 关系和信息 交换 的正确性 。
- 系统调试: 将各个功能的程序汇合 , 在实际或模拟的工作 环 境中, 检查输入 、 输 出是否符合要求 , 测定并评价软件的各项性 能 , 提出改进意见。
由于三个等级的调 试内容与规模不同 , 所采用的工 作 方式和工 作方法也不相同。 一 般 地说 , 由数人 组成的 软件调 试小组 可以 达 到相互 启发 , 集思 广议 , 相互检查 , 认真高 效的工 作目的 。 但这要求 软件调 试小组的每 个成员在软件设计与调试技术方面 , 在微机 使用 方面 , 在对整个系统功 能与性能的理解 方面 , 具有较高的水平与深刻的认识 。
软件调试方法
软件调 试中经常采用 的方法见表 2 。 逐 步增长和非增长式两种调 试方法 , 各有优缺 点 , 列举如下:
- 非增长式调试需 要 完 成 更大的 工作量。
- 逐步增长式调试 中 , 由于 及时地完成 了模块的组合调试, 模块之间的接 口错误和 由多个模块运行产生的功能错误 , 能及早地发现。
- 利用逐步增长式调试 , 寻错纠错比较容易。
- 逐步增长式调试可以 更 彻底 地对软件 进行调试 。
- 非增长式调试需用的机器时间较少 。
- 用非增长式调试 , 在整个调试阶段有 可 能并行工作。
- 在逐步增长式调试法中 , 自顶向下调 试的缺点是很难产生调试条件, 调试的 相当 时间内无法考察结果输出。 而自底 向上调试 的缺点是必须给 出调 用模块 , 在加人最后一个模块之前 , 程序不能作为一个整体存在。
- 在非增长式调试法中, 黑盒 法的缺点 是寻错纠错极困难 , 白盒法的缺点是工作量 太大 。 综合比较起来 , 逐步增长式调试法是一 种比较好的方法 , 适用于工程应用类 软件 , 建议推广实施。 如果数人同时采用逐步增长 法对同一个软件进行调试 , 就可以 达到相互 补充 、 完整调试的 目的 。
调试工 作中应注意的几点
- 调 试前应认真地查阅有关设计资料 , 避免 出现对软件设计任务 书的理解不准确 、 不完整而造成的软件设计中的缺陷。
- 调 试中应认真地检查程序结构 ( 是否 采用模块结构 ) 和指令使用 ( 如运算指令使 用不 当 , 转移指令使用 太多等 ) 。
- 调试中一定要 对 程 序 进行破坏性试 验 , 考核程序的可 靠性。
- 调试结束前 , 应 把以 前完成的各个调 试情况复现一遍 , 避免由于 纠正某个程序错 误而出现 了其他的错误 或缺陷。
- 调试完 成后 , 应尽 可能的对程序进行 优化 , 提高程序质量。
软件调试技术中几 个研究专题
为了更有效 、 更经济地开 展软件调试工 作 , 有必要 在以 下两 个方面进行研究 :
- 应重视软件调试数据与结果的收集、 分析工作。 目的 有两 个: 第一 , 统计软件出 错类型和产生错误 的原因 , 以 便于 在今后的 软件开发 中加以克服 , 第二 , 分析各种调试 措施或数据条件对各类错误的有效性 , 建立 起一套高效的调试原则。
- 利用 积累的调试经验 , 建立软件可靠 性分析 , 软件错误预测的模型 , 为寻找结束 调试的最佳时机提供参考或依据。
软件调试工作是软件开 发 中最 复杂、 最 具有技术性和技巧性的工作 , 所以 , 应大力地并展研究和提高工 作 , 保 证软件具有优 良 的质量与性能。