﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-天下-随笔分类-逆向工程</title><link>http://www.cppblog.com/aaxron/category/18046.html</link><description>把剑观沧海 笑语话人生</description><language>zh-cn</language><lastBuildDate>Tue, 08 Nov 2011 11:17:06 GMT</lastBuildDate><pubDate>Tue, 08 Nov 2011 11:17:06 GMT</pubDate><ttl>60</ttl><item><title>Windows内核驱动开发入门学习资料</title><link>http://www.cppblog.com/aaxron/archive/2011/11/07/159726.html</link><dc:creator>天下</dc:creator><author>天下</author><pubDate>Mon, 07 Nov 2011 01:20:00 GMT</pubDate><guid>http://www.cppblog.com/aaxron/archive/2011/11/07/159726.html</guid><wfw:comment>http://www.cppblog.com/aaxron/comments/159726.html</wfw:comment><comments>http://www.cppblog.com/aaxron/archive/2011/11/07/159726.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/aaxron/comments/commentRss/159726.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/aaxron/services/trackbacks/159726.html</trackback:ping><description><![CDATA[<span style="color: #555555; font-family: Verdana, 'BitStream vera Sans', Tahoma, Helvetica, sans-serif; font-size: 14px; "><h2>Windows内核驱动开发入门学习资料</h2><div style="margin-top: 5px; margin-right: 5px; margin-bottom: 5px; margin-left: 5px; "><span style="background-image: url(http://www.programlife.net/wp-content/themes/inove/img/icons.gif); background-attachment: initial; background-origin: initial; background-clip: initial; background-color: initial; padding-left: 22px; height: 16px; line-height: 16px; display: block; font-size: 12px; margin-right: 15px; float: left; background-position: 0px -48px; background-repeat: no-repeat no-repeat; ">2011年11月5日</span><span style="background-image: url(http://www.programlife.net/wp-content/themes/inove/img/icons.gif); background-attachment: initial; background-origin: initial; background-clip: initial; background-color: initial; padding-left: 22px; height: 16px; line-height: 16px; display: block; font-size: 12px; float: left; background-position: 0px 0px; background-repeat: no-repeat no-repeat; "><a href="http://www.programlife.net/author/admin/" title="由 代码疯子 发表" style="color: #2970a6; text-decoration: none; ">代码疯子</a></span><span style="background-image: url(http://www.programlife.net/wp-content/themes/inove/img/icons.gif); background-attachment: initial; background-origin: initial; background-clip: initial; background-color: initial; padding-left: 22px; height: 16px; line-height: 16px; display: block; font-size: 12px; margin-left: 15px; float: right; background-position: 0px -112px; background-repeat: no-repeat no-repeat; "><a href="http://www.programlife.net/driver-develop-material.html#respond" style="color: #2970a6; text-decoration: none; ">发表评论</a></span><span style="background-image: url(http://www.programlife.net/wp-content/themes/inove/img/icons.gif); background-attachment: initial; background-origin: initial; background-clip: initial; background-color: initial; padding-left: 22px; height: 16px; line-height: 16px; display: block; font-size: 12px; float: right; background-position: 0px -96px; background-repeat: no-repeat no-repeat; "><a href="http://www.programlife.net/driver-develop-material.html#comments" style="color: #2970a6; text-decoration: none; ">阅读评论</a></span><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; clear: both; "></div></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 5px; padding-left: 5px; line-height: 20px; overflow-x: hidden; overflow-y: hidden; "><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">声明：本文所描述的所有资料和源码均搜集自互联网，版权归原始作者所有，所以在引用资料时我尽量注明原始作者和出处；本文所搜集资料也仅供同学们学习之用，由于用作其他用途引起的责任纠纷，本人不负任何责任。（本资料由<a href="http://www.programlife.net/" target="_self" style="color: #2970a6; text-decoration: none; "><strong>代码疯子</strong></a>整理）</p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><strong>一、书籍推荐</strong></p><ol style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 10px; padding-left: 0px; "><li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 20px; list-style-position: inside; ">《Windows驱动开发技术详解》作者：张帆、史彩成；出版社：电子工业出版社</li><li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 20px; list-style-position: inside; ">《天书夜读：从汇编语言到Windows内核编程》作者：谭文、邵坚磊；出版社：电子工业出版社</li><li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 20px; list-style-position: inside; ">《寒江独钓：Windows内核安全编程》作者：谭文、杨潇、邵坚磊；出版社：电子工业出版社</li><li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 20px; list-style-position: inside; ">其他驱动开发相关书籍</li></ol><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><strong>二、源码学习</strong></p><ol style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 10px; padding-left: 0px; "><li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 20px; list-style-position: inside; ">《Windows驱动开发技术详解》源码下载：http://dl.dbank.com/c0rmlpwkfi</li><li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 20px; list-style-position: inside; ">《寒江独钓：Windows内核安全编程》源码下载：http://dl.dbank.com/c0t5kawz2e</li><li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 20px; list-style-position: inside; ">DDK 2600 驱动例子源码下载：http://dl.dbank.com/c0oktzwfsf</li><li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 20px; list-style-position: inside; ">WDK 7600 驱动例子源码下载：http://dl.dbank.com/c0hj1khp8c</li></ol><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><strong>三、学习网站</strong></p><ol style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 10px; padding-left: 0px; "><li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 20px; list-style-position: inside; ">看雪论坛：http://bbs.pediy.com/</li><li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 20px; list-style-position: inside; ">驱网：http://bbs.driverdevelop.com/</li><li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 20px; list-style-position: inside; ">帆子内核驱动网：http://bbs.kerneldev.com/</li><li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 20px; list-style-position: inside; ">看雪KSSD：http://kssd.pediy.com/</li><li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 20px; list-style-position: inside; ">一蓑烟雨：http://www.unpack.cn/</li><li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 20px; list-style-position: inside; ">吾爱破解：http://www.52pojie.cn/</li><li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 20px; list-style-position: inside; ">DebugMan：http://www.debugman.com/</li></ol><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><strong>四、其他资料（整理自看雪）</strong></p><ol style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 10px; padding-left: 0px; "><li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 20px; list-style-position: inside; ">驱动程序设计基础 http://bbs.pediy.com/showthread.php?t=56631</li><li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 20px; list-style-position: inside; ">通俗解析IRP和I/O设备栈在内核程序中的作用 http://bbs.pediy.com/showthread.php?t=111559</li><li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 20px; list-style-position: inside; ">我的驱动学习笔记 http://bbs.pediy.com/showthread.php?t=88723&nbsp;<a href="http://dl.dbank.com/c0gcp53hf8" target="_blank" style="color: #2970a6; text-decoration: none; ">下载附件</a></li><li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 20px; list-style-position: inside; ">驱动入门：从WRK看IRP 理论篇 http://bbs.pediy.com/showthread.php?t=130876&nbsp;<a href="http://dl.dbank.com/c0mbjwfjv4" target="_blank" style="color: #2970a6; text-decoration: none; ">下载附件</a></li><li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 20px; list-style-position: inside; ">驱动入门：从WRK看IRP 实践篇 http://bbs.pediy.com/showthread.php?t=130925&nbsp;<a href="http://dl.dbank.com/c0tihm8034" target="_blank" style="color: #2970a6; text-decoration: none; ">下载附件</a>&nbsp;<a href="http://dl.dbank.com/c0cnxa40nz" target="_blank" style="color: #2970a6; text-decoration: none; ">附件2</a></li></ol><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><strong>五、楚狂人（谭文）的Free教程</strong></p><ol style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 10px; padding-left: 0px; "><li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 20px; list-style-position: inside; ">《Windows驱动编程基础教程》 http://dl.dbank.com/c05tt0rxe5</li><li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 20px; list-style-position: inside; ">《Windows文件系统过滤驱动开发教程*第二版》 http://dl.dbank.com/c0n3p7haef</li></ol><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">原创文章，转载请注明:<br />本文出自<a href="http://www.programlife.net/" style="color: #2970a6; text-decoration: none; ">程序人生</a>&nbsp;&gt;&gt;&nbsp;<a href="http://www.programlife.net/driver-develop-material.html" style="color: #2970a6; text-decoration: none; ">Windows内核驱动开发入门学习资料</a><br />作者：<strong>代码疯子</strong></p></div></span><img src ="http://www.cppblog.com/aaxron/aggbug/159726.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/aaxron/" target="_blank">天下</a> 2011-11-07 09:20 <a href="http://www.cppblog.com/aaxron/archive/2011/11/07/159726.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>VC的SEH中的异常处理</title><link>http://www.cppblog.com/aaxron/archive/2011/11/05/159682.html</link><dc:creator>天下</dc:creator><author>天下</author><pubDate>Sat, 05 Nov 2011 08:27:00 GMT</pubDate><guid>http://www.cppblog.com/aaxron/archive/2011/11/05/159682.html</guid><wfw:comment>http://www.cppblog.com/aaxron/comments/159682.html</wfw:comment><comments>http://www.cppblog.com/aaxron/archive/2011/11/05/159682.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/aaxron/comments/commentRss/159682.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/aaxron/services/trackbacks/159682.html</trackback:ping><description><![CDATA[<span class="Apple-style-span" style="font-size: 12px; line-height: normal;"><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000; ">#include&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">iostream</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br />#include&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">windows.h</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br /><br /></span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;main()&nbsp;&nbsp;&nbsp;&nbsp;<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;__try&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">(</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">*</span><span style="color: #000000; ">)</span><span style="color: #000000; ">0</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">2</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;__except(EXCEPTION_EXECUTE_HANDLER)&nbsp;<br />&nbsp; &nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">EXCEPTION_EXECUTE_HANDLER,这是__except块预计到的异常,让系统执行本__except块中的代码.<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">EXCEPTION_CONTINUE_SEARCH,本__except块不处理异常,让程序寻找其他异常处理函数.<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">EXCEPTION_CONTINUE_EXECUTION,已经处理异常,回到异常点继续执行.如果异常没有清除,异常会继续发生.</span><span style="color: #008000; "><br /></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DWORD&nbsp;dwExceptCode&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;GetExceptionCode();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">__except\n</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;system(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">pause</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;&nbsp;&nbsp;&nbsp;&nbsp;<br />}</span></div></span><img src ="http://www.cppblog.com/aaxron/aggbug/159682.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/aaxron/" target="_blank">天下</a> 2011-11-05 16:27 <a href="http://www.cppblog.com/aaxron/archive/2011/11/05/159682.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>VC的SEH中的终结处理</title><link>http://www.cppblog.com/aaxron/archive/2011/11/05/159671.html</link><dc:creator>天下</dc:creator><author>天下</author><pubDate>Sat, 05 Nov 2011 06:57:00 GMT</pubDate><guid>http://www.cppblog.com/aaxron/archive/2011/11/05/159671.html</guid><wfw:comment>http://www.cppblog.com/aaxron/comments/159671.html</wfw:comment><comments>http://www.cppblog.com/aaxron/archive/2011/11/05/159671.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/aaxron/comments/commentRss/159671.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/aaxron/services/trackbacks/159671.html</trackback:ping><description><![CDATA[<div style="font-size: 13px; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-top-color: #cccccc; border-right-color: #cccccc; border-bottom-color: #cccccc; border-left-color: #cccccc; padding-right: 5px; padding-bottom: 4px; padding-left: 4px; padding-top: 4px; width: 98%; word-break: break-all; background-color: #eeeeee; "><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #008000; ">//</span><span style="color: #008000; ">直接上代码</span><span style="color: #008000; "><br />
</span><span style="color: #000000; ">#include&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">iostream</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br />
#include&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">windows.h</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br />
<br />
</span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">&nbsp;PrintHelp()<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">Usage:d04&nbsp;&lt;Number&gt;\n</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br />
}<br />
</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;main(</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;argc,</span><span style="color: #0000FF; ">char</span><span style="color: #000000; ">*</span><span style="color: #000000; ">&nbsp;argv[])&nbsp;&nbsp;&nbsp;&nbsp;<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;nNumber&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;(argc&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">2</span><span style="color: #000000; ">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PrintHelp();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">1</span><span style="color: #000000; ">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;nNumber&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;atoi(argv[</span><span style="color: #000000; ">1</span><span style="color: #000000; ">]);<br />
&nbsp;&nbsp;&nbsp;&nbsp;__try&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">You&nbsp;Entered:%s&nbsp;\n</span><span style="color: #000000; ">"</span><span style="color: #000000; ">,argv[</span><span style="color: #000000; ">1</span><span style="color: #000000; ">]);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;(nNumber</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;__leave;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;(nNumber</span><span style="color: #000000; ">==</span><span style="color: #000000; ">0</span><span style="color: #000000; ">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">goto</span><span style="color: #000000; ">&nbsp;EXIT_BYE;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;(nNumber</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">1</span><span style="color: #000000; ">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;__finally&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">ret&nbsp;Code:%d\n</span><span style="color: #000000; ">"</span><span style="color: #000000; ">,AbnormalTermination());<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
EXIT_BYE:<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;&nbsp;&nbsp;&nbsp;&nbsp;<br />
}<br /><br /><br />
</span></div>
<br />
反汇编之后,<br /><div>大意就是</div>在__try保护块中,<br />VC编译器会在return 及goto之前加入<br />call&nbsp;MSVCR90!local_unwind4+0x82的函数调用&nbsp;<br />而local_unwind4又会调用<br /><div>MSVCR90!NLG_Dispatch2+0x8 (78590adc)</div>然后又call到<br /><div>78590adc ffd0 &nbsp;&nbsp;&nbsp;call &nbsp; &nbsp;eax {d04!main+0x10b (0040110b)} ;这里就是__finally终结块代码.<br />另:<div style="display: inline-block; "></div><span class="Apple-style-span" style="font-size: 13px; background-color: #eeeeee; ">__leave是__try保护块的正常结束.<br /></span><br /></div><br /><br /><img src ="http://www.cppblog.com/aaxron/aggbug/159671.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/aaxron/" target="_blank">天下</a> 2011-11-05 14:57 <a href="http://www.cppblog.com/aaxron/archive/2011/11/05/159671.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>WinDBG的伪寄存器</title><link>http://www.cppblog.com/aaxron/archive/2011/11/03/159548.html</link><dc:creator>天下</dc:creator><author>天下</author><pubDate>Thu, 03 Nov 2011 03:11:00 GMT</pubDate><guid>http://www.cppblog.com/aaxron/archive/2011/11/03/159548.html</guid><wfw:comment>http://www.cppblog.com/aaxron/comments/159548.html</wfw:comment><comments>http://www.cppblog.com/aaxron/archive/2011/11/03/159548.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/aaxron/comments/commentRss/159548.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/aaxron/services/trackbacks/159548.html</trackback:ping><description><![CDATA[<div style="font-size: 13px; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-top-color: #cccccc; border-right-color: #cccccc; border-bottom-color: #cccccc; border-left-color: #cccccc; padding-right: 5px; padding-bottom: 4px; padding-left: 4px; padding-top: 4px; width: 98%; word-break: break-all; background-color: #eeeeee; "><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000; ">WinDBG的伪寄存器<br /><br />$ea<br />上一条指令中的有效地址（effective&nbsp;address）<br /><br />$ea2<br />上一条指令中的第二个有效地址<br /><br />$exp<br />表达式评估器所评估的上一条表达式<br /><br />$ra<br />当前函数的返回地址（retrun&nbsp;address）。<br />例如，可以使用g&nbsp;@$ra返回到上一级函数，与gu（go&nbsp;up）具有同样的效果<br /><br />$ip<br />指令指针寄存器。x86中即EIP，x64即eip<br /><br />$eventip<br />当前调试事件发生时的指令指针<br /><br />$previp<br />上一事件的指令指针<br /><br />$relip<br />与当前事件关联的指令指针，例如按分支跟踪时的分支源地址<br /><br />$scopeip<br />当前上下文（scope）的指令指针<br /><br />$exentry<br />当前进程的入口地址<br /><br />$retreg<br />首要的函数返回值寄存器。x86架构使用的是EAX，x64是RAX，安腾是ret0<br /><br />$retreg64<br />64位格式的首要函数返回值寄存器，x86中是edx:eax寄存器对<br /><br />$csp<br />帧指针，x86中即ESP寄存器，x64是RSP，安腾为BSP<br /><br />$p<br />上一个内存显示命令（d</span><span style="color: #000000; ">*</span><span style="color: #000000; ">）所打印的第一个值<br /><br />$proc<br />当前进程的EPROCESS结构的地址<br /><br />$thread<br />当前线程的ETHREAD结构的地址<br /><br />$peb<br />当前进程的进程环境块（PEB）的地址<br /><br />$teb<br />当前线程的线程环境块（TEB）的地址<br /><br />$tpid<br />拥有当前线程的进程的进程ID（PID）<br /><br />$tid<br />当前线程的线程ID<br /><br />$bpx<br />x号断点的地址<br /><br />$frame<br />当前栈帧的序号<br /><br />$dbgtime<br />当前时间，使用.formats命令可以将其显示为字符串值<br /><br />$callret<br />使用.call命令调用的上一个函数的返回值，或者使用.fnret命令设置的返回值<br /><br />$ptrsize<br />调试目标所在系统的指针类型宽度<br /><br />$pagesize<br />调试目标所在系统的内存页字节数<br /><br /><br />可以直接用上表中的名称来使用伪寄存器，但是更快速的方法是在$前加上一个@符号。这样，WinDBG就知道@后面是一个伪寄存器，不需要搜索其他符号。<br /><br /><br />使用windbg在程序的入口点下断点<br /></span><span style="color: #000000; ">1</span><span style="color: #000000; ">、bp&nbsp;@$exentry&nbsp;<br />使用伪寄存器的方法，也是最常用的方法<br /><br /></span><span style="color: #000000; ">2</span><span style="color: #000000; ">、bp&nbsp;poi(@$peb</span><span style="color: #000000; ">+</span><span style="color: #000000; ">8</span><span style="color: #000000; ">)</span><span style="color: #000000; ">+</span><span style="color: #000000; ">poi(poi(@$peb</span><span style="color: #000000; ">+</span><span style="color: #000000; ">8</span><span style="color: #000000; ">)</span><span style="color: #000000; ">+</span><span style="color: #000000; ">poi(poi(@$peb</span><span style="color: #000000; ">+</span><span style="color: #000000; ">8</span><span style="color: #000000; ">)</span><span style="color: #000000; ">+</span><span style="color: #000000; ">3c)</span><span style="color: #000000; ">+</span><span style="color: #000000; ">28</span><span style="color: #000000; ">)<br /><br /></span><span style="color: #000000; ">3</span><span style="color: #000000; ">、bp&nbsp;$iment(poi(@$peb</span><span style="color: #000000; ">+</span><span style="color: #000000; ">8</span><span style="color: #000000; ">))</span></div><img src ="http://www.cppblog.com/aaxron/aggbug/159548.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/aaxron/" target="_blank">天下</a> 2011-11-03 11:11 <a href="http://www.cppblog.com/aaxron/archive/2011/11/03/159548.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>