<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>seh</title>
	<atom:link href="https://www.aitaocui.cn/tag/204634/feed" rel="self" type="application/rss+xml" />
	<link>https://www.aitaocui.cn</link>
	<description>翡翠玉石爱好者聚集地</description>
	<lastBuildDate>Thu, 24 Nov 2022 08:40:38 +0000</lastBuildDate>
	<language>zh-CN</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.1.1</generator>

<image>
	<url>https://www.aitaocui.cn/wp-content/uploads/2022/11/taocui.png</url>
	<title>seh</title>
	<link>https://www.aitaocui.cn</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>seh(windows系统的结构化异常处理)</title>
		<link>https://www.aitaocui.cn/article/315293.html</link>
					<comments>https://www.aitaocui.cn/article/315293.html#respond</comments>
		
		<dc:creator><![CDATA[刀枪剑戟斧钺钩叉]]></dc:creator>
		<pubDate>Thu, 24 Nov 2022 08:40:38 +0000</pubDate>
				<category><![CDATA[百科]]></category>
		<category><![CDATA[seh]]></category>
		<guid isPermaLink="false">https://www.aitaocui.cn/?p=315293</guid>

					<description><![CDATA[SEH(&#34;Structured Exception Handling&#34;)，即结构化异常处理·是(windows)操作系统提供给程序设计者的强有力的处理程序错误或...]]></description>
										<content:encoded><![CDATA[</p>
<article>
<p>SEH(&quot;Structured Exception Handling&quot;)，即结构化异常处理·是(windows)操作系统提供给程序设计者的强有力的处理程序错误或异常的武器。编译器所提供的包装，照样可以利用系统提供的强大seh处理功能，在后面你将可以看到，用系统本身提供seh结构和规则以及ASM语言，我们将对SEH的机制以及实现有一个彻底的了解.。SetUnhandled Exception Filter安装了最后异常处理例程的话，系统转向对它的调用。</p>
</article>
<article>
<h1>定义</h1>
<p>SEH是Windows系统提供的功能，跟开发工具无关。值得一提的是，VC将SEH进行了封装try catch finally，c＋＋中也可以用c的封装__try{}__except(){}和__try{}__finally{}.所以当你建立一个C++try块时，编译器就生成一个SEH__try块。一个C++catch测试变成一个SEH异常过滤器，并且catch中的代码变成SEH__except块中的代码。实际上，当你写一条C++throw语句时，编译器就生成一个对Windows的Raise Exception函数的调用。用于throw语句的变量传递给Raise Exception作为附加的参数。</p>
<h1>发生异常时系统的处理顺序</h1>
<p>1.系统首先判断异常是否应发送给目标程序的异常处理例程，如果决定应该发送，并且目标程序正在被调试，则系统挂起程序并向</p>
<p>调试器发送EXCEPTION_DEBUG_EVENT消息.呵呵，这不是正好可以用来探测调试器的存在吗?</p>
<p>2.如果你的程序没有被调试或者调试器未能处理异常，系统就会继续查找你是否安装了线程相关的异常处理例程，如果你安装了线程相关的异常处理例程，系统就把异常发送给你的程序seh处理例程，交由其处理.</p>
<p>3.每个线程相关的异常处理例程可以处理或者不处理这个异常，如果他不处理并且安装了多个线程相关的异常处理例程，可交由链起来的其他例程处理.</p>
<p>4.如果这些例程均选择不处理异常，如果程序处于被调试状态，操作系统仍会再次挂起程序通知debugger.</p>
<p>5.如果程序未处于被调试状态或者debugger没有能够处理，并且你调用</p>
<p>SetUnhandledExceptionFilter安装了最后异常处理例程的话，系统转向对它的调用。</p>
<p>6.如果你没有安装最后异常处理例程或者他没有处理这个异常，系统会调用默认的系统处理程序，通常显示一个对话框，你可以选择关闭或者最后将其附加到调试器上的调试按钮.如果没有调试器能被附加于其上或者调试器也处理不了，系统就调用ExitProcess终结程序。</p>
<p>7.不过在终结之前，系统仍然对发生异常的线程异常处理句柄来一次展开，这是线程异常处理例程最后清理的机会。</p>
</article>
<div class="mt-3 mb-3" style="max-width: 770px;height: auto;">
                                    </div>
<div class="mt-3 mb-3" style="max-width: 770px;height: auto;">
                                    </div>
<div class="mt-3 mb-3" style="max-width: 770px;height: auto;">
                                    </div>
]]></content:encoded>
					
					<wfw:commentRss>https://www.aitaocui.cn/article/315293.html/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
