{"id":104764,"date":"2026-09-13T07:57:06","date_gmt":"2026-09-12T23:57:06","guid":{"rendered":"https:\/\/www.wsisp.com\/helps\/104764.html"},"modified":"2026-09-13T07:57:06","modified_gmt":"2026-09-12T23:57:06","slug":"%e3%80%90windows%e3%80%91%e3%80%8a%e6%b7%b1%e5%85%a5%e6%b5%85%e5%87%bawindows-api%e7%a8%8b%e5%ba%8f%e8%ae%be%e8%ae%a1%ef%bc%9a%e6%a0%b8%e5%bf%83%e7%bc%96%e7%a8%8b%e7%af%87%e3%80%8b%e7%ac%94%e8%ae%b0-c","status":"publish","type":"post","link":"https:\/\/www.wsisp.com\/helps\/104764.html","title":{"rendered":"\u3010Windows\u3011\u300a\u6df1\u5165\u6d45\u51faWindows API\u7a0b\u5e8f\u8bbe\u8ba1\uff1a\u6838\u5fc3\u7f16\u7a0b\u7bc7\u300b\u7b14\u8bb0-Chapter8-Windows\u5f02\u5e38\u5904\u7406"},"content":{"rendered":"<h2>\u7b2c8\u7ae0\u3000Windows\u5f02\u5e38\u5904\u7406<\/h2>\n<p>\u7a0b\u5e8f\u6267\u884c\u8fc7\u7a0b\u4e2d\u96be\u514d\u4f1a\u53d1\u751f\u9519\u8bef\u3002CPU\u8d1f\u8d23\u6355\u83b7\u7c7b\u4f3c\u4e8e\u8bbf\u95ee\u975e\u6cd5\u5185\u5b58\u5730\u5740\u6216\u8005\u9664\u6570\u4e3a0\u7684\u9519\u8bef\u4ee3\u7801&#xff0c;\u5e76\u629b\u51fa\u76f8\u5e94\u7684\u5f02\u5e38&#xff0c;\u7531CPU\u629b\u51fa\u7684\u5f02\u5e38\u90fd\u662f\u786c\u4ef6\u5f02\u5e38&#xff1b;\u64cd\u4f5c\u7cfb\u7edf\u548c\u5e94\u7528\u7a0b\u5e8f\u4e5f\u53ef\u4ee5\u629b\u51fa\u5f02\u5e38&#xff0c;\u8fd9\u7c7b\u5f02\u5e38\u79f0\u4e3a\u8f6f\u4ef6\u5f02\u5e38\u3002\u5f53\u5f02\u5e38&#xff08;\u5305\u62ec\u786c\u4ef6\u5f02\u5e38\u548c\u8f6f\u4ef6\u5f02\u5e38&#xff09;\u53d1\u751f\u540e&#xff0c;Windows\u6216\u5e94\u7528\u7a0b\u5e8f\u9488\u5bf9\u6240\u53d1\u751f\u9519\u8bef\u751f\u6210\u4e00\u6bb5\u5904\u7406\u4ee3\u7801&#xff0c;\u901a\u5e38\u79f0\u4e3a\u5f02\u5e38\u5904\u7406\u51fd\u6570\u6216\u5f02\u5e38\u5904\u7406\u7a0b\u5e8f\u3002<\/p>\n<p>\u53d1\u751f\u5f02\u5e38\u65f6&#xff0c;\u5982\u679c\u7a0b\u5e8f\u4e2d\u6ca1\u6709\u76f8\u5173\u7684\u5f02\u5e38\u5904\u7406\u51fd\u6570&#xff0c;Windows \u5c31\u4f1a\u7ec8\u6b62\u8fdb\u7a0b&#xff0c;\u4f9d\u6b21\u5f39\u51fa\u539f\u4e66\u7684\u56fe 8.1 \u6240\u793a\u7684\u4e24\u4e2a\u5bf9\u8bdd\u6846\u3002<\/p>\n<h3>8.1\u3000\u7ed3\u6784\u5316\u5f02\u5e38\u5904\u7406<\/h3>\n<h4>8.1.1\u3000try-except\u8bed\u53e5<\/h4>\n<p>\u53d1\u751f\u5f02\u5e38\u65f6&#xff0c;Windows\u5141\u8bb8\u5e94\u7528\u7a0b\u5e8f\u81ea\u884c\u5904\u7406\u8be5\u5f02\u5e38&#xff0c;\u5fae\u8f6f\u516c\u53f8\u5b9a\u4e49\u4e86try-except\u8bed\u53e5\u7528\u4e8e\u7ed3\u6784\u5316\u5f02\u5e38\u5904\u7406&#xff08;Structured Exception Handling&#xff0c;SEH&#xff09;&#xff1a;<\/p>\n<p>__try<br \/>\n{<br \/>\n     \/\/ \u53d7\u4fdd\u62a4\u8bed\u53e5<br \/>\n}<br \/>\n__except (\u5f02\u5e38\u8fc7\u6ee4\u8868\u8fbe\u5f0f)<br \/>\n{<br \/>\n     \/\/ \u5f02\u5e38\u5904\u7406\u8bed\u53e5<br \/>\n}<\/p>\n<p>\/\/ \u5176\u4ed6\u7a0b\u5e8f\u8bed\u53e5<\/p>\n<p>try\u5757\u4e2d\u5b58\u653e\u7684\u662f\u53d7\u4fdd\u62a4\u8bed\u53e5&#xff0c;except\u5757\u4e2d\u5b58\u653e\u7684\u662f\u5f02\u5e38\u5904\u7406\u8bed\u53e5&#xff08;\u5f02\u5e38\u5904\u7406\u7a0b\u5e8f&#xff09;\u3002\u5982\u679c\u6267\u884c\u53d7\u4fdd\u62a4\u8bed\u53e5\u53d1\u751f\u5f02\u5e38\u65f6&#xff0c;\u5219Windows\u4f1a\u628a\u5bf9\u7a0b\u5e8f\u7684\u63a7\u5236\u6743\u8f6c\u4ea4\u7ed9\u7a0b\u5e8f\u81ea\u8eab&#xff0c;\u5e76\u6839\u636e\u5f02\u5e38\u8fc7\u6ee4\u8868\u8fbe\u5f0f\u7684\u503c\u51b3\u5b9a\u662f\u5426\u6267\u884cexcept\u5757\u4e2d\u7684\u5f02\u5e38\u5904\u7406\u8bed\u53e5\u3002\u5982\u679c\u6267\u884c\u53d7\u4fdd\u62a4\u8bed\u53e5\u65f6\u6ca1\u6709\u53d1\u751f\u5f02\u5e38&#xff0c;\u5219\u6839\u672c\u4e0d\u4f1a\u6267\u884cexcept\u5757\u4e2d\u7684\u5f02\u5e38\u5904\u7406\u8bed\u53e5\u3002<\/p>\n<p>\u5f02\u5e38\u8fc7\u6ee4\u8868\u8fbe\u5f0f\u53ef\u4ee5\u662f\u4e00\u4e2a\u5e38\u91cf\u503c\u3001\u6761\u4ef6\u8868\u8fbe\u5f0f\u6216\u9017\u53f7\u8fd0\u7b97\u7b26&#xff0c;\u8fd8\u53ef\u4ee5\u662f\u4e00\u4e2a\u51fd\u6570\u8c03\u7528\u3002\u5f02\u5e38\u8fc7\u6ee4\u8868\u8fbe\u5f0f\u4e5f\u79f0\u4e3a\u5f02\u5e38\u8fc7\u6ee4\u7a0b\u5e8f&#xff0c;\u8be5\u8868\u8fbe\u5f0f\u8fd4\u56de\u7684\u503c\u7528\u4e8e\u786e\u5b9a\u5f02\u5e38\u7684\u5904\u7406\u65b9\u5f0f&#xff0c;\u8868\u8fbe\u5f0f\u7684\u503c\u53ca\u5176\u542b\u4e49\u5982\u88688.1\u6240\u793a\u3002<\/p>\n<p>\u88688.1<\/p>\n<table>\n<tr>\u8868\u8fbe\u5f0f\u7684\u503c\u542b\u4e49<\/tr>\n<tbody>\n<tr>\n<td>EXCEPTION_EXECUTE_HANDLER (1)<\/td>\n<td>\u5904\u7406\u8fd9\u4e2a\u5f02\u5e38&#xff0c;\u6267\u884cexcept\u5757\u4e2d\u7684\u5f02\u5e38\u5904\u7406\u8bed\u53e5&#xff0c;\u7136\u540e\u7ee7\u7eed\u6267\u884cexcept\u5757\u540e\u9762\u7684\u5176\u4ed6\u7a0b\u5e8f\u8bed\u53e5\u3002\u5982\u679c\u53d7\u4fdd\u62a4\u8bed\u53e5\u4e2d\u53d1\u751f\u5f02\u5e38\u7684\u8bed\u53e5\u540e\u9762\u8fd8\u6709\u5176\u4ed6\u8bed\u53e5&#xff0c;\u5219\u8fd9\u4e9b\u8bed\u53e5\u662f\u4e0d\u4f1a\u7ee7\u7eed\u6267\u884c\u7684&#xff0c;\u56e0\u4e3a\u4e00\u65e6\u4e00\u6761\u6307\u4ee4\u6267\u884c\u5931\u8d25\u540e\u7a0b\u5e8f\u5c31\u96be\u4ee5\u4fdd\u8bc1\u7ee7\u7eed\u7a33\u5b9a\u8fd0\u884c&#xff0c;\u4f8b\u5982\u6211\u4eec\u8c03\u7528\u4e00\u4e2a\u5185\u5b58\u5206\u914d\u51fd\u6570\u5931\u8d25&#xff0c;\u4e4b\u540e\u5bf9\u5185\u5b58\u6307\u9488\u7684\u64cd\u4f5c\u90fd\u4e0d\u5e94\u8be5\u6267\u884c&#xff0c;\u5426\u5219\u7a0b\u5e8f\u4f1a\u4e0d\u505c\u5730\u629b\u51fa\u5f02\u5e38<\/td>\n<\/tr>\n<tr>\n<td>EXCEPTION_CONTINUE_SEARCH (0)<\/td>\n<td>\u4e0d\u5904\u7406\u8be5\u5f02\u5e38&#xff0c;Windows\u7ee7\u7eed\u5411\u4e0a\u641c\u7d22\u4e0b\u4e00\u4e2a\u5177\u6709\u6700\u9ad8\u4f18\u5148\u7ea7\u7684\u5f02\u5e38\u5904\u7406\u7a0b\u5e8f&#xff08;\u4e0d\u4f1a\u6267\u884cexcept\u5757\u4e2d\u7684\u5f02\u5e38\u5904\u7406\u8bed\u53e5&#xff09;<\/td>\n<\/tr>\n<tr>\n<td>EXCEPTION_CONTINUE_EXECUTION (-1)<\/td>\n<td>\u6d88\u9664\u5f02\u5e38&#xff0c;\u91cd\u65b0\u6267\u884c\u53d1\u751f\u5f02\u5e38\u7684\u90a3\u6761\u8bed\u53e5&#xff08;\u4e0d\u4f1a\u6267\u884cexcept\u5757\u4e2d\u7684\u5f02\u5e38\u5904\u7406\u8bed\u53e5&#xff09;\u3002\u56e0\u4e3a\u6211\u4eec\u65e0\u6cd5\u4fdd\u8bc1\u6b63\u786e\u4fee\u590d\u53d1\u751f\u5f02\u5e38\u7684\u8bed\u53e5&#xff0c;\u6240\u4ee5\u8fd9\u53ef\u80fd\u4f1a\u5bfc\u81f4\u6b7b\u5faa\u73af&#xff0c;\u5373\u5728\u8ba1\u7b97\u5f02\u5e38\u8fc7\u6ee4\u8868\u8fbe\u5f0f\u7684\u503c\u548c\u91cd\u65b0\u6267\u884c\u51fa\u9519\u8bed\u53e5\u4e4b\u95f4\u65e0\u9650\u5faa\u73af&#xff0c;\u56e0\u6b64\u9700\u8981\u8c28\u614e\u4f7f\u7528EXCEPTION_CONTINUE_EXECUTION<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>\u4e0b\u9762\u770b\u51e0\u4e2a\u6709\u5173\u5f02\u5e38\u8fc7\u6ee4\u8868\u8fbe\u5f0f\u7684\u503cEXCEPTION_EXECUTE_HANDLER\u3001EXCEPTION_CONTINUE_SEARCH\u548cEXCEPTION_CONTINUE_EXECUTION\u7684\u793a\u4f8b\u3002<\/p>\n<p>\u4e0b\u9762\u7684\u51fd\u6570CalcHowManyDelimit\u7528\u4e8e\u8ba1\u7b97\u4e00\u4e2a\u5b57\u7b26\u4e32\u4e2d\u6307\u5b9a\u5b57\u7b26\u7684\u4e2a\u6570&#xff1a;<\/p>\n<p>int CalcHowManyDelimit(LPCTSTR lpStrToken, LPCTSTR lpStrDelimit)<br \/>\n{<br \/>\n     int nHowManyDelimit &#061; -1;           \/\/ \u8fd4\u56de\u22121\u8868\u793a\u5931\u8d25<br \/>\n     LPTSTR lpStrTokenTemp &#061; NULL;      \/\/ \u5047\u8bbe\u5206\u914d\u4e34\u65f6\u7f13\u51b2\u533a\u5931\u8d25<br \/>\n     LPTSTR lpToken &#061; NULL;              \/\/ \u6307\u5411\u88ab\u5206\u5272\u51fa\u90e8\u5206\u7684\u6307\u9488<br \/>\n     LPTSTR lpTokenNext &#061; NULL;         \/\/ \u5269\u4f59\u672a\u88ab\u5206\u89e3\u7684\u90e8\u5206\u6307\u9488<\/p>\n<p>     __try<br \/>\n     {<br \/>\n          \/\/ \u5206\u914d\u4e00\u5757\u4e34\u65f6\u7f13\u51b2\u533alpStrTokenTemp\u7528\u4e8e\u5b58\u653elpStrToken\u7684\u526f\u672c&#xff0c;\u56e0\u4e3a_tcstok_s\u4f1a\u7834\u574f\u6e90\u5b57\u7b26\u4e32<br \/>\n          lpStrTokenTemp &#061; new TCHAR[_tcslen(lpStrToken) &#043; 1];<br \/>\n          StringCchCopy (lpStrTokenTemp, _tcslen(lpStrToken) &#043; 1, lpStrToken);<\/p>\n<p>          \/\/ \u83b7\u53d6\u7b2c\u4e00\u4e2a\u5206\u9694\u7b26<br \/>\n          lpToken &#061; _tcstok_s(lpStrTokenTemp, lpStrDelimit, &amp;lpTokenNext);<br \/>\n          \/\/ \u5982\u679c\u7b2c\u4e00\u4e2a\u5206\u9694\u7b26\u662f\u5b57\u7b26\u4e32\u4e2d\u6700\u540e\u4e00\u4e2a\u5b57\u7b26<br \/>\n          if (lpTokenNext &#061;&#061; lpStrTokenTemp &#043; _tcslen(lpStrToken))<br \/>\n               nHowManyDelimit&#043;&#043;;<\/p>\n<p>          \/\/ \u5faa\u73af\u83b7\u53d6\u6240\u6709\u5206\u9694\u7b26<br \/>\n          while (lpToken !&#061; NULL)<br \/>\n          {<br \/>\n               nHowManyDelimit&#043;&#043;;<\/p>\n<p>               lpToken &#061; _tcstok_s(NULL, lpStrDelimit, &amp;lpTokenNext);<br \/>\n          }<br \/>\n     }<br \/>\n     __except (EXCEPTION_EXECUTE_HANDLER)<br \/>\n     {<br \/>\n     }<\/p>\n<p>     delete[]lpStrTokenTemp;<br \/>\n     return nHowManyDelimit;<br \/>\n}<\/p>\n<p>\u4e0a\u8ff0\u4ee3\u7801\u6709\u53ef\u80fd\u51fa\u9519\u7684\u5730\u65b9\u662f&#xff0c;\u8c03\u7528\u8005\u5728\u8c03\u7528CalcHowManyDelimit\u51fd\u6570\u65f6\u4f20\u5165\u4e86\u975e\u6cd5\u5185\u5b58\u5730\u5740\u7684\u5b57\u7b26\u4e32\u53c2\u6570&#xff0c;\u6216\u8005\u5206\u914d\u4e34\u65f6\u7f13\u51b2\u533a\u65f6\u53ef\u80fd\u51fa\u73b0\u5185\u5b58\u5206\u914d\u5931\u8d25\u7684\u60c5\u51b5&#xff0c;\u5176\u4ed6\u5730\u65b9\u51fa\u9519\u7684\u53ef\u80fd\u6027\u5f88\u5c0f\u3002\u4f8b\u5982\u8c03\u7528\u8005\u5728\u8c03\u7528CalcHowManyDelimit\u51fd\u6570\u65f6\u4f20\u5165\u4e86\u975e\u6cd5\u5185\u5b58\u5730\u5740\u7684\u5b57\u7b26\u4e32\u53c2\u6570lpStrToken&#xff0c;\u5f53\u6267\u884ctry\u5757\u4e2d\u7b2c\u4e00\u53e5\u4ee3\u7801\u7684_tcslen\u51fd\u6570\u65f6\u4f1a\u5f15\u53d1\u4e00\u4e2a\u8bbf\u95ee\u8fdd\u89c4&#xff0c;\u8fd9\u65f6Windows\u4f1a\u628a\u5bf9\u7a0b\u5e8f\u7684\u63a7\u5236\u6743\u8f6c\u4ea4\u7ed9\u7a0b\u5e8f\u81ea\u8eab&#xff0c;\u5f02\u5e38\u8fc7\u6ee4\u8868\u8fbe\u5f0f\u7684\u503c\u4e3aEXCEPTION_EXECUTE_HANDLER\u8868\u793a\u5904\u7406\u8fd9\u4e2a\u5f02\u5e38&#xff0c;\u4e8e\u662f\u6267\u884cexcept\u5757\u4e2d\u7684\u5f02\u5e38\u5904\u7406\u8bed\u53e5&#xff08;\u4ec0\u4e48\u4e5f\u6ca1\u505a&#xff09;&#xff0c;\u7136\u540e\u7ee7\u7eed\u6267\u884cexcept\u5757\u540e\u9762\u7684delete\u8bed\u53e5\u5e76\u8fd4\u56de\u22121&#xff0c;try\u5757\u4e2d\u7b2c\u4e00\u53e5\u540e\u9762\u7684\u4ee3\u7801\u4e0d\u4f1a\u6267\u884c\u3002\u8c03\u7528_tcslen\u51fd\u6570\u65f6\u4f1a\u5f15\u53d1\u4e00\u4e2a\u8bbf\u95ee\u8fdd\u89c4&#xff0c;\u56e0\u6b64new\u64cd\u4f5c\u7b26\u7684\u5185\u5b58\u5206\u914d\u5de5\u4f5c\u4e0d\u4f1a\u6267\u884c&#xff0c;lpStrTokenTemp\u7684\u503c\u4e3aNULL&#xff0c;\u4e3adelete\u64cd\u4f5c\u7b26\u4f20\u5165\u4e00\u4e2aNULL\u503c\u4e0d\u4f1a\u51fa\u9519\u3002<\/p>\n<p>\u63a5\u4e0b\u6765\u518d\u770b\u4e0b\u9762\u7684\u793a\u4f8b&#xff0c;\u5f02\u5e38\u8fc7\u6ee4\u8868\u8fbe\u5f0f\u53ef\u4ee5\u6307\u5b9a\u4e3a\u4e00\u4e2a\u51fd\u6570\u8c03\u7528&#xff08;\u5f02\u5e38\u8fc7\u6ee4\u51fd\u6570&#xff09;&#xff0c;\u6839\u636e\u4e0d\u540c\u7684\u60c5\u51b5\u8fd4\u56de\u4e0d\u540c\u7684\u503c&#xff1a;<\/p>\n<p>TCHAR g_szBuf[64] &#061; { 0 };<\/p>\n<p>VOID SomeFunc()<br \/>\n{<br \/>\n     LPTSTR lpszBuf &#061; NULL;<\/p>\n<p>     __try<br \/>\n     {<br \/>\n          *lpszBuf &#061; TEXT(&#039;A&#039;);<br \/>\n          \/\/ \u5176\u4ed6\u4ee3\u7801<br \/>\n     }<br \/>\n     __except (ExceptionFilterFunc(&amp;lpszBuf))<br \/>\n     {<br \/>\n          MessageBox(NULL, TEXT(&#034;\u53d1\u751f\u5f02\u5e38&#034;), TEXT(&#034;\u63d0\u793a&#034;), MB_OK);<br \/>\n     }<\/p>\n<p>     MessageBox(NULL, TEXT(&#034;\u51fd\u6570\u6267\u884c\u5b8c\u6bd5&#034;), TEXT(&#034;\u63d0\u793a&#034;), MB_OK);<br \/>\n}<\/p>\n<p>INT ExceptionFilterFunc(LPTSTR* ppStr)<br \/>\n{<br \/>\n     if (*ppStr &#061;&#061; NULL)<br \/>\n     {<br \/>\n          *ppStr &#061; g_szBuf;<br \/>\n          return EXCEPTION_CONTINUE_EXECUTION;<br \/>\n     }<\/p>\n<p>     return EXCEPTION_EXECUTE_HANDLER;<br \/>\n}<\/p>\n<p>\u5b57\u7b26\u4e32\u6307\u9488lpszBuf\u7684\u521d\u59cb\u503c\u4e3aNULL\u3002\u5f53\u6267\u884ctry\u5757\u4e2d\u7b2c\u4e00\u53e5\u4ee3\u7801\u65f6\u4f1a\u5f15\u53d1\u4e00\u4e2a\u5185\u5b58\u5199\u5165\u8fdd\u89c4&#xff0c;Windows\u628a\u5bf9\u7a0b\u5e8f\u7684\u63a7\u5236\u6743\u8f6c\u4ea4\u7ed9\u7a0b\u5e8f\u81ea\u8eab&#xff0c;\u5f02\u5e38\u8fc7\u6ee4\u8868\u8fbe\u5f0f\u662f\u4e00\u4e2aExceptionFilterFunc\u51fd\u6570\u8c03\u7528&#xff0c;\u4e8e\u662f\u6267\u884cExceptionFilterFunc\u51fd\u6570&#xff0c;\u5982\u679c\u53d1\u73b0\u4f20\u9012\u8fc7\u6765\u7684\u5b57\u7b26\u4e32\u6307\u9488lpszBuf\u7684\u503c\u4e3aNULL&#xff0c;\u5c31\u628a\u5168\u5c40\u53d8\u91cf\u7f13\u51b2\u533a\u7684\u5730\u5740g_szBuf\u8d4b\u7ed9lpszBuf&#xff0c;\u7136\u540e\u8fd4\u56deEXCEPTION_CONTINUE_EXECUTION\u8868\u793a\u91cd\u65b0\u6267\u884c\u53d1\u751f\u5f02\u5e38\u7684*lpszBuf &#061; TEXT(&#039;A&#039;);\u8bed\u53e5\u3002\u6211\u4eec\u63a8\u65adlpszBuf\u7684\u503c\u7b49\u4e8eg_szBuf&#xff0c;\u91cd\u65b0\u6267\u884c\u53ef\u4ee5\u6b63\u786e\u8fd0\u884c\u3002\u8fd9\u65f6lpszBuf\u7684\u503c\u786e\u5b9e\u7b49\u4e8e g_szBuf&#xff0c;\u4f46\u662ftry\u5757\u7684\u6c47\u7f16\u4ee3\u7801\u53ef\u80fd\u662f\u4e0b\u9762\u7684\u6837\u5b50&#xff1a;<\/p>\n<p>__try<br \/>\n00C9C56C  mov dword ptr [ebp-4], 0<br \/>\n00C9C573  mov eax, dword ptr [lpszBuf]<br \/>\n{<br \/>\n     *lpszBuf &#061; TEXT(&#039;A&#039;);<br \/>\n     00C9C576  mov ecx, 41h<br \/>\n     00C9C57B  mov word ptr [eax], cx<br \/>\n     \/\/ \u5176\u4ed6\u4ee3\u7801<br \/>\n}<\/p>\n<p>\u4ece\u6c47\u7f16\u4ee3\u7801\u53ef\u4ee5\u770b\u51fa&#xff0c;*lpszBuf &#061; TEXT(&#039;A&#039;);\u8bed\u53e5\u88ab\u6c47\u7f16\u4e3a\u4e24\u884c\u6c47\u7f16\u8bed\u53e5mov ecx,41h\u548cmov word ptr [eax],cx&#xff0c;\u91cd\u65b0\u6267\u884c\u7684\u662f00C9C57B\u4e00\u884c\u7684mov word ptr [eax],cx\u8bed\u53e5&#xff0c;lpszBuf\u6307\u9488\u786e\u5b9e\u4e0d\u4e3aNULL&#xff0c;\u4f46\u662fmov word ptr [eax],cx\u8bed\u53e5\u4e2d\u7684eax\u7684\u503c\u59cb\u7ec8\u4e3a0\u3002\u5b9e\u9645\u7ed3\u679c\u5c31\u662f&#xff1a;\u91cd\u65b0\u6267\u884cmov word ptr [eax],cx\u6307\u4ee4&#xff0c;\u8fd8\u662f\u4f1a\u53d1\u751f\u5199\u5165NULL\u5730\u5740\u8fd9\u6837\u7684\u8fdd\u89c4\u5f02\u5e38&#xff0c;\u4f46\u662f\u6267\u884cExceptionFilterFunc\u51fd\u6570&#xff0c;\u53d1\u73b0\u4f20\u9012\u8fc7\u6765\u7684\u5b57\u7b26\u4e32\u6307\u9488lpszBuf\u7684\u503c\u4e0d\u4e3aNULL&#xff0c;\u8fd4\u56deEXCEPTION_EXECUTE_HANDLER\u8868\u793a\u5904\u7406\u8fd9\u4e2a\u5f02\u5e38&#xff0c;\u4e8e\u662f\u6267\u884cexcept\u5757\u4e2d\u7684\u5f02\u5e38\u5904\u7406\u8bed\u53e5MessageBox&#xff0c;\u7136\u540e\u7ee7\u7eed\u6267\u884cexcept\u5757\u540e\u9762\u7684MessageBox\u8bed\u53e5&#xff0c;SomeFunc\u51fd\u6570\u8fd4\u56de\u3002<\/p>\n<p>\u5982\u679c\u628aExceptionFilterFunc\u51fd\u6570\u8fdb\u884c\u5982\u4e0b\u6240\u793a\u7684\u66f4\u6539&#xff0c;\u5c31\u4f1a\u5f62\u6210\u4e00\u4e2a\u6b7b\u5faa\u73af&#xff1a;<\/p>\n<p>INT ExceptionFilterFunc(LPTSTR* ppStr)<br \/>\n{<br \/>\n     if (*ppStr &#061;&#061; NULL)<br \/>\n          *ppStr &#061; g_szBuf;<\/p>\n<p>     return EXCEPTION_CONTINUE_EXECUTION;<br \/>\n}<\/p>\n<p>\u56e0\u4e3a\u6211\u4eec\u65e0\u6cd5\u4fdd\u8bc1\u6b63\u786e\u4fee\u590d\u53d1\u751f\u5f02\u5e38\u7684\u8bed\u53e5&#xff0c;\u6240\u4ee5\u8fd9\u53ef\u80fd\u4f1a\u5bfc\u81f4\u6b7b\u5faa\u73af&#xff0c;\u5373\u5728\u8ba1\u7b97\u5f02\u5e38\u8fc7\u6ee4\u8868\u8fbe\u5f0f\u7684\u503c\u548c\u91cd\u65b0\u6267\u884c\u51fa\u9519\u8bed\u53e5\u4e4b\u95f4\u65e0\u9650\u5faa\u73af&#xff0c;\u56e0\u6b64\u9700\u8981\u8c28\u614e\u4f7f\u7528EXCEPTION_CONTINUE_EXECUTION\u3002<\/p>\n<p>\u518d\u770b\u4e00\u4e2a\u4f8b\u5b50&#xff0c;\u4e0e\u4e0a\u9762\u7684\u4f8b\u5b50\u7c7b\u4f3c&#xff0c;\u53ea\u4e0d\u8fc7\u662f\u628aSomeFunc\u51fd\u6570\u4e2d\u7684try\u5757\u4e2d\u7684\u8bed\u53e5\u66f4\u6362\u4e3a\u4e00\u4e2a\u5177\u6709\u7ed3\u6784\u5316\u5f02\u5e38\u5904\u7406\u80fd\u529b\u7684\u51fd\u6570\u8c03\u7528&#xff1a;<\/p>\n<p>TCHAR g_szBuf[64] &#061; { 0 };<\/p>\n<p>VOID SomeFunc()<br \/>\n{<br \/>\n     LPTSTR lpszBuf &#061; NULL;<\/p>\n<p>     __try<br \/>\n     {<br \/>\n          FuncInTry(lpszBuf);<br \/>\n          \/\/ \u5176\u4ed6\u4ee3\u7801<br \/>\n     }<br \/>\n     __except (ExceptionFilterFunc(&amp;lpszBuf))<br \/>\n     {<br \/>\n          MessageBox(NULL, TEXT(&#034;\u53d1\u751f\u5f02\u5e38&#034;), TEXT(&#034;\u63d0\u793a&#034;), MB_OK);<br \/>\n     }<\/p>\n<p>     MessageBox(NULL, TEXT(&#034;\u51fd\u6570\u6267\u884c\u5b8c\u6bd5&#034;), TEXT(&#034;\u63d0\u793a&#034;), MB_OK);<br \/>\n}<\/p>\n<p>VOID FuncInTry(LPTSTR pStr)<br \/>\n{<br \/>\n     __try<br \/>\n     {<br \/>\n          *pStr &#061; TEXT(&#039;A&#039;);<br \/>\n          \/\/ \u5176\u4ed6\u4ee3\u7801<br \/>\n     }<br \/>\n     __except (EXCEPTION_CONTINUE_SEARCH)<br \/>\n     {<br \/>\n          \/\/ \u4e0d\u4f1a\u6267\u884c<br \/>\n     }<br \/>\n}<\/p>\n<p>INT ExceptionFilterFunc(LPTSTR* ppStr)<br \/>\n{<br \/>\n     if (*ppStr &#061;&#061; NULL)<br \/>\n     {<br \/>\n          *ppStr &#061; g_szBuf;<br \/>\n          return EXCEPTION_CONTINUE_EXECUTION;<br \/>\n     }<\/p>\n<p>     return EXCEPTION_EXECUTE_HANDLER;<br \/>\n}<\/p>\n<p>\u5f53\u6267\u884cSomeFunc\u51fd\u6570\u4e2d\u7684try\u5757\u4e2d\u7b2c\u4e00\u53e5\u4ee3\u7801\u65f6&#xff0c;\u8c03\u7528FuncInTry\u51fd\u6570\u5e76\u4f20\u5165\u4e00\u4e2aNULL\u6307\u9488&#xff0c;\u5728FuncInTry\u51fd\u6570\u5185\u90e8\u4f1a\u5f15\u53d1\u4e00\u4e2a\u5185\u5b58\u5199\u5165\u8fdd\u89c4\u5f02\u5e38&#xff0c;\u8fd9\u6837\u5c31\u4f1a\u8ba1\u7b97FuncInTry\u51fd\u6570\u4e2d\u5f02\u5e38\u8fc7\u6ee4\u8868\u8fbe\u5f0f\u7684\u503c&#xff0c;\u8fd9\u91cc\u662fEXCEPTION_CONTINUE_SEARCH&#xff0c;\u8be5\u5e38\u91cf\u8868\u793a\u7cfb\u7edf\u5c06\u5728\u8c03\u7528\u6808\u4e2d\u5411\u4e0a\u67e5\u627e\u524d\u4e00\u4e2a\u5305\u542bexcept\u5757\u7684try\u5757&#xff0c;\u5e76\u8ba1\u7b97\u8fd9\u4e2atry\u5757\u5bf9\u5e94\u7684\u5f02\u5e38\u8fc7\u6ee4\u8868\u8fbe\u5f0f\u3002\u7b2c1\u6b21\u6267\u884cExceptionFilterFunc\u51fd\u6570\u4f1a\u8fd4\u56deEXCEPTION_CONTINUE_EXECUTION&#xff0c;\u8868\u793a\u91cd\u65b0\u6267\u884cFuncInTry\u51fd\u6570\u4e2d\u7684\u8d4b\u503c\u8bed\u53e5&#xff0c;ExceptionFilterFunc\u51fd\u6570\u4e2d\u5bf9\u6307\u9488\u503c\u7684\u4fee\u6539\u4e0d\u4f1a\u5f71\u54cdFuncInTry\u51fd\u6570\u4e2d\u7684pStr\u53d8\u91cf&#xff0c;\u56e0\u6b64\u91cd\u65b0\u6267\u884cFuncInTry\u51fd\u6570\u4e2d\u7684\u8d4b\u503c\u8bed\u53e5\u53ea\u4f1a\u5bfc\u81f4\u540c\u4e00\u4e2a\u5f02\u5e38\u518d\u6b21\u53d1\u751f\u3002\u7b2c2\u6b21\u6267\u884cExceptionFilterFunc\u51fd\u6570\u4f1a\u8fd4\u56deEXCEPTION_EXECUTE_HANDLER\u8868\u793a\u5904\u7406\u8be5\u5f02\u5e38&#xff0c;\u4e8e\u662f\u6267\u884cSomeFunc\u51fd\u6570\u4e2d\u7684except\u5757\u4e2d\u7684\u5f02\u5e38\u5904\u7406\u8bed\u53e5MessageBox&#xff0c;\u7136\u540e\u7ee7\u7eed\u6267\u884cexcept\u5757\u540e\u9762\u7684MessageBox\u8bed\u53e5&#xff0c;SomeFunc\u51fd\u6570\u8fd4\u56de\u3002<\/p>\n<h4>8.1.2\u3000GetExceptionCode\u548cGetExceptionInformation<\/h4>\n<p>\u5982\u679c\u5e94\u7528\u7a0b\u5e8f\u65e0\u6cd5\u4ece\u5f02\u5e38\u4e2d\u5b8c\u5168\u6062\u590d&#xff0c;\u6211\u4eec\u53ef\u4ee5\u9009\u62e9\u663e\u793a\u76f8\u5173\u9519\u8bef\u4fe1\u606f\u5e76\u6355\u83b7\u5e94\u7528\u7a0b\u5e8f\u7684\u5185\u90e8\u72b6\u6001&#xff0c;\u4ece\u800c\u5e2e\u52a9\u8bca\u65ad\u95ee\u9898\u3002\u7ed3\u6784\u5316\u5f02\u5e38\u5904\u7406\u63d0\u4f9b\u4e86\u4e24\u4e2a\u53ef\u4ee5\u4e0etry-except\u8bed\u53e5\u4e00\u8d77\u4f7f\u7528\u7684\u5185\u90e8\u51fd\u6570&#xff1a;GetExceptionCode\u548cGetExceptionInformation\u3002<\/p>\n<p>GetExceptionCode\u5b8f\u7528\u4e8e\u83b7\u53d6\u521a\u521a\u53d1\u751f\u7684\u5f02\u5e38\u7684\u5f02\u5e38\u4ee3\u7801&#xff0c;\u53ea\u80fd\u5728\u5f02\u5e38\u8fc7\u6ee4\u8868\u8fbe\u5f0f\u6216\u5f02\u5e38\u5904\u7406\u7a0b\u5e8f\u5757\u5185\u8c03\u7528GetExceptionCode\u3002\u5982\u679c\u5f02\u5e38\u8fc7\u6ee4\u8868\u8fbe\u5f0f\u8c03\u7528\u7684\u662f\u4e00\u4e2a\u51fd\u6570&#xff0c;\u5219\u4e0d\u80fd\u5728\u5f02\u5e38\u8fc7\u6ee4\u51fd\u6570\u4e2d\u8c03\u7528GetExceptionCode&#xff0c;\u4f46\u662fGetExceptionCode\u7684\u8fd4\u56de\u503c\u53ef\u4ee5\u4f5c\u4e3a\u53c2\u6570\u4f20\u9012\u7ed9\u5f02\u5e38\u8fc7\u6ee4\u51fd\u6570\u3002GetExceptionCode\u5b8f\u7684\u76f8\u5173\u5b9a\u4e49\u5982\u4e0b&#xff1a;<\/p>\n<p>DWORD GetExceptionCode();<br \/>\n#define GetExceptionCode  _exception_code<br \/>\nunsigned long __cdecl _exception_code(void);<\/p>\n<p>GetExceptionCode\u8fd4\u56de\u4e00\u4e2aDWORD\u7c7b\u578b\u7684\u5f02\u5e38\u4ee3\u7801&#xff0c;\u5e38\u89c1\u7684\u5f02\u5e38\u4ee3\u7801\u53ca\u542b\u4e49\u5982\u88688.2\u6240\u793a\u3002<\/p>\n<p>\u88688.2<\/p>\n<p>|<br \/>\n| \u5f02\u5e38\u5206\u7c7b | \u5f02\u5e38\u4ee3\u7801 | \u542b\u4e49 |<br \/>\n| \u4e0e\u5185\u5b58\u76f8\u5173\u7684\u5f02\u5e38\u4ee3\u7801 | EXCEPTION_ACCESS_VIOLATION(0xC0000005) | \u8bd5\u56fe\u8bfb\u53d6\u6216\u5199\u5165\u5bf9\u5176\u6ca1\u6709\u9002\u5f53\u8bbf\u95ee\u6743\u9650\u7684\u5185\u5b58\u5730\u5740 |<br \/>\n| \u4e0e\u5185\u5b58\u76f8\u5173\u7684\u5f02\u5e38\u4ee3\u7801 | EXCEPTION_DATATYPE_MISALIGNMENT(0x80000002) | \u8bd5\u56fe\u4ece\u6ca1\u6709\u63d0\u4f9b\u81ea\u52a8\u5bf9\u9f50\u673a\u5236\u7684\u786c\u4ef6\u4e2d\u8bfb\u5165\u6ca1\u6709\u5bf9\u9f50\u7684\u6570\u636e\u3002\u4f8b\u5982&#xff0c;16\u4f4d\u6570\u636e\u5fc5\u987b\u57282\u5b57\u8282\u8fb9\u754c\u5bf9\u9f50&#xff0c;32\u4f4d\u6570\u636e\u5fc5\u987b\u57284\u5b57\u8282\u8fb9\u754c\u5bf9\u9f50&#xff0c;\u4ee5\u6b64\u7c7b\u63a8 |<br \/>\n| \u4e0e\u5185\u5b58\u76f8\u5173\u7684\u5f02\u5e38\u4ee3\u7801 | EXCEPTION_ARRAY_BOUNDS_EXCEEDED(0xC000008C) | \u5728\u652f\u6301\u8fb9\u754c\u68c0\u67e5\u7684\u786c\u4ef6\u4e0a\u8bbf\u95ee\u8d8a\u754c\u7684\u6570\u7ec4\u5143\u7d20 |<br \/>\n| \u4e0e\u5185\u5b58\u76f8\u5173\u7684\u5f02\u5e38\u4ee3\u7801 | EXCEPTION_STACK_OVERFLOW(0xC00000FD) | \u7528\u5149\u4e86\u7cfb\u7edf\u5206\u914d\u7ed9\u5b83\u7684\u6808\u7a7a\u95f4 |<br \/>\n| \u4e0e\u5185\u5b58\u76f8\u5173\u7684\u5f02\u5e38\u4ee3\u7801 | EXCEPTION_PRIV_INSTRUCTION(0xC0000096) | \u8bd5\u56fe\u6267\u884c\u5728\u5f53\u524d\u673a\u5668\u6a21\u5f0f\u4e0b\u4e0d\u5141\u8bb8\u6267\u884c\u7684\u6307\u4ee4 |<br \/>\n| \u4e0e\u5185\u5b58\u76f8\u5173\u7684\u5f02\u5e38\u4ee3\u7801 | EXCEPTION_ILLEGAL_INSTRUCTION(0xC000001D) | \u8bd5\u56fe\u6267\u884c\u4e00\u6761\u975e\u6cd5\u6307\u4ee4 |<br \/>\n| \u4e0e\u5f02\u5e38\u672c\u8eab\u76f8\u5173\u7684\u5f02\u5e38\u4ee3\u7801 | EXCEPTION_NONCONTINUABLE_EXCEPTION(0xC0000025) | \u5f02\u5e38\u8fc7\u6ee4\u8868\u8fbe\u5f0f\u8fd4\u56deEXCEPTION_CONTINUE_EXECUTION&#xff0c;\u4f46\u662f\u5b9e\u9645\u4e0a\u8fd9\u4e2a\u7c7b\u578b\u7684\u5f02\u5e38\u53d1\u751f\u540e\u7cfb\u7edf\u5e76\u4e0d\u5141\u8bb8\u7a0b\u5e8f\u7ee7\u7eed\u6267\u884c |<br \/>\n| \u4e0e\u5f02\u5e38\u672c\u8eab\u76f8\u5173\u7684\u5f02\u5e38\u4ee3\u7801 | EXCEPTION_INVALID_DISPOSITION(0xC0000026) | \u5f02\u5e38\u8fc7\u6ee4\u8868\u8fbe\u5f0f\u8fd4\u56deEXCEPTION_EXECUTE_HANDLER\u3001EXCEPTION_CONTINUE_SEARCH\u548cEXCEPTION_CONTINUE_EXECUTION\u4ee5\u5916\u7684\u503c |<br \/>\n| \u4e0e\u8c03\u8bd5\u76f8\u5173\u7684\u5f02\u5e38\u4ee3\u7801 | EXCEPTION_BREAKPOINT(0x80000003) | \u9047\u5230int 3\u65ad\u70b9 |<br \/>\n| \u4e0e\u8c03\u8bd5\u76f8\u5173\u7684\u5f02\u5e38\u4ee3\u7801 | EXCEPTION_SINGLE_STEP(0x80000004) | \u5355\u6b65\u4e2d\u65ad |<br \/>\n| \u4e0e\u6574\u578b\u76f8\u5173\u7684\u5f02\u5e38\u4ee3\u7801 | EXCEPTION_INT_DIVIDE_BY_ZERO(0xC0000094) | \u7ebf\u7a0b\u8bd5\u56fe\u5728\u6574\u6570\u9664\u6cd5\u8fd0\u7b97\u4e2d\u4ee50\u4f5c\u4e3a\u9664\u6570 |<br \/>\n| \u4e0e\u6574\u578b\u76f8\u5173\u7684\u5f02\u5e38\u4ee3\u7801 | EXCEPTION_INT_OVERFLOW(0xC0000095) | \u6574\u578b\u8fd0\u7b97\u7684\u7ed3\u679c\u8d85\u51fa\u4e86\u8be5\u7c7b\u578b\u89c4\u5b9a\u7684\u8303\u56f4 |<\/p>\n<p>\u5f02\u5e38\u4ee3\u7801\u503c\u7684\u5b9a\u4e49\u6709\u4e00\u5b9a\u89c4\u5219&#xff0c;\u6bcf\u4e2a\u5f02\u5e38\u4ee3\u7801\u503c\u5212\u5206\u4e3a\u88688.3\u6240\u793a\u7684\u51e0\u4e2a\u90e8\u5206&#xff08;Customer\u8868\u793a\u7528\u6237\u81ea\u5b9a\u4e49&#xff09;\u3002<\/p>\n<p>\u88688.3<\/p>\n<table>\n<tr>\u4f4d\u542b\u4e49\u503c<\/tr>\n<tbody>\n<tr>\n<td>31&#xff5e;30<\/td>\n<td>\u4e25\u91cd\u6027<\/td>\n<td>0&#061;Success;1&#061;Informational;2&#061;Warning;3&#061;error<\/td>\n<\/tr>\n<tr>\n<td>29<\/td>\n<td>Microsoft\/Customer<\/td>\n<td>0&#061;Microsoft\u6240\u5b9a\u4e49\u7684\u4ee3\u7801;1&#061;Customer\u6240\u5b9a\u4e49\u7684\u4ee3\u7801<\/td>\n<\/tr>\n<tr>\n<td>28<\/td>\n<td>\u4fdd\u7559\u4f4d<\/td>\n<td>\u603b\u4e3a0<\/td>\n<\/tr>\n<tr>\n<td>27&#xff5e;16<\/td>\n<td>\u8bbe\u5907\u4ee3\u7801<\/td>\n<td>\u524d256\u4e2a\u503c\u4e3aMicrosoft\u6240\u4fdd\u7559<\/td>\n<\/tr>\n<tr>\n<td>15&#xff5e;0<\/td>\n<td>\u5f02\u5e38\u4ee3\u7801<\/td>\n<td>\u7531Microsoft\/Customer\u5b9a\u4e49\u7684\u5f02\u5e38\u4ee3\u7801<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>\u4f8b\u5982EXCEPTION_ACCESS_VIOLATION\u7684\u503c\u4e3a0xC0000005&#xff0c;\u5bf9\u5e94\u7684\u4e8c\u8fdb\u5236\u5f62\u5f0f\u5982\u4e0b&#xff1a;<\/p>\n<p>11 0 0 000000000000 0000000000000101<\/p>\n<p>\u7b2c30\u4f4d\u548c\u7b2c31\u4f4d\u90fd\u88ab\u8bbe\u4e3a1&#xff0c;\u8868\u793a\u8fd9\u662f\u4e00\u4e2a\u4e25\u91cd\u9519\u8bef&#xff0c;\u7ebf\u7a0b\u5728\u8fd9\u79cd\u60c5\u51b5\u4e0d\u80fd\u7ee7\u7eed\u5f80\u4e0b\u6267\u884c&#xff1b;\u7b2c29\u4f4d\u4e3a0&#xff0c;\u8868\u793a\u8fd9\u4e2a\u5f02\u5e38\u4ee3\u7801\u7531Microsoft\u5b9a\u4e49&#xff1b;\u7b2c0&#xff5e;15\u4f4d\u7684\u503c\u4e3a5&#xff0c;\u8868\u793aMicrosoft\u5c06\u8bbf\u95ee\u8fdd\u89c4\u5f02\u5e38\u4ee3\u7801\u5b9a\u4e49\u4e3a5\u3002<\/p>\n<p>\u4f7f\u7528GetExceptionCode\u7684\u793a\u4f8b\u5982\u4e0b&#xff1a;<\/p>\n<p>VOID SomeFunc()<br \/>\n{<br \/>\n     int n &#061; 0;<\/p>\n<p>     __try<br \/>\n     {<br \/>\n          int nTemp &#061; 10;<br \/>\n          nTemp \/&#061; n;<br \/>\n     }<br \/>\n     __except ((GetExceptionCode() &#061;&#061; EXCEPTION_ACCESS_VIOLATION ||<br \/>\n          GetExceptionCode() &#061;&#061; EXCEPTION_INT_DIVIDE_BY_ZERO) ?<br \/>\n          EXCEPTION_EXECUTE_HANDLER : EXCEPTION_CONTINUE_SEARCH)<br \/>\n     {<br \/>\n          switch (GetExceptionCode())<br \/>\n          {<br \/>\n          case EXCEPTION_ACCESS_VIOLATION:<br \/>\n               \/\/ \u5904\u7406\u8bbf\u95ee\u8fdd\u89c4<br \/>\n               MessageBox(NULL, TEXT(&#034;\u8bbf\u95ee\u8fdd\u89c4&#034;), TEXT(&#034;\u63d0\u793a&#034;), MB_OK);<br \/>\n               break;<\/p>\n<p>          case EXCEPTION_INT_DIVIDE_BY_ZERO:<br \/>\n               \/\/ \u5904\u7406\u9664\u96f6\u9519\u8bef<br \/>\n               MessageBox(NULL, TEXT(&#034;\u9664\u96f6\u9519\u8bef&#034;), TEXT(&#034;\u63d0\u793a&#034;), MB_OK);<br \/>\n               break;<br \/>\n          }<br \/>\n     }<\/p>\n<p>     MessageBox(NULL, TEXT(&#034;\u51fd\u6570\u6267\u884c\u5b8c\u6bd5&#034;), TEXT(&#034;\u63d0\u793a&#034;), MB_OK);<br \/>\n}<\/p>\n<p>GetExceptionInformation\u5b8f\u7528\u4e8e\u83b7\u53d6\u521a\u521a\u53d1\u751f\u7684\u5f02\u5e38\u7684\u76f8\u5173\u4fe1\u606f&#xff0c;\u53ea\u80fd\u5728\u5f02\u5e38\u8fc7\u6ee4\u8868\u8fbe\u5f0f\u4e2d\u8c03\u7528\u8be5\u5b8f&#xff0c;\u5982\u679c\u5f02\u5e38\u8fc7\u6ee4\u8868\u8fbe\u5f0f\u8c03\u7528\u7684\u662f\u4e00\u4e2a\u51fd\u6570&#xff0c;\u4e0d\u80fd\u5728\u5f02\u5e38\u8fc7\u6ee4\u51fd\u6570\u4e2d\u8c03\u7528\u8be5\u5b8f&#xff0c;\u4f46\u662f\u8be5\u5b8f\u7684\u8fd4\u56de\u503c\u53ef\u4ee5\u4f5c\u4e3a\u53c2\u6570\u4f20\u9012\u7ed9\u5f02\u5e38\u8fc7\u6ee4\u51fd\u6570\u3002GetExceptionInformation\u5b8f\u7684\u76f8\u5173\u5b9a\u4e49\u5982\u4e0b&#xff1a;<\/p>\n<p>LPEXCEPTION_POINTERS GetExceptionInformation();<br \/>\n#define GetExceptionInformation (struct _EXCEPTION_POINTERS*)_exception_info<br \/>\nvoid* __cdecl _exception_info();<\/p>\n<p>GetExceptionInformation\u8fd4\u56de\u4e00\u4e2a\u6307\u5411EXCEPTION_POINTERS\u7ed3\u6784\u7684\u6307\u9488\u3002EXCEPTION_POINTERS\u7ed3\u6784\u5728winnt.h\u5934\u6587\u4ef6\u4e2d\u5b9a\u4e49\u5982\u4e0b&#xff1a;<\/p>\n<p>typedef struct _EXCEPTION_POINTERS {<br \/>\n     PEXCEPTION_RECORD   ExceptionRecord; \/\/ \u6307\u5411\u5305\u542b\u5f02\u5e38\u4fe1\u606f\u7684EXCEPTION_RECORD\u7ed3\u6784\u7684\u6307\u9488<br \/>\n     PCONTEXT              ContextRecord;       \/\/ \u6307\u5411\u5305\u542b\u7ebf\u7a0b\u73af\u5883\u7684CONTEXT\u7ed3\u6784\u7684\u6307\u9488<br \/>\n} EXCEPTION_POINTERS, * PEXCEPTION_POINTERS;<\/p>\n<p>EXCEPTION_RECORD\u7ed3\u6784\u548cCONTEXT\u7ed3\u6784\u7684\u542b\u4e49\u57284.6\u8282\u4e2d\u5df2\u7ecf\u4ecb\u7ecd\u8fc7\u3002\u4e4b\u6240\u4ee5\u53ea\u80fd\u5728\u5f02\u5e38\u8fc7\u6ee4\u8868\u8fbe\u5f0f\u4e2d\u8c03\u7528GetExceptionInformation&#xff0c;\u662f\u56e0\u4e3a\u6307\u5411EXCEPTION_RECORD\u7ed3\u6784\u7684\u6307\u9488\u548c\u6307\u5411CONTEXT\u7ed3\u6784\u7684\u6307\u9488\u4f4d\u4e8e\u6808\u4e0a&#xff0c;\u5728\u628a\u63a7\u5236\u6743\u8f6c\u4ea4\u7ed9\u5f02\u5e38\u5904\u7406\u7a0b\u5e8f\u540e&#xff0c;\u8fd9\u4e9b\u6808\u4e0a\u7684\u6570\u636e\u7ed3\u6784\u5c31\u4f1a\u88ab\u9500\u6bc1\u3002<\/p>\n<p>EXCEPTION_RECORD\u7ed3\u6784\u6709\u51e0\u4e2a\u5b57\u6bb5\u5728\u524d\u9762\u6ca1\u6709\u4ecb\u7ecd&#xff1a;<\/p>\n<p>typedef struct _EXCEPTION_RECORD {<br \/>\n     DWORD                        ExceptionCode;      \/\/ \u5f02\u5e38\u4ee3\u7801<br \/>\n     DWORD                        ExceptionFlags;    \/\/ \u5f02\u5e38\u6807\u5fd7<br \/>\n     struct _EXCEPTION_RECORD* ExceptionRecord;<br \/>\n     PVOID                        ExceptionAddress;  \/\/ \u53d1\u751f\u5f02\u5e38\u7684\u5730\u5740<br \/>\n     DWORD                        NumberParameters;<br \/>\n     ULONG_PTR                   ExceptionInformation[EXCEPTION_MAXIMUM_PARAMETERS];<br \/>\n} EXCEPTION_RECORD, * PEXCEPTION_RECORD;<\/p>\n<ul>\n<li>\n<p>ExceptionFlags\u5b57\u6bb5\u662f\u5f02\u5e38\u6807\u5fd7&#xff0c;\u8be5\u5b57\u6bb5\u53ef\u4ee5\u8bbe\u7f6e\u4e3a0\u8868\u793a\u7a0b\u5e8f\u53ef\u7ee7\u7eed\u6267\u884c\u7684\u5f02\u5e38&#xff0c;\u4e5f\u53ef\u4ee5\u8bbe\u7f6e\u4e3aEXCEPTION_NONCONTINUABLE\u8868\u793a\u7a0b\u5e8f\u4e0d\u53ef\u7ee7\u7eed\u6267\u884c\u7684\u5f02\u5e38&#xff0c;\u5728\u4e0d\u53ef\u7ee7\u7eed\u7684\u5f02\u5e38\u53d1\u751f\u540e\u7ee7\u7eed\u6267\u884c\u7a0b\u5e8f\u4f1a\u5bfc\u81f4\u53d1\u751fEXCEPTION_NONCONTINUABLE_EXCEPTION\u5f02\u5e38\u3002<\/p>\n<\/li>\n<li>\n<p>\u5982\u679c\u53d1\u751f\u5d4c\u5957\u5f02\u5e38\u65f6&#xff0c;\u5219ExceptionRecord\u5b57\u6bb5\u662f\u4e00\u4e2a\u6307\u5411EXCEPTION_RECORD\u7ed3\u6784\u7684\u6307\u9488&#xff0c;\u5176\u4e2d\u5305\u542b\u53e6\u4e00\u4e2a\u5f02\u5e38\u7684\u5f02\u5e38\u4fe1\u606f&#xff1b;\u5982\u679c\u6ca1\u6709\u53d1\u751f\u5d4c\u5957\u5f02\u5e38&#xff0c;\u5219\u8be5\u5b57\u6bb5\u4e3aNULL\u3002<\/p>\n<\/li>\n<li>\n<p>NumberParameters\u5b57\u6bb5\u8868\u793a\u4e0e\u5f02\u5e38\u5173\u8054\u7684\u53c2\u6570\u4e2a\u6570&#xff0c;\u5373ExceptionInformation\u6570\u7ec4\u4e2d\u6570\u7ec4\u5143\u7d20\u7684\u4e2a\u6570&#xff0c;\u6700\u591a\u4e3aEXCEPTION_MAXIMUM_PARAMETERS(15)\u4e2a&#xff0c;\u8be5\u5b57\u6bb5\u7684\u503c\u901a\u5e38\u4e3a0\u3002<\/p>\n<\/li>\n<li>\n<p>ExceptionInformation\u6570\u7ec4\u662f\u4e00\u7ec4\u63cf\u8ff0\u5f02\u5e38\u7684\u9644\u52a0\u53c2\u6570&#xff0c;\u8be5\u5b57\u6bb5\u7684\u503c\u901a\u5e38\u4e3aNULL\u3002<\/p>\n<\/li>\n<\/ul>\n<p>EXCEPTION_RECORD\u7ed3\u6784\u7684\u6700\u540e\u4e24\u4e2a\u5b57\u6bb5&#xff08;NumberParameters\u548cExceptionInformation&#xff09;\u63d0\u4f9b\u4e86\u5173\u4e8e\u5f02\u5e38\u7684\u9644\u52a0\u4fe1\u606f&#xff0c;\u76ee\u524d\u53ea\u6709EXCEPTION_ACCESS_VIOLATION\u548cEXCEPTION_IN_PAGE_ERROR\u5f02\u5e38\u63d0\u4f9b\u4e86\u9644\u52a0\u4fe1\u606f&#xff0c;\u5176\u4ed6\u6240\u6709\u5f02\u5e38\u7684NumberParameters\u503c\u5747\u4e3a0&#xff0c;\u5982\u88688.4\u6240\u793a\u3002<\/p>\n<p>\u88688.4<\/p>\n<table>\n<tr>\u5f02\u5e38\u4ee3\u7801\u6570\u7ec4\u5143\u7d20\u542b\u4e49<\/tr>\n<tbody>\n<tr>\n<td>EXCEPTION_ACCESS_VIOLATION<\/td>\n<td>ExceptionInformation[0]\u5305\u542b\u4e00\u4e2a\u8bfb\u5199\u6807\u5fd7&#xff0c;\u6307\u51fa\u5f15\u53d1\u8fd9\u4e2a\u975e\u6cd5\u8bbf\u95ee\u7684\u64cd\u4f5c\u7c7b\u578b&#xff0c;\u8be5\u503c\u4e3a0\u8868\u793a\u7ebf\u7a0b\u8bd5\u56fe\u8bfb\u53d6\u4e0d\u53ef\u8bbf\u95ee\u7684\u5185\u5b58\u5730\u5740&#xff0c;\u8be5\u503c\u4e3a1\u8868\u793a\u7ebf\u7a0b\u8bd5\u56fe\u5199\u5165\u4e0d\u53ef\u8bbf\u95ee\u7684\u5185\u5b58\u5730\u5740\u3002\u5f53\u6570\u636e\u6267\u884c\u4fdd\u62a4&#xff08;Data Execution Prevention&#xff0c;DEP&#xff09;\u68c0\u6d4b\u5230\u7ebf\u7a0b\u6267\u884c\u6ca1\u6709\u53ef\u6267\u884c\u6743\u9650\u7684\u5185\u5b58\u9875\u4e2d\u7684\u4ee3\u7801\u65f6&#xff0c;\u4e5f\u4f1a\u629b\u51faEXCEPTION_ACCESS_VIOLATION\u5f02\u5e38&#xff0c;\u540c\u65f6ExceptionInformation[0]\u7684\u503c\u88ab\u8bbe\u7f6e\u4e3a8\u3002ExceptionInformation[1]\u8868\u793a\u4e0d\u53ef\u8bbf\u95ee\u6570\u636e\u7684\u5185\u5b58\u5730\u5740<\/td>\n<\/tr>\n<tr>\n<td>EXCEPTION_IN_PAGE_ERROR<\/td>\n<td>ExceptionInformation[0]\u7684\u542b\u4e49\u4e0eEXCEPTION_ACCESS_VIOLATION\u76f8\u540c\u3002ExceptionInformation[1]\u540c\u6837\u8868\u793a\u4e0d\u53ef\u8bbf\u95ee\u6570\u636e\u7684\u5185\u5b58\u5730\u5740\u3002ExceptionInformation[2]\u8868\u793a\u5bfc\u81f4\u5f02\u5e38\u7684NTSTATUS\u4ee3\u7801<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>\u5982\u679c\u9700\u8981\u5728\u5f02\u5e38\u5904\u7406\u7a0b\u5e8f\u4e2d\u4f7f\u7528EXCEPTION_RECORD\u7ed3\u6784\u548cCONTEXT\u7ed3\u6784&#xff0c;\u53ef\u4ee5\u6309\u5982\u4e0b\u65b9\u5f0f\u4f7f\u7528&#xff1a;<\/p>\n<p>VOID SomeFunc()<br \/>\n{<br \/>\n     EXCEPTION_RECORD ExceptionRecord;<br \/>\n     CONTEXT ContextRecord;<\/p>\n<p>     __try<br \/>\n     {<br \/>\n     }<br \/>\n     __except (ExceptionRecord &#061; *((GetExceptionInformation())-&gt;ExceptionRecord),<br \/>\n          ContextRecord &#061; *((GetExceptionInformation())-&gt;ContextRecord), EXCEPTION_EXECUTE_HANDLER)<br \/>\n     {<br \/>\n          \/\/ \u4f7f\u7528EXCEPTION_RECORD\u7ed3\u6784\u548cCONTEXT\u7ed3\u6784<br \/>\n     }<\/p>\n<p>     \/\/ \u5176\u4ed6\u4ee3\u7801<br \/>\n}<\/p>\n<p>\u4f7f\u7528GetExceptionInformation\u7684\u793a\u4f8b\u5982\u4e0b&#xff1a;<\/p>\n<p>VOID SomeFunc()<br \/>\n{<br \/>\n     __try<br \/>\n     {<br \/>\n          \/\/ \u4ee3\u7801<br \/>\n     }<br \/>\n     __except (ExceptionFilterFunc(GetExceptionInformation()))<br \/>\n     {<br \/>\n          \/\/ \u4ee3\u7801<br \/>\n     }<\/p>\n<p>     \/\/ \u4ee3\u7801<br \/>\n}<\/p>\n<p>INT ExceptionFilterFunc(LPEXCEPTION_POINTERS lpExceptionPointers)<br \/>\n{<br \/>\n     TCHAR szBuf[256] &#061; { 0 };<\/p>\n<p>     wsprintf(szBuf, TEXT(&#034;\u5f02\u5e38\u5730\u5740&#xff1a;0x%p&#xff0c;\u5f02\u5e38\u4ee3\u7801&#xff1a;0x%X&#034;),<br \/>\n          lpExceptionPointers-&gt;ExceptionRecord-&gt;ExceptionAddress,<br \/>\n          lpExceptionPointers-&gt;ExceptionRecord-&gt;ExceptionCode);<br \/>\n     MessageBox(NULL, szBuf, TEXT(&#034;\u63d0\u793a&#034;), MB_OK);<\/p>\n<p>     return EXCEPTION_EXECUTE_HANDLER;<br \/>\n}<\/p>\n<h4>8.1.3\u3000\u5229\u7528\u7ed3\u6784\u5316\u5f02\u5e38\u5904\u7406\u8fdb\u884c\u53cd\u8c03\u8bd5<\/h4>\n<p>\u6240\u6709\u5f02\u5e38\u5904\u7406\u90fd\u4ece\u5185\u6838\u5e95\u5c42\u7684\u5f02\u5e38\u5904\u7406\u7a0b\u5e8f\u5f00\u59cb&#xff0c;\u5e95\u5c42\u5f02\u5e38\u5904\u7406\u7a0b\u5e8f\u8c03\u7528\u7528\u6237\u5c42\u7684\u5f02\u5e38\u5904\u7406\u7a0b\u5e8f&#xff08;\u5982\u679c\u6709&#xff09;\u3002\u7a0b\u5e8f\u4e2d\u7684\u6bcf\u4e2a\u51fd\u6570\u90fd\u53ef\u4ee5\u5177\u6709\u81ea\u5df1\u7684\u5f02\u5e38\u5904\u7406\u7a0b\u5e8f&#xff0c;\u8fd9\u6b63\u662f\u7ed3\u6784\u5316\u5f02\u5e38\u5904\u7406\u540d\u79f0\u4e2d\u7ed3\u6784\u5316\u7684\u542b\u4e49&#xff0c;\u968f\u7740\u5c42\u5c42\u51fd\u6570\u8c03\u7528&#xff0c;\u6240\u6709\u7684\u5f02\u5e38\u5904\u7406\u7a0b\u5e8f\u4f1a\u5f62\u6210\u4e00\u4e2aSEH\u94fe\u8868&#xff0c;try-except\u8bed\u53e5\u5c31\u662f\u5728\u6808\u4e2d\u6784\u9020\u4e00\u4e2aSEH\u8282\u70b9&#xff0c;\u6700\u540e\u52a0\u5165\u7684SEH\u8282\u70b9\u4f4d\u4e8eSEH\u94fe\u8868\u7684\u5934\u90e8\u3002\u9700\u8981\u6ce8\u610f&#xff0c;\u7ed3\u6784\u5316\u5f02\u5e38\u5904\u7406\u662f\u57fa\u4e8e\u7ebf\u7a0b\u7684&#xff0c;\u6bcf\u4e2a\u7ebf\u7a0b\u90fd\u53ef\u4ee5\u6709\u81ea\u5df1\u7684SEH\u94fe\u8868\u3002\u6bcf\u4e2aSEH\u8282\u70b9\u5b9e\u9645\u4e0a\u662f\u4e00\u4e2aEXCEPTION_REGISTRATION_RECORD\u7ed3\u6784&#xff0c;\u8be5\u7ed3\u6784\u5728winnt.h\u5934\u6587\u4ef6\u4e2d\u5b9a\u4e49\u5982\u4e0b&#xff1a;<\/p>\n<p>typedef struct _EXCEPTION_REGISTRATION_RECORD {<br \/>\n     struct _EXCEPTION_REGISTRATION_RECORD* Next;      \/\/ \u6307\u5411\u524d\u4e00\u4e2aSEH\u8282\u70b9\u7684\u672c\u7ed3\u6784<br \/>\n     PEXCEPTION_ROUTINE                     Handler;     \/\/ \u5f02\u5e38\u5904\u7406\u7a0b\u5e8f<br \/>\n} EXCEPTION_REGISTRATION_RECORD;<\/p>\n<p>try-except\u8bed\u53e5\u5728\u6808\u4e2d\u6784\u9020\u4e00\u4e2aEXCEPTION_REGISTRATION_RECORD\u7ed3\u6784\u5230SEH\u94fe\u8868\u7684\u5934\u90e8&#xff0c;\u8fd9\u4e2a\u8fc7\u7a0b\u4f7f\u7528\u6c47\u7f16\u4ee3\u7801\u63cf\u8ff0\u5982\u4e0b&#xff1a;<\/p>\n<p>push ExceptionHandler         \/\/ \u5f02\u5e38\u5904\u7406\u7a0b\u5e8f<br \/>\npush fs:[0]                     \/\/ \u524d\u4e00\u4e2aSEH\u8282\u70b9\u7684EXCEPTION_REGISTRATION_RECORD<br \/>\nmov fs:[0] , esp               \/\/ \u5f53\u524dSEH\u8282\u70b9\u7684EXCEPTION_REGISTRATION_RECORD\u6307\u9488\u653e\u5165fs:[0]<\/p>\n<p>\/\/ \u4ee3\u7801<\/p>\n<p>\/\/ \u5c06fs:[0]\u7684\u503c\u6062\u590d\u4e3a\u539f\u6765\u7684EXCEPTION_REGISTRATION_RECORD\u7ed3\u6784\u7684\u5730\u5740<br \/>\npop fs:[0]<br \/>\npop eax<\/p>\n<p>fs:[0]\u4e5f\u5c31\u662ffs\u5bc4\u5b58\u5668\u504f\u79fb0\u7684\u5730\u5740\u5904\u6c38\u8fdc\u6307\u5411\u5f53\u524dSEH\u8282\u70b9\u7684EXCEPTION_REGISTRATION_RECORD\u7ed3\u6784\u3002\u51fd\u6570\u8fd4\u56de\u65f6\u5e94\u8be5\u5c06fs:[0]\u7684\u503c\u6062\u590d\u4e3a\u539f\u6765\u7684EXCEPTION_REGISTRATION_RECORD\u7ed3\u6784\u7684\u5730\u5740&#xff0c;\u6700\u540e\u4e00\u884c\u4ee3\u7801pop eax\u4ec5\u4ec5\u662f\u4e3a\u4e86\u4f7f\u6808\u5e73\u8861&#xff0c;\u5f39\u51fa\u5230eax\u4e2d\u7684\u503c\u6ca1\u6709\u5b9e\u9645\u7528\u9014\u3002\u6267\u884c\u8fd9\u4e24\u6761\u6307\u4ee4\u540e&#xff0c;\u6808\u4e2d\u7684\u5f53\u524dSEH\u8282\u70b9\u7684EXCEPTION_REGISTRATION_RECORD\u7ed3\u6784\u88ab\u91ca\u653e\u3002\u4e0a\u8ff0\u6c47\u7f16\u4ee3\u7801\u662f\u7ed3\u6784\u5316\u5f02\u5e38\u5904\u7406\u5927\u81f4\u7684\u6837\u5b50&#xff0c;\u5728\u4e0d\u540c\u7684\u64cd\u4f5c\u7cfb\u7edf\u548c\u7f16\u8bd1\u5668\u4e0a\u7ed3\u6784\u5316\u5f02\u5e38\u5904\u7406\u7684\u5177\u4f53\u5b9e\u73b0\u4f1a\u6709\u6240\u4e0d\u540c&#xff0c;\u8fd9\u91cc\u4e0d\u518d\u6df1\u5165\u7814\u7a76\u3002<\/p>\n<p>\u5f53\u4e00\u4e2a\u5f02\u5e38\u53d1\u751f\u65f6&#xff0c;\u7cfb\u7edf\u4f1a\u9996\u5148\u67e5\u770b\u4ea7\u751f\u5f02\u5e38\u7684\u8fdb\u7a0b\u662f\u5426\u6b63\u5728\u88ab\u8c03\u8bd5\u3002\u5982\u679c\u6b63\u5728\u88ab\u8c03\u8bd5&#xff0c;\u5219\u4f1a\u5411\u8c03\u8bd5\u5668\u53d1\u9001\u4e00\u4e2aEXCEPTION_DEBUG_EVENT\u4e8b\u4ef6&#xff1b;\u5982\u679c\u8fdb\u7a0b\u6ca1\u6709\u88ab\u8c03\u8bd5\u6216\u8005\u8c03\u8bd5\u5668\u4e0d\u5904\u7406\u8be5\u5f02\u5e38&#xff0c;\u5219\u4f1a\u8c03\u7528\u7528\u6237\u5c42\u7684\u5f02\u5e38\u5904\u7406\u7a0b\u5e8f&#xff08;\u5982\u679c\u6709&#xff09;\u3002\u4f8b\u5982&#xff0c;int3\u662f\u6700\u5e38\u7528\u7684\u666e\u901a\u65ad\u70b9&#xff0c;int3\u65ad\u70b9\u7684\u539f\u7406\u5c31\u662f\u628a\u6307\u4ee4\u7684\u7b2c1\u5b57\u8282\u4fee\u6539\u4e3a0xCC&#xff0c;\u5f53\u6267\u884c\u5230\u8be5\u6761\u6307\u4ee4\u53d1\u73b0\u7b2c1\u5b57\u8282\u662f0xCC\u65f6\u5c31\u4f1a\u89e6\u53d1\u4e00\u4e2a\u5f02\u5e38\u5e76\u6682\u505c&#xff0c;\u7136\u540e\u8c03\u8bd5\u5668\u6267\u884c\u5f02\u5e38\u5904\u7406&#xff0c;\u628a\u8be5\u6307\u4ee4\u7684\u7b2c1\u5b57\u8282\u4fee\u6539\u56de\u539f\u6765\u7684\u5b57\u8282\u6307\u4ee4&#xff0c;\u5e76\u628a\u6307\u4ee4\u6307\u9488\u5bc4\u5b58\u5668EIP\u7684\u503c\u51cf1\u4ee5\u91cd\u65b0\u6267\u884c\u8be5\u6307\u4ee4\u3002\u56e0\u4e3a\u8c03\u8bd5\u5668\u5df2\u7ecf\u5904\u7406int3\u5f02\u5e38&#xff0c;\u6240\u4ee5\u7528\u6237\u5c42\u7684\u5f02\u5e38\u5904\u7406\u7a0b\u5e8f\u5c06\u4e0d\u4f1a\u5f97\u5230\u6267\u884c\u3002\u6211\u4eec\u53ef\u4ee5\u5229\u7528\u8fd9\u4e00\u70b9\u6765\u68c0\u6d4b\u7a0b\u5e8f\u81ea\u8eab\u662f\u5426\u6b63\u5728\u88ab\u8c03\u8bd5&#xff0c;\u4f8b\u5982\u4e0b\u9762\u7684\u51fd\u6570&#xff1a;<\/p>\n<p>BOOL CheckDebugging()<br \/>\n{<br \/>\n     __try<br \/>\n     {<br \/>\n          RaiseException(EXCEPTION_BREAKPOINT, 0, 0, NULL);<br \/>\n     }<br \/>\n     __except (EXCEPTION_EXECUTE_HANDLER)<br \/>\n     {<br \/>\n          return FALSE;<br \/>\n     }<\/p>\n<p>     return TRUE;<br \/>\n}<\/p>\n<p>try\u5757\u4e2d\u8c03\u7528RaiseException\u51fd\u6570\u89e6\u53d1\u4e00\u4e2aEXCEPTION_BREAKPOINT\u5f02\u5e38&#xff0c;\u5982\u679c\u7a0b\u5e8f\u6b63\u5728\u88ab\u8c03\u8bd5&#xff0c;\u5219\u4e0d\u4f1a\u6267\u884cexcept\u5757\u4e2d\u7684return FALSE\u8bed\u53e5&#xff0c;\u800c\u662f\u6267\u884cexcept\u5757\u540e\u9762\u7684return TRUE\u8bed\u53e5\u3002<\/p>\n<p>\u53ef\u4ee5\u6309\u5982\u4e0b\u65b9\u5f0f\u4f7f\u7528CheckDebugging\u51fd\u6570&#xff1a;<\/p>\n<p>if (CheckDebugging())<br \/>\n     MessageBox(hwndDlg, TEXT(&#034;\u8fdb\u7a0b\u6b63\u5728\u88ab\u8c03\u8bd5&#034;), TEXT(&#034;\u63d0\u793a&#034;), MB_OK);<\/p>\n<p>\u4e0a\u9762\u7684\u53cd\u8c03\u8bd5\u4ee3\u7801\u5f88\u5bb9\u6613\u88ab\u53cd\u8c03\u8bd5&#xff0c;OD\u53ef\u4ee5\u5b89\u88c5\u4e00\u4e2aStrongOD\u63d2\u4ef6&#xff0c;\u8be5\u63d2\u4ef6\u4e2d\u6709\u4e00\u4e2aSkip Some Exceptions\u9009\u9879&#xff0c;\u52fe\u9009\u8be5\u9009\u9879\u5373\u53ef\u8df3\u8fc7\u8be5\u53cd\u8c03\u8bd5\u3002<\/p>\n<p>\u5982\u679c\u628aCheckDebugging\u51fd\u6570\u4fee\u6539\u5982\u4e0b&#xff0c;\u4f1a\u5bfc\u81f4\u4e00\u4e2a\u5199NULL\u5730\u5740\u5f02\u5e38&#xff1a;<\/p>\n<p>BOOL CheckDebugging()<br \/>\n{<br \/>\n     __try<br \/>\n     {<br \/>\n          \/\/RaiseException(EXCEPTION_BREAKPOINT, 0, 0, NULL);<br \/>\n          LPDWORD lpdw &#061; NULL;<br \/>\n          *lpdw &#061; 0x12345678;<br \/>\n     }<br \/>\n     __except (EXCEPTION_EXECUTE_HANDLER)<br \/>\n     {<br \/>\n          return FALSE;<br \/>\n     }<\/p>\n<p>     return TRUE;<br \/>\n}<\/p>\n<p>\u53d6\u6d88\u9009\u4e2dStrongOD\u63d2\u4ef6\u7684Skip Some Exceptions\u9009\u9879&#xff0c;OD\u8f7d\u5165\u7a0b\u5e8f&#xff0c;\u6309F9\u952e\u8fd0\u884c&#xff0c;\u8fd9\u79cd\u60c5\u51b5\u4e0bOD\u4f1a\u63a5\u7ba1\u5e76\u5904\u7406\u5185\u5b58\u8bbf\u95ee\u5f02\u5e38&#xff0c;\u7a0b\u5e8f\u6b63\u5e38\u8fd0\u884c\u3002<\/p>\n<p>\u6253\u5f00OD\u7684\u9009\u9879\u83dc\u5355\u2192\u8c03\u8bd5\u8bbe\u7f6e&#xff0c;\u6253\u5f00\u5f02\u5e38\u9009\u9879\u5361&#xff0c;\u53d6\u6d88\u9009\u4e2d\u539f\u4e66\u7684\u56fe8.2\u4e2d\u76846\u4e2a\u5f02\u5e38\u3002\u5373\u53d1\u751f\u4e0a\u8ff0\u5f02\u5e38\u65f6OD\u4e0d\u4f1a\u6267\u884c\u5904\u7406\u64cd\u4f5c&#xff0c;\u800c\u662f\u4ea4\u7ed9\u7a0b\u5e8f\u81ea\u8eab\u53bb\u5904\u7406\u3002\u6309F9\u952e\u8fd0\u884c&#xff0c;\u7a0b\u5e8f\u4e2d\u65ad\u5728\u539f\u4e66\u7684\u56fe8.3\u6240\u793a\u7684\u754c\u9762\u3002<\/p>\n<p>\u540c\u65f6&#xff0c;OD\u5de6\u4e0b\u89d2\u7ed9\u51fa\u63d0\u793a&#xff08;\u89c1\u539f\u4e66\u7684\u56fe8.4&#xff09;\u3002\u8fd9\u5c31\u662f\u8bf4&#xff0c;OD\u5e76\u6ca1\u6709\u4e3b\u52a8\u63a5\u7ba1\u5e76\u5904\u7406\u5f02\u5e38&#xff0c;\u6309\u4e0bShift &#043; F9\u7ec4\u5408\u952e&#xff0c;\u4f1a\u4ea4\u7ed9\u7a0b\u5e8f\u81ea\u8eab\u5904\u7406\u5f02\u5e38&#xff0c;\u7a0b\u5e8f\u6b63\u5e38\u8fd0\u884c\u3002<\/p>\n<p>\u4f46\u662fRaiseException\u51fd\u6570\u89e6\u53d1\u7684\u662f\u8f6f\u4ef6\u5f02\u5e38&#xff0c;\u4e0d\u5c5e\u4e8e\u4e0a\u8ff0\u60c5\u51b5&#xff0c;\u5982\u679c\u53d6\u6d88\u9009\u4e2dStrongOD\u63d2\u4ef6\u7684Skip Some Exceptions\u9009\u9879&#xff0c;\u6309F9\u952e\u8fd0\u884c\u7a0b\u5e8f&#xff0c;\u4f1a\u63d0\u793a\u201c\u8fdb\u7a0b\u6b63\u5728\u88ab\u8c03\u8bd5\u201d\u3002<\/p>\n<h4>8.1.4\u3000\u8f6f\u4ef6\u5f02\u5e38<\/h4>\n<p>\u901a\u5e38\u60c5\u51b5\u4e0b&#xff0c;\u8c03\u7528\u4e00\u4e2a\u51fd\u6570\u65f6&#xff0c;\u53ef\u4ee5\u901a\u8fc7\u8fd4\u56de\u9519\u8bef\u4ee3\u7801\u6765\u6307\u660e\u51fd\u6570\u6267\u884c\u5931\u8d25&#xff0c;\u5176\u5b9e\u5f53\u4e00\u4e2a\u51fd\u6570\u6267\u884c\u5931\u8d25\u65f6\u4e5f\u53ef\u4ee5\u4f7f\u51fd\u6570\u629b\u51fa\u4e00\u4e2a\u5f02\u5e38\u800c\u4e0d\u662f\u8fd4\u56de\u9519\u8bef\u4ee3\u7801&#xff0c;\u7531\u5f02\u5e38\u5904\u7406\u7a0b\u5e8f\u6765\u5904\u7406\u7a0b\u5e8f\u9519\u8bef\u3002\u4f8b\u5982&#xff0c;\u9ed8\u8ba4\u60c5\u51b5\u4e0b\u4ece\u5806\u4e2d\u5206\u914d&#xff08;HeapAlloc&#xff09;\u6216\u91cd\u65b0\u5206\u914d&#xff08;HeapReAlloc&#xff09;\u5185\u5b58\u5757\u5931\u8d25\u65f6\u4f1a\u8fd4\u56deNULL&#xff0c;\u7a0b\u5e8f\u53ef\u4ee5\u5728\u8c03\u7528 HeapCreate \u51fd\u6570\u521b\u5efa\u79c1\u6709\u5806&#xff0c;\u6216\u8005\u5728\u6bcf\u6b21\u8c03\u7528 HeapAlloc\u3001HeapReAlloc \u51fd\u6570\u65f6&#xff0c;\u6307\u5b9aHEAP_GENERATE_EXCEPTIONS\u6807\u5fd7&#xff0c;\u8fd9\u6837\u4e00\u6765\u6bcf\u5f53\u8c03\u7528\u8fd9\u4e24\u4e2a\u51fd\u6570\u65f6&#xff0c;\u5982\u679c\u5185\u5b58\u5206\u914d\u5931\u8d25\u5c31\u4f1a\u629b\u51fa\u4e00\u4e2a\u5f02\u5e38&#xff08;STATUS_NO_MEMORY\u6216STATUS_ACCESS_VIOLATION&#xff09;\u4ee5\u901a\u77e5\u5e94\u7528\u7a0b\u5e8f\u6709\u9519\u8bef\u53d1\u751f&#xff0c;\u7a0b\u5e8f\u53ef\u4ee5\u901a\u8fc7\u7ed3\u6784\u5316\u5f02\u5e38\u5904\u7406\u7a0b\u5e8f\u6765\u6355\u83b7\u8fd9\u4e2a\u5f02\u5e38\u3002<\/p>\n<p>\u7531CPU\u6355\u83b7\u67d0\u4e00\u4e8b\u4ef6\u5e76\u629b\u51fa\u7684\u5f02\u5e38\u90fd\u662f\u786c\u4ef6\u5f02\u5e38&#xff0c;\u64cd\u4f5c\u7cfb\u7edf\u548c\u5e94\u7528\u7a0b\u5e8f\u4e5f\u53ef\u4ee5\u629b\u51fa\u5f02\u5e38&#xff0c;\u8fd9\u7c7b\u5f02\u5e38\u79f0\u4e3a\u8f6f\u4ef6\u5f02\u5e38\u3002\u8f6f\u4ef6\u5f02\u5e38\u53ef\u4ee5\u4f5c\u4e3a\u4e00\u79cd\u6307\u660e\u53d1\u751f\u7684\u9519\u8bef&#xff0c;\u7a0b\u5e8f\u8fd8\u53ef\u4ee5\u901a\u8fc7\u629b\u51fa\u8f6f\u4ef6\u5f02\u5e38\u6765\u6539\u53d8\u7a0b\u5e8f\u6267\u884c\u6d41\u7a0b&#xff0c;\u8fd9\u79cd\u65b9\u5f0f\u5728\u52a0\u5bc6\/\u89e3\u5bc6\u9886\u57df\u5e94\u7528\u5f97\u6bd4\u8f83\u591a\u3002RaiseException\u51fd\u6570\u7528\u4e8e\u5728\u8c03\u7528\u7ebf\u7a0b\u4e2d\u629b\u51fa\u4e00\u4e2a\u5f02\u5e38&#xff1a;<\/p>\n<p>VOID RaiseException(<br \/>\n     _In_ DWORD                dwExceptionCode,     \/\/ \u5f02\u5e38\u4ee3\u7801<br \/>\n     _In_ DWORD             dwExceptionFlags,    \/\/ \u5f02\u5e38\u6807\u5fd7&#xff0c;\u53ef\u4ee5\u4e3a0\u6216EXCEPTION_<br \/>\n                                                         \/\/ NONCONTINUABLE<br \/>\n     _In_ DWORD                 nNumberOfArguments,  \/\/ lpArguments\u6570\u7ec4\u4e2d\u7684\u53c2\u6570\u4e2a\u6570<br \/>\n     _In_ CONST ULONG_PTR* lpArguments);          \/\/ \u9644\u52a0\u53c2\u6570\u6570\u7ec4<\/p>\n<ul>\n<li>\n<p>dwExceptionCode\u53c2\u6570\u6307\u5b9a\u5f02\u5e38\u4ee3\u7801&#xff0c;\u7528\u6237\u53ef\u4ee5\u81ea\u5b9a\u4e49\u5f02\u5e38\u4ee3\u7801&#xff0c;\u53ea\u8981\u7b26\u5408\u524d\u9762\u4ecb\u7ecd\u7684Windows\u5f02\u5e38\u4ee3\u7801\u7684\u5b9a\u4e49\u89c4\u5219\u5373\u53ef\u3002<\/p>\n<\/li>\n<li>\n<p>dwExceptionFlags\u53c2\u6570\u6307\u5b9a\u5f02\u5e38\u6807\u5fd7&#xff0c;\u8be5\u53c2\u6570\u53ef\u4ee5\u8bbe\u7f6e\u4e3a0\u8868\u793a\u7a0b\u5e8f\u53ef\u7ee7\u7eed\u6267\u884c\u7684\u5f02\u5e38&#xff0c;\u4e5f\u53ef\u4ee5\u8bbe\u7f6e\u4e3aEXCEPTION_NONCONTINUABLE\u8868\u793a\u7a0b\u5e8f\u4e0d\u53ef\u7ee7\u7eed\u6267\u884c\u7684\u5f02\u5e38&#xff0c;\u5728\u4e0d\u53ef\u7ee7\u7eed\u7684\u5f02\u5e38\u53d1\u751f\u540e\u7ee7\u7eed\u6267\u884c\u7a0b\u5e8f\u4f1a\u5bfc\u81f4\u53d1\u751fEXCEPTION_NONCONTINUABLE_EXCEPTION\u5f02\u5e38\u3002\u4e00\u822c\u6765\u8bf4&#xff0c;dwExceptionFlags\u53c2\u6570\u7528\u6765\u6307\u51fa\u5f02\u5e38\u8fc7\u6ee4\u7a0b\u5e8f\u5728\u5904\u7406\u8be5\u5f02\u5e38\u65f6\u80fd\u5426\u8fd4\u56deEXCEPTION_CONTINUE_EXECUTION&#xff0c;\u5982\u679c\u8be5\u53c2\u6570\u8bbe\u7f6e\u4e3aEXCEPTION_NONCONTINUABLE&#xff0c;\u5219\u8868\u793a\u8fd9\u662f\u4e00\u4e2a\u4e0d\u53ef\u6062\u590d\u7684\u4e25\u91cd\u9519\u8bef&#xff0c;\u8fd9\u65f6\u5019\u5982\u679c\u5f02\u5e38\u8fc7\u6ee4\u7a0b\u5e8f\u8fd4\u56deEXCEPTION_CONTINUE_EXECUTION&#xff0c;\u7cfb\u7edf\u5c31\u4f1a\u629b\u51fa\u4e00\u4e2a\u65b0\u7684EXCEPTION_NONCONTINUABLE_EXCEPTION\u5f02\u5e38\u3002<\/p>\n<\/li>\n<li>\n<p>nNumberOfArguments\u548clpArguments\u53c2\u6570\u7528\u4e8e\u6307\u5b9a\u629b\u51fa\u5f02\u5e38\u7684\u9644\u52a0\u4fe1\u606f&#xff0c;\u901a\u5e38\u4e0d\u9700\u8981\u8fd9\u4e24\u4e2a\u53c2\u6570\u3002<\/p>\n<\/li>\n<\/ul>\n<h3>8.2\u3000\u5411\u91cf\u5316\u5f02\u5e38\u5904\u7406&#xff08;\u5168\u5c40&#xff09;<\/h3>\n<h4>8.2.1\u3000\u5411\u91cf\u5316\u5f02\u5e38\u5904\u7406\u7b80\u4ecb<\/h4>\n<p>\u5411\u91cf\u5316\u5f02\u5e38\u5904\u7406&#xff08;Vectored Exception Handling&#xff0c;VEH&#xff09;\u662f\u5bf9\u7ed3\u6784\u5316\u5f02\u5e38\u5904\u7406\u7684\u6269\u5c55&#xff0c;\u5411\u91cf\u5316\u5f02\u5e38\u5904\u7406\u662f\u57fa\u4e8e\u8fdb\u7a0b\u5168\u5c40\u7684&#xff0c;\u7a0b\u5e8f\u53ef\u4ee5\u6ce8\u518c\u4e00\u4e2a\u51fd\u6570\u6765\u76d1\u89c6\u6216\u5904\u7406\u8be5\u7a0b\u5e8f\u7684\u6240\u6709\u5f02\u5e38&#xff0c;\u5f53\u8fdb\u7a0b\u4e2d\u7684\u4efb\u4f55\u4e00\u4e2a\u7ebf\u7a0b\u4e2d\u53d1\u751f\u5f02\u5e38\u65f6&#xff0c;\u90fd\u53bb\u8c03\u7528\u6ce8\u518c\u7684\u8fd9\u4e2a\u51fd\u6570&#xff08;\u5f02\u5e38\u5904\u7406\u7a0b\u5e8f&#xff09;\u3002<\/p>\n<p>\u7a0b\u5e8f\u53ef\u4ee5\u901a\u8fc7\u8c03\u7528AddVectoredExceptionHandler\u51fd\u6570\u6dfb\u52a0\u6216\u8005\u6ce8\u518c\u4e00\u4e2a\u5411\u91cf\u5316\u5f02\u5e38\u5904\u7406\u7a0b\u5e8f&#xff0c;\u4e5f\u53ef\u4ee5\u591a\u6b21\u8c03\u7528AddVectoredExceptionHandler\u51fd\u6570\u6dfb\u52a0\u591a\u4e2a\u5f02\u5e38\u5904\u7406\u7a0b\u5e8f&#xff0c;\u6240\u6709\u5411\u91cf\u5316\u5f02\u5e38\u5904\u7406\u7a0b\u5e8f\u5f62\u6210\u4e00\u4e2aVEH\u94fe\u8868\u3002AddVectoredExceptionHandler\u51fd\u6570\u58f0\u660e\u5982\u4e0b&#xff1a;<\/p>\n<p>PVOID WINAPI AddVectoredExceptionHandler(<br \/>\n     _In_ ULONG                           FirstHandler,        \/\/ \u8c03\u7528\u5f02\u5e38\u5904\u7406\u7a0b\u5e8f\u7684\u987a\u5e8f&#xff0c;\u96f6\u6216\u975e\u96f6<br \/>\n     _In_ PVECTORED_EXCEPTION_HANDLER VectoredHandler); \/\/ \u5f02\u5e38\u5904\u7406\u7a0b\u5e8f\u6307\u9488&#xff0c;\u56de\u8c03\u51fd\u6570<\/p>\n<ul>\n<li>\n<p>FirstHandler\u53c2\u6570\u6307\u5b9a\u8c03\u7528\u5f02\u5e38\u5904\u7406\u7a0b\u5e8f\u7684\u987a\u5e8f&#xff0c;\u5982\u679c\u8be5\u53c2\u6570\u4e3a\u975e\u96f6&#xff0c;\u5219VectoredHandler\u53c2\u6570\u6307\u5b9a\u7684\u5f02\u5e38\u5904\u7406\u7a0b\u5e8f\u662f\u7b2c\u4e00\u4e2a\u8981\u8c03\u7528\u7684\u5904\u7406\u7a0b\u5e8f&#xff08;VectoredHandler\u53c2\u6570\u6307\u5b9a\u7684\u5f02\u5e38\u5904\u7406\u7a0b\u5e8f\u653e\u5728VEH\u94fe\u8868\u7684\u5934\u90e8&#xff09;&#xff0c;\u5982\u679c\u8be5\u53c2\u6570\u4e3a0&#xff0c;\u5219VectoredHandler\u53c2\u6570\u6307\u5b9a\u7684\u5f02\u5e38\u5904\u7406\u7a0b\u5e8f\u662f\u6700\u540e\u4e00\u4e2a\u8981\u8c03\u7528\u7684\u5904\u7406\u7a0b\u5e8f&#xff08;VectoredHandler\u53c2\u6570\u6307\u5b9a\u7684\u5f02\u5e38\u5904\u7406\u7a0b\u5e8f\u653e\u5728VEH\u94fe\u8868\u7684\u5c3e\u90e8&#xff09;\u3002<\/p>\n<\/li>\n<li>\n<p>VectoredHandler \u53c2\u6570\u662f\u6307\u5411\u5f02\u5e38\u5904\u7406\u7a0b\u5e8f\u7684\u6307\u9488&#xff0c;PVECTORED_EXCEPTION_HANDLER \u662f\u5f02\u5e38\u5904\u7406\u7a0b\u5e8f\u51fd\u6570\u6307\u9488\u7c7b\u578b&#xff1a;<\/p>\n<\/li>\n<\/ul>\n<p>   typedef LONG(NTAPI* PVECTORED_EXCEPTION_HANDLER)(struct _EXCEPTION_POINTERS* ExceptionInfo);<\/p>\n<p>\u5411\u91cf\u5316\u5f02\u5e38\u5904\u7406\u7a0b\u5e8f\u7684\u51fd\u6570\u5b9a\u4e49\u5e94\u8be5\u7b26\u5408\u5982\u4e0b\u683c\u5f0f&#xff1a;<\/p>\n<p>LONG CALLBACK VectoredHandler(PEXCEPTION_POINTERS ExceptionInfo);<\/p>\n<p>NTAPI\u3001CALLBACK\u4e0eWINAPI\u76f8\u540c&#xff0c;\u90fd\u662f__stdcall\u51fd\u6570\u8c03\u7528\u7ea6\u5b9a\u3002<\/p>\n<p>\u5982\u679c\u51fd\u6570\u6267\u884c\u6210\u529f&#xff0c;\u5219\u8fd4\u56de\u503c\u662f\u5f02\u5e38\u5904\u7406\u7a0b\u5e8f\u53e5\u67c4&#xff0c;\u540e\u671f\u9700\u8981\u5220\u9664\u5f02\u5e38\u5904\u7406\u7a0b\u5e8f\u65f6\u4f1a\u7528\u5230\u8be5\u53e5\u67c4&#xff1b;\u5982\u679c\u51fd\u6570\u6267\u884c\u5931\u8d25&#xff0c;\u5219\u8fd4\u56de\u503c\u4e3aNULL\u3002<\/p>\n<p>\u5f53\u53d1\u751f\u5f02\u5e38\u65f6&#xff0c;\u7cfb\u7edf\u5728\u6267\u884c\u7ed3\u6784\u5316\u5f02\u5e38\u8fc7\u6ee4\u7a0b\u5e8f\u524d&#xff0c;\u4f1a\u5148\u6309\u7167VEH\u94fe\u8868\u987a\u5e8f\u9010\u4e2a\u8c03\u7528\u5411\u91cf\u5316\u5f02\u5e38\u5904\u7406\u7a0b\u5e8f&#xff0c;\u5982\u679c\u67d0\u4e2a\u5f02\u5e38\u5904\u7406\u7a0b\u5e8f\u53ef\u4ee5\u4fee\u590d\u53d1\u751f\u7684\u95ee\u9898&#xff0c;\u5219\u5e94\u8be5\u8fd4\u56deEXCEPTION_CONTINUE_EXECUTION&#xff0c;\u4f7f\u629b\u51fa\u5f02\u5e38\u7684\u6307\u4ee4\u518d\u6b21\u6267\u884c&#xff0c;\u53ea\u8981\u67d0\u4e2a\u5f02\u5e38\u5904\u7406\u7a0b\u5e8f\u8fd4\u56deEXCEPTION_CONTINUE_EXECUTION&#xff0c;VEH\u94fe\u8868\u4e2d\u7684\u5176\u4ed6\u5f02\u5e38\u5904\u7406\u7a0b\u5e8f\u548c\u7ed3\u6784\u5316\u5f02\u5e38\u8fc7\u6ee4\u7a0b\u5e8f\u5c31\u4e0d\u4f1a\u518d\u88ab\u6267\u884c&#xff1b;\u5982\u679c\u4e00\u4e2a\u5411\u91cf\u5316\u5f02\u5e38\u5904\u7406\u7a0b\u5e8f\u4e0d\u80fd\u4fee\u590d\u53d1\u751f\u7684\u95ee\u9898&#xff0c;\u5219\u5e94\u8be5\u8fd4\u56deEXCEPTION_CONTINUE_SEARCH&#xff0c;\u4f7fVEH\u94fe\u8868\u4e2d\u7684\u5176\u4ed6\u5f02\u5e38\u5904\u7406\u7a0b\u5e8f\u6709\u673a\u4f1a\u53bb\u5904\u7406\u8fd9\u4e2a\u5f02\u5e38\u3002\u5982\u679c\u6240\u6709\u7684\u5411\u91cf\u5316\u5f02\u5e38\u5904\u7406\u7a0b\u5e8f\u90fd\u8fd4\u56deEXCEPTION_CONTINUE_SEARCH&#xff0c;\u5219\u7ed3\u6784\u5316\u5f02\u5e38\u8fc7\u6ee4\u7a0b\u5e8f\u5c31\u4f1a\u6267\u884c\u3002\u9700\u8981\u6ce8\u610f\u7684\u662f&#xff0c;\u5411\u91cf\u5316\u5f02\u5e38\u5904\u7406\u7a0b\u5e8f\u4e0d\u80fd\u8fd4\u56deEXCEPTION_EXECUTE_HANDLER\u3002<\/p>\n<p>\u5f53\u4e0d\u518d\u9700\u8981\u4e4b\u524d\u6ce8\u518c\u7684\u5411\u91cf\u5316\u5f02\u5e38\u5904\u7406\u7a0b\u5e8f\u65f6&#xff0c;\u53ef\u4ee5\u8c03\u7528RemoveVectoredExceptionHandler\u5c06\u5176\u5220\u9664&#xff1a;<\/p>\n<p>ULONG WINAPI RemoveVectoredExceptionHandler(_In_ PVOID pHandler);<\/p>\n<p>pHandler\u53c2\u6570\u662f\u5148\u524d\u8c03\u7528AddVectoredExceptionHandler\u51fd\u6570\u6ce8\u518c\u7684\u5411\u91cf\u5316\u5f02\u5e38\u5904\u7406\u7a0b\u5e8f\u7684\u53e5\u67c4\u3002<\/p>\n<h4>8.2.2\u3000\u5229\u7528\u5411\u91cf\u5316\u5f02\u5e38\u5904\u7406\u5b9e\u73b0\u57fa\u4e8e\u65ad\u70b9\u7684API Hook<\/h4>\n<p>OD\u8c03\u8bd5\u5668\u7684int3\u65ad\u70b9\u7684\u539f\u7406\u662f&#xff0c;\u628a\u6307\u4ee4\u7684\u7b2c1\u5b57\u8282\u4fee\u6539\u4e3a0xCC&#xff0c;\u5f53\u6267\u884c\u5230\u8be5\u6761\u6307\u4ee4\u53d1\u73b0\u7b2c1\u5b57\u8282\u662f0xCC\u65f6\u5c31\u4f1a\u89e6\u53d1\u4e00\u4e2a\u5f02\u5e38\u5e76\u6682\u505c&#xff0c;\u7136\u540e\u8c03\u8bd5\u5668\u6267\u884c\u5f02\u5e38\u5904\u7406&#xff0c;\u628a\u8be5\u6307\u4ee4\u7684\u7b2c1\u5b57\u8282\u4fee\u6539\u56de\u539f\u6765\u7684\u5b57\u8282\u7801&#xff0c;\u5e76\u628a\u6307\u4ee4\u6307\u9488\u5bc4\u5b58\u5668EIP\u7684\u503c\u51cf1\u4ee5\u91cd\u65b0\u6267\u884c\u8be5\u6307\u4ee4\u3002\u672c\u8282\u6211\u4eec\u7f16\u5199\u4e00\u4e2aVEHBreakPoint.dll&#xff0c;VEHBreakPoint.dll\u9700\u8981\u6ce8\u5165\u5176\u4ed6\u76ee\u6807\u8fdb\u7a0b\u4e2d&#xff0c;\u7528\u4e8e\u76d1\u89c6\u76ee\u6807\u8fdb\u7a0b\u901a\u8fc7\u8c03\u7528LoadLibrary\u51fd\u6570\u52a0\u8f7d\u4e86\u54ea\u4e9b\u6a21\u5757\u3002Kernel32.dll\u4e2d\u7684LoadLibrary\u51fd\u6570\u9700\u8981\u4e00\u4e2a\u5b57\u7b26\u4e32\u53c2\u6570lpLibFileName\u4ee5\u6307\u5b9a\u8981\u52a0\u8f7d\u7684\u6a21\u5757\u540d\u79f0\u3002\u6211\u4eec\u5728LoadLibrary\u51fd\u6570\u7684\u8d77\u59cb\u5730\u5740\u5904\u8bbe\u7f6e\u4e00\u4e2aint3\u65ad\u70b9&#xff0c;\u5f53\u7a0b\u5e8f\u6267\u884c\u5230\u65ad\u70b9\u5730\u5740\u5904\u65f6&#xff0c;\u53d1\u73b0\u7b2c1\u5b57\u8282\u662f0xCC\u5c31\u4f1a\u89e6\u53d1\u4e00\u4e2a\u5f02\u5e38\u5e76\u6682\u505c&#xff0c;VEHBreakPoint.dll\u9700\u8981\u5904\u7406\u8fd9\u4e2a\u5f02\u5e38&#xff0c;\u56e0\u6b64\u6211\u4eec\u9700\u8981\u6ce8\u518c\u4e00\u4e2a\u5411\u91cf\u5316\u5f02\u5e38\u5904\u7406\u7a0b\u5e8fLoadLibraryExWBPHandler\u5904\u7406\u8be5\u5f02\u5e38\u3002<\/p>\n<p>\u5728LoadLibraryExWBPHandler\u51fd\u6570\u4e2d&#xff0c;\u901a\u8fc7ExceptionInfo-&gt;ExceptionRecord-&gt;ExceptionCode\u53ef\u4ee5\u5f97\u5230\u5f02\u5e38\u4ee3\u7801\u3002\u5982\u679c\u5f02\u5e38\u4ee3\u7801\u662fEXCEPTION_BREAKPOINT&#xff0c;\u5c31\u8868\u793a\u7a0b\u5e8f\u6267\u884c\u5230\u4e86int3\u65ad\u70b9\u5730\u5740\u5904&#xff0c;\u6b64\u65f6\u6808\u6307\u9488esp\u6307\u5411\u7684\u5730\u5740\u662fLoadLibrary\u51fd\u6570\u7684\u8fd4\u56de\u5730\u5740&#xff0c;esp &#043; 4\u6307\u5411\u7684\u5730\u5740\u662fLoadLibrary\u51fd\u6570\u7684\u6a21\u5757\u540d\u79f0\u5b57\u7b26\u4e32\u53c2\u6570&#xff0c;\u8fd9\u65f6LoadLibrary\u51fd\u6570\u7684\u5b9e\u73b0\u4ee3\u7801\u8fd8\u6ca1\u6709\u6267\u884c&#xff0c;\u6211\u4eec\u53ef\u4ee5\u5bf9\u51fd\u6570\u53c2\u6570\u8fdb\u884c\u5404\u79cd\u81ea\u5b9a\u4e49Hook\u64cd\u4f5c\u3002\u6267\u884c\u5b8c\u81ea\u5b9a\u4e49Hook\u64cd\u4f5c\u540e&#xff0c;\u9700\u8981\u4e34\u65f6\u5220\u9664int3\u65ad\u70b9&#xff08;\u4fee\u65390xCC\u4e3a\u539f\u6307\u4ee4\u5b57\u8282\u7801&#xff09;\u4ee5\u91cd\u65b0\u6267\u884c\u53d1\u751fint3\u5f02\u5e38\u7684\u6307\u4ee4&#xff0c;\u4f46\u662f\u5220\u9664int3\u65ad\u70b9\u540e\u7a0b\u5e8f\u5f00\u59cb\u7ee7\u7eed\u6267\u884c&#xff0c;\u5982\u4f55\u62e6\u622a\u4e0b\u4e00\u6b21LoadLibrary\u51fd\u6570\u8c03\u7528\u5462&#xff1f;\u6267\u884c\u5b8c\u81ea\u5b9a\u4e49\u64cd\u4f5c\u540e&#xff0c;\u6211\u4eec\u4e34\u65f6\u5220\u9664int3\u65ad\u70b9&#xff0c;\u901a\u8fc7 ExceptionInfo-&gt;ContextRecord-&gt; EFlags |&#061; 0x100;\u8bed\u53e5\u8bbe\u7f6e\u4e00\u4e2a\u5355\u6b65\u4e2d\u65ad&#xff0c;\u7136\u540e\u8fd4\u56deEXCEPTION_CONTINUE_EXECUTION\u4ee5\u91cd\u65b0\u6267\u884c\u53d1\u751fint3\u5f02\u5e38\u7684\u6307\u4ee4&#xff0c;\u8fd9\u6837\u4e00\u6765\u5728\u6267\u884c\u5b8cLoadLibrary\u51fd\u6570\u7684\u7b2c\u4e00\u6761\u6307\u4ee4\u540e\u5373\u53ef\u89e6\u53d1\u4e00\u4e2aEXCEPTION_SINGLE_STEP\u5355\u6b65\u5f02\u5e38\u5e76\u6682\u505c&#xff0c;\u5728\u5904\u7406EXCEPTION_SINGLE_STEP\u5355\u6b65\u5f02\u5e38\u65f6\u6062\u590dLoadLibrary\u51fd\u6570\u8d77\u59cb\u5730\u5740\u5904\u7684int3\u65ad\u70b9&#xff0c;\u5e76\u8fd4\u56deEXCEPTION_CONTINUE_EXECUTION\u8868\u793a\u7ee7\u7eed\u6267\u884c\u7a0b\u5e8f&#xff0c;\u7b49\u5f85\u4e0b\u4e00\u6b21int3\u5f02\u5e38&#xff0c;\u89e6\u53d1EXCEPTION_SINGLE_STEP\u5355\u6b65\u5f02\u5e38\u540e\u7cfb\u7edf\u4f1a\u81ea\u52a8\u628a\u6807\u5fd7\u5bc4\u5b58\u5668\u7684TF\u4f4d\u7f6e0&#xff0c;\u56e0\u6b64\u8fd9\u91cc\u5e76\u4e0d\u9700\u8981\u518d\u624b\u52a8\u7f6e0\u3002<\/p>\n<p>\u5982\u679c\u4e00\u4e2aWindows API\u51fd\u6570\u9700\u8981\u5b57\u7b26\u4e32\u53c2\u6570&#xff0c;\u5219\u8be5\u51fd\u6570\u901a\u5e38\u6709A\u548cW\u4e24\u4e2a\u7248\u672c&#xff0c;\u4eceWindows NT\u5f00\u59cb&#xff0c;Windows\u7684\u5185\u6838\u7248\u672c\u5b8c\u5168\u4f7f\u7528Unicode\u6765\u6784\u5efa&#xff0c;\u5fae\u8f6f\u516c\u53f8\u4e5f\u9010\u6e10\u5f00\u59cb\u503e\u5411\u4e8e\u53ea\u63d0\u4f9bAPI\u51fd\u6570\u7684Unicode\u7248\u672c&#xff0c;Kernel32.dll\u4e2d\u7684LoadLibraryA \/ LoadLibraryW\u51fd\u6570\u7684\u8c03\u7528\u5173\u7cfb\u5982\u4e0b&#xff1a;<\/p>\n<p>Kernel32.LoadLibraryW\u2192KernelBase.LoadLibraryW\u2192KernelBase.LoadLibraryExW<br \/>\nKernel32.LoadLibraryA\u2192KernelBase.LoadLibraryA\u2192KernelBase.LoadLibraryExA\u2192KernelBase. LoadLibraryExW<\/p>\n<p>LoadLibraryA\/LoadLibraryW\u51fd\u6570\u6700\u7ec8\u90fd\u662f\u5bf9KernelBase.LoadLibraryExW\u51fd\u6570\u7684\u8c03\u7528&#xff0c;\u4e0e\u5176\u5bf9Kernel32.dll\u4e2d\u7684LoadLibraryA \/ LoadLibraryW\u51fd\u6570\u8bbe\u7f6e\u65ad\u70b9&#xff0c;\u4e0d\u5982\u76f4\u63a5\u5bf9KernelBase.LoadLibraryExW\u51fd\u6570\u8bbe\u7f6e\u65ad\u70b9\u66f4\u76f4\u63a5\u548c\u901a\u7528\u3002<\/p>\n<p>VEHBreakPoint.dll\u4e0d\u9700\u8981\u5bfc\u51fa\u51fd\u6570&#xff0c;VEHBreakPoint.cpp\u6e90\u6587\u4ef6\u7684\u5185\u5bb9\u5982\u4e0b&#xff1a;<\/p>\n<p>#include &lt;Windows.h&gt;<\/p>\n<p>\/\/ \u5168\u5c40\u53d8\u91cf<br \/>\nLPVOID g_pfnLoadLibraryExWAddress;      \/\/ LoadLibraryExW\u51fd\u6570\u5730\u5740<br \/>\nBYTE g_bOriginalCodeByte;                   \/\/ \u4fdd\u5b58LoadLibraryExW\u51fd\u6570\u7684\u7b2c\u4e00\u4e2a\u6307\u4ee4\u7801<br \/>\nHWND g_hwndDlg;                             \/\/ CreateProcessInjectDll\u7a0b\u5e8f\u7a97\u53e3\u53e5\u67c4<\/p>\n<p>\/\/ \u51fd\u6570\u58f0\u660e<br \/>\n\/\/ \u8bbe\u7f6eint3\u65ad\u70b9(\u8fd4\u56de\u539f\u6307\u4ee4\u7801)<br \/>\nBYTE SetBreakPoint(LPVOID lpCodeAddr);<br \/>\n\/\/ \u79fb\u9664int3\u65ad\u70b9<br \/>\nVOID RemoveBreakPoint(LPVOID lpCodeAddr, BYTE bOriginalCodeByte);<\/p>\n<p>\/\/ \u4e3aLoadLibraryExW\u51fd\u6570\u7684int3\u65ad\u70b9\u6ce8\u518c\u4e00\u4e2a\u5411\u91cf\u5316\u5f02\u5e38\u5904\u7406\u7a0b\u5e8f<br \/>\nLONG CALLBACK LoadLibraryExWBPHandler(PEXCEPTION_POINTERS ExceptionInfo);<\/p>\n<p>\/\/ LoadLibraryExW\u51fd\u6570int3\u4e2d\u65ad\u540e\u6267\u884c\u7528\u6237\u6240\u9700\u7684\u81ea\u5b9a\u4e49\u64cd\u4f5c<br \/>\nVOID LoadLibraryExWCustomActions(LPVOID lpCodeAddr, LPVOID lpStackAddr);<\/p>\n<p>BOOL APIENTRY DllMain(HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved)<br \/>\n{<br \/>\n     switch (ul_reason_for_call)<br \/>\n     {<br \/>\n     case DLL_PROCESS_ATTACH:<br \/>\n          g_hwndDlg &#061; FindWindow(TEXT(&#034;#32770&#034;), TEXT(&#034;CreateProcessInjectDll&#034;));<\/p>\n<p>          \/\/ \u83b7\u53d6KernelBase.LoadLibraryExW\u51fd\u6570\u7684\u5730\u5740<br \/>\n          g_pfnLoadLibraryExWAddress &#061; (LPVOID)GetProcAddress(<br \/>\n               GetModuleHandle(TEXT(&#034;KernelBase.dll&#034;)), &#034;LoadLibraryExW&#034;);<\/p>\n<p>          \/\/ \u4e3aLoadLibraryExW\u51fd\u6570\u7684int3\u65ad\u70b9\u6ce8\u518c\u4e00\u4e2a\u5411\u91cf\u5316\u5f02\u5e38\u5904\u7406\u7a0b\u5e8f<br \/>\n          AddVectoredExceptionHandler(1, LoadLibraryExWBPHandler);<br \/>\n          \/\/ \u5728LoadLibraryExW\u51fd\u6570\u4e0a\u8bbe\u7f6e\u4e00\u4e2aint3\u65ad\u70b9<br \/>\n          g_bOriginalCodeByte &#061; SetBreakPoint(g_pfnLoadLibraryExWAddress);<br \/>\n          break;<\/p>\n<p>     case DLL_PROCESS_DETACH:<br \/>\n     case DLL_THREAD_ATTACH:<br \/>\n     case DLL_THREAD_DETACH:<br \/>\n          break;<br \/>\n     }<\/p>\n<p>     return TRUE;<br \/>\n}<\/p>\n<p>\/\/ \u5185\u90e8\u51fd\u6570<br \/>\nLONG CALLBACK LoadLibraryExWBPHandler(PEXCEPTION_POINTERS ExceptionInfo)<br \/>\n{<br \/>\n     DWORD dwExceptionCode &#061; ExceptionInfo-&gt;ExceptionRecord-&gt;ExceptionCode;<\/p>\n<p>     if (dwExceptionCode &#061;&#061; EXCEPTION_BREAKPOINT)<br \/>\n     {<br \/>\n          \/\/ \u68c0\u67e5\u662f\u5426\u662f\u6211\u4eec\u8bbe\u7f6e\u7684int3\u65ad\u70b9&#xff0c;\u5982\u679c\u4e0d\u662f&#xff0c;\u5c06\u5b83\u4f20\u9012\u7ed9\u5176\u4ed6\u5f02\u5e38\u5904\u7406\u7a0b\u5e8f<br \/>\n          if (ExceptionInfo-&gt;ExceptionRecord-&gt;ExceptionAddress !&#061; g_pfnLoad LibraryExWAddress)<br \/>\n               return EXCEPTION_CONTINUE_SEARCH;<\/p>\n<p>          \/\/ \u5bf9LoadLibraryExW\u51fd\u6570\u6267\u884c\u7528\u6237\u6240\u9700\u7684\u81ea\u5b9a\u4e49\u64cd\u4f5c<br \/>\n          LoadLibraryExWCustomActions(ExceptionInfo-&gt;ExceptionRecord-&gt;ExceptionAddress,<br \/>\n               (LPVOID)(ExceptionInfo-&gt;ContextRecord-&gt;Esp));<\/p>\n<p>          \/\/ \u4e34\u65f6\u79fb\u9664int3\u65ad\u70b9<br \/>\n          RemoveBreakPoint(g_pfnLoadLibraryExWAddress, g_bOriginalCodeByte);<br \/>\n          \/\/ \u8bbe\u7f6e\u5355\u6b65\u4e2d\u65ad<br \/>\n          ExceptionInfo-&gt;ContextRecord-&gt;EFlags |&#061; 0x100;<\/p>\n<p>          \/\/ \u91cd\u65b0\u6267\u884c\u53d1\u751fint3\u5f02\u5e38\u7684\u6307\u4ee4&#xff0c;\u56e0\u4e3a\u8bbe\u7f6e\u4e86\u5355\u6b65\u4e2d\u65ad&#xff0c;\u63a5\u4e0b\u6765\u4f1a\u5355\u6b65\u6267\u884c\u5b8c\u7b2c\u4e00\u6761\u6307\u4ee4<br \/>\n          return EXCEPTION_CONTINUE_EXECUTION;<br \/>\n     }<br \/>\n     else if (dwExceptionCode &#061;&#061; EXCEPTION_SINGLE_STEP)<br \/>\n     {<br \/>\n          if (ExceptionInfo-&gt;ExceptionRecord-&gt;ExceptionAddress !&#061;<br \/>\n               (LPBYTE)g_pfnLoadLibraryExWAddress &#043; 2)<br \/>\n               return EXCEPTION_CONTINUE_SEARCH;<\/p>\n<p>          \/\/ \u5df2\u7ecf\u6267\u884c\u5b8c\u7528\u6237\u7684\u81ea\u5b9a\u4e49\u64cd\u4f5c&#xff0c;\u4e5f\u5df2\u7ecf\u5355\u6b65\u6267\u884c\u5b8cLoadLibraryExW\u51fd\u6570\u7684\u7b2c\u4e00\u6761\u8bed\u53e5&#xff0c;<br \/>\n          \/\/ \u91cd\u65b0\u8bbe\u7f6eint3\u65ad\u70b9&#xff0c;\u4ee5\u7b49\u5f85\u4e0b\u4e00\u6b21LoadLibraryExW\u51fd\u6570\u8c03\u7528<br \/>\n          SetBreakPoint(g_pfnLoadLibraryExWAddress);<\/p>\n<p>          \/\/ \u7ee7\u7eed\u8fd0\u884c<br \/>\n          return EXCEPTION_CONTINUE_EXECUTION;<br \/>\n     }<\/p>\n<p>     \/\/ \u975eint3\u65ad\u70b9\u548c\u5355\u6b65\u4e2d\u65ad\u90fd\u4e0d\u5904\u7406<br \/>\n     return EXCEPTION_CONTINUE_SEARCH;<br \/>\n}<\/p>\n<p>BYTE SetBreakPoint(LPVOID lpCodeAddr)<br \/>\n{<br \/>\n     BYTE bOriginalCodeByte;<br \/>\n     BYTE bInt3 &#061; 0xCC;<\/p>\n<p>     \/\/ \u8bfb\u53d6LoadLibraryExW\u51fd\u6570\u7684\u7b2c\u4e00\u4e2a\u6307\u4ee4\u7801<br \/>\n     ReadProcessMemory(GetCurrentProcess(), lpCodeAddr, &amp;bOriginalCodeByte,<br \/>\n          sizeof(bOriginalCodeByte), NULL);<\/p>\n<p>     \/\/ \u8bbe\u7f6eint3\u65ad\u70b9<br \/>\n     WriteProcessMemory(GetCurrentProcess(), lpCodeAddr, &amp;bInt3, sizeof(bInt3), NULL);<\/p>\n<p>     return bOriginalCodeByte;<br \/>\n}<\/p>\n<p>VOID RemoveBreakPoint(LPVOID lpCodeAddr, BYTE bOriginalCodeByte)<br \/>\n{<br \/>\n     WriteProcessMemory(GetCurrentProcess(), lpCodeAddr, &amp;bOriginalCodeByte,<br \/>\n          sizeof(bOriginalCodeByte), NULL);<br \/>\n}<\/p>\n<p>VOID LoadLibraryExWCustomActions(LPVOID lpCodeAddr, LPVOID lpStackAddr)<br \/>\n{<br \/>\n     TCHAR szDllName[MAX_PATH] &#061; { 0 };<\/p>\n<p>     ReadProcessMemory(GetCurrentProcess(), (LPVOID)(*(LPDWORD)((LPBYTE)lpStackAddr &#043; 4)),<br \/>\n          szDllName, sizeof(szDllName), NULL);<\/p>\n<p>     \/\/ \u52a8\u6001\u94fe\u63a5\u5e93\u540d\u79f0\u663e\u793a\u5230CreateProcessInjectDll\u7a0b\u5e8f\u7684\u7f16\u8f91\u63a7\u4ef6\u4e2d<br \/>\n     SendDlgItemMessage(g_hwndDlg, 1002, EM_SETSEL, -1, -1);<br \/>\n     SendDlgItemMessage(g_hwndDlg, 1002, EM_REPLACESEL, TRUE, (LPARAM)szDllName);<br \/>\n     SendDlgItemMessage(g_hwndDlg, 1002, EM_REPLACESEL, TRUE, (LPARAM)TEXT(&#034;\\\\ r\\\\n&#034;));<br \/>\n}<\/p>\n<p>\u5bf9VEHBreakPoint.dll\u8fdb\u884c\u6d4b\u8bd5\u5e76\u4e0d\u9700\u8981\u91cd\u65b0\u7f16\u5199\u4e00\u4e2a\u7a0b\u5e8f&#xff0c;\u76f4\u63a5\u4f7f\u7528Chapter6\\\\CreateProcessInjectDll\u9879\u76ee&#xff0c;\u628aCreateProcessInjectDll.cpp\u6e90\u6587\u4ef6\u4e2dCreateProcessAndInjectDll\u51fd\u6570\u7684szDllPath\u53d8\u91cf\u4fee\u6539\u4e3aChapter8\\\\VEHBreakPoint\\\\Debug\\\\VEHBreakPoint.dll\u5373\u53ef&#xff0c;\u5f53\u7136&#xff0c;CreateProcessInjectDll\u7a0b\u5e8f\u9700\u8981\u6dfb\u52a0\u4e00\u4e2a\u591a\u884c\u7f16\u8f91\u63a7\u4ef6\u7528\u4e8e\u663e\u793a\u76ee\u6807\u8fdb\u7a0b\u52a0\u8f7d\u7684\u6a21\u5757\u540d\u79f0&#xff0c;\u5982\u539f\u4e66\u7684\u56fe8.5\u6240\u793a\u3002<\/p>\n<p>\u53e6\u5916&#xff0c;\u83b7\u53d6KernelBase.LoadLibraryExW\u51fd\u6570\u7684\u5730\u5740\u4f7f\u7528\u7684\u662fGetProcAddress (GetModuleHandle(TEXT (\u201cKernelBase.dll\u201d)), \u201cLoadLibraryExW\u201d);\u8bed\u53e5\u3002\u867d\u7136 CreateProcessInjectDll \u7a0b\u5e8f\u4f7f\u7528\u7684\u662fCREATE_SUSPENDED\u6807\u5fd7\u8c03\u7528CreateProcess\u51fd\u6570\u521b\u5efa\u7684\u76ee\u6807\u8fdb\u7a0b&#xff0c;\u6b64\u65f6\u5b50\u8fdb\u7a0b\u8fd8\u6ca1\u6709\u521d\u59cb\u5316\u5b8c\u6bd5\u3001\u5165\u53e3\u4ee3\u7801\u8fd8\u6ca1\u6709\u6267\u884c&#xff0c;\u4f46\u662f\u4e00\u4e9b\u6838\u5fc3\u6a21\u5757\u4f8b\u5982Kernel32.dll\u3001User32.dll\u3001Gdi32.dll\u548cKernelBase.dll\u7b49\u90fd\u5df2\u7ecf\u6210\u529f\u52a0\u8f7d\u3002<\/p>\n<p>LoadLibraryEx\u51fd\u6570\u540c\u6837\u7528\u4e8e\u5c06\u6307\u5b9a\u7684\u6a21\u5757\u52a0\u8f7d\u5230\u8c03\u7528\u8fdb\u7a0b\u7684\u5730\u5740\u7a7a\u95f4\u4e2d&#xff0c;\u4e0eLoadLibrary\u51fd\u6570\u76f8\u6bd4&#xff0c;\u8be5\u51fd\u6570\u53ef\u4ee5\u6307\u5b9a\u52a0\u8f7d\u9009\u9879&#xff1a;<\/p>\n<p>HMODULE WINAPI LoadLibraryEx(<br \/>\n     _In_        LPCTSTR lpLibFileName,      \/\/ \u6a21\u5757\u540d\u79f0&#xff0c;\u53ef\u4ee5\u4f7f\u7528\u76f8\u5bf9\u8def\u5f84\u6216\u7edd\u5bf9\u8def\u5f84<br \/>\n     _Reserved_ HANDLE  hFile,               \/\/ \u4fdd\u7559\u53c2\u6570&#xff0c;\u5fc5\u987b\u4e3aNULL<br \/>\n     _In_        DWORD   dwFlags);            \/\/ \u52a0\u8f7d\u9009\u9879<\/p>\n<ul>\n<li>\n<p>lpLibFileName\u53c2\u6570\u6307\u5b9a\u6a21\u5757\u540d\u79f0&#xff0c;\u53ef\u4ee5\u4f7f\u7528\u76f8\u5bf9\u8def\u5f84\u6216\u7edd\u5bf9\u8def\u5f84&#xff0c;\u8be5\u51fd\u6570\u91c7\u7528\u4e0eCreateProcess\u51fd\u6570\u7684lpCommandLine\u53c2\u6570\u76f8\u540c\u7684\u641c\u7d22\u987a\u5e8f\u6765\u641c\u7d22\u6a21\u5757\u6587\u4ef6\u3002<\/p>\n<\/li>\n<li>\n<p>dwFlags\u53c2\u6570\u6307\u5b9a\u52a0\u8f7d\u9009\u9879&#xff0c;\u5982\u679c\u8be5\u53c2\u6570\u8bbe\u7f6e\u4e3a0&#xff0c;\u5219\u76f8\u5f53\u4e8eLoadLibrary\u51fd\u6570\u3002dwFlags\u53c2\u6570\u5e38\u7528\u7684\u503c\u5982\u88688.5\u6240\u793a\u3002<\/p>\n<\/li>\n<\/ul>\n<p>\u88688.5<\/p>\n<table>\n<tr>\u5e38\u91cf\u542b\u4e49<\/tr>\n<tbody>\n<tr>\n<td>DONT_RESOLVE_DLL_REFERENCES(0x00000001)<\/td>\n<td>\u901a\u5e38\u4e0d\u4f7f\u7528\u8be5\u6807\u5fd7\u3002\u5982\u679c\u6307\u5b9a\u4e86\u8be5\u6807\u5fd7&#xff0c;\u5e76\u4e14lpLibFileName\u53c2\u6570\u6307\u5b9a\u7684\u662fDLL\u6a21\u5757&#xff0c;\u5219\u7cfb\u7edf\u4e0d\u4f1a\u8c03\u7528DllMain\u8fdb\u884c\u8fdb\u7a0b\u548c\u7ebf\u7a0b\u7684\u521d\u59cb\u5316\u4e0e\u6e05\u7406\u5de5\u4f5c&#xff0c;\u53e6\u5916&#xff0c;\u7cfb\u7edf\u4e0d\u4f1a\u52a0\u8f7dlpLibFileName\u6a21\u5757\u5f15\u7528\u7684\u5176\u4ed6\u6a21\u5757&#xff08;\u901a\u5e38&#xff0c;\u88ab\u52a0\u8f7d\u6a21\u5757\u5f88\u53ef\u80fd\u8fd8\u4f1a\u52a0\u8f7d\u5176\u4ed6\u6a21\u5757&#xff09;<\/td>\n<\/tr>\n<tr>\n<td>LOAD_LIBRARY_AS_DATAFILE(0x00000002)<\/td>\n<td>\u628alpLibFileName\u53c2\u6570\u6307\u5b9a\u7684\u6a21\u5757\u4f5c\u4e3a\u6570\u636e\u6587\u4ef6\u6765\u6620\u5c04\u5230\u8c03\u7528\u8fdb\u7a0b\u7684\u865a\u62df\u5730\u5740\u7a7a\u95f4\u4e2d&#xff0c;\u6620\u5c04\u540e\u8be5\u6a21\u5757\u6ca1\u6709\u53ef\u6267\u884c\u5c5e\u6027&#xff0c;\u6307\u5b9a\u8be5\u6807\u5fd7\u6765\u52a0\u8f7d.exe\u6216.dll\u6587\u4ef6\u901a\u5e38\u662f\u4e3a\u4e86\u4f7f\u7528\u5176\u4e2d\u7684\u8d44\u6e90&#xff0c;LoadLibraryEx\u51fd\u6570\u4f1a\u8fd4\u56de\u4e00\u4e2a\u6a21\u5757\u53e5\u67c4&#xff0c;\u7136\u540e\u53ef\u4ee5\u901a\u8fc7\u4f7f\u7528\u8fd4\u56de\u7684\u6a21\u5757\u53e5\u67c4\u6765\u8c03\u7528\u76f8\u5173\u7684\u52a0\u8f7d\u8d44\u6e90\u51fd\u6570\u3002\u8be5\u6807\u5fd7\u53ef\u4ee5\u4e0eLOAD_LIBRARY_AS_IMAGE_RESOURCE\u4e00\u8d77\u4f7f\u7528<\/td>\n<\/tr>\n<tr>\n<td>LOAD_LIBRARY_AS_DATAFILE_EXCLUSIVE(0x00000040)<\/td>\n<td>\u4e0eLOAD_LIBRARY_AS_DATAFILE\u76f8\u4f3c&#xff0c;\u4e0d\u540c\u4e4b\u5904\u5728\u4e8e\u6a21\u5757\u6587\u4ef6\u662f\u4ee5\u72ec\u5360\u8bbf\u95ee\u6a21\u5f0f\u6253\u5f00&#xff0c;\u4ece\u800c\u7981\u6b62\u4efb\u4f55\u5176\u4ed6\u7a0b\u5e8f\u5728\u5f53\u524d\u7a0b\u5e8f\u4f7f\u7528\u8be5\u6a21\u5757\u6587\u4ef6\u7684\u65f6\u5019\u5bf9\u5176\u8fdb\u884c\u4fee\u6539\u3002\u8be5\u6807\u5fd7\u53ef\u4ee5\u4e0eLOAD_LIBRARY_AS_IMAGE_RESOURCE\u4e00\u8d77\u4f7f\u7528<\/td>\n<\/tr>\n<tr>\n<td>LOAD_LIBRARY_AS_IMAGE_RESOURCE(0x00000020)<\/td>\n<td>\u628alpLibFileName\u53c2\u6570\u6307\u5b9a\u7684\u6a21\u5757\u4f5c\u4e3a\u6620\u50cf\u6587\u4ef6\u6765\u6620\u5c04\u5230\u8c03\u7528\u8fdb\u7a0b\u7684\u865a\u62df\u5730\u5740\u7a7a\u95f4\u4e2d&#xff0c;\u7cfb\u7edf\u4f1a\u5bf9\u6a21\u5757\u4e2d\u7684\u76f8\u5bf9\u865a\u62df\u5730\u5740&#xff08;Relative Virtual Address&#xff0c;RVA&#xff09;\u8fdb\u884c\u4fee\u590d&#xff0c;\u8fd9\u6837\u4e00\u6765\u7528\u6237\u53ef\u4ee5\u76f4\u63a5\u4f7f\u7528\u6a21\u5757\u4e2d\u7684\u865a\u62df\u5730\u5740&#xff0c;\u4e0d\u5fc5\u518d\u6839\u636e\u6a21\u5757\u5b9e\u9645\u6620\u5c04\u5230\u7684\u5185\u5b58\u5730\u5740\u5bf9\u5b83\u4eec\u8fdb\u884c\u8f6c\u6362<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>\u5f53\u4e0d\u518d\u9700\u8981\u6240\u52a0\u8f7d\u7684\u6a21\u5757\u65f6&#xff0c;\u5e94\u8be5\u8c03\u7528FreeLibrary\u51fd\u6570\u91ca\u653e\u8be5\u6a21\u5757&#xff0c;FreeLibrary\u51fd\u6570\u4f1a\u51cf\u5c11\u5f15\u7528\u8ba1\u6570\u3002\u5982\u679c\u5f15\u7528\u8ba1\u6570\u4e3a0&#xff0c;\u7cfb\u7edf\u4f1a\u4ece\u8fdb\u7a0b\u7684\u5730\u5740\u7a7a\u95f4\u4e2d\u53d6\u6d88\u6a21\u5757\u7684\u6620\u5c04&#xff0c;\u6a21\u5757\u53e5\u67c4\u4e0d\u518d\u6709\u6548\u3002<\/p>\n<p>\u901a\u8fc7\u524d\u9762\u7684\u5b66\u4e60\u6211\u4eec\u77e5\u9053&#xff0c;\u5f53\u4e00\u4e2a\u5f02\u5e38\u53d1\u751f\u65f6&#xff0c;\u7cfb\u7edf\u4f1a\u9996\u5148\u67e5\u770b\u4ea7\u751f\u5f02\u5e38\u7684\u8fdb\u7a0b\u662f\u5426\u6b63\u5728\u88ab\u8c03\u8bd5\u3002\u5982\u679c\u6b63\u5728\u88ab\u8c03\u8bd5&#xff0c;\u5219\u4f1a\u5411\u8c03\u8bd5\u5668\u53d1\u9001\u4e00\u4e2aEXCEPTION_DEBUG_EVENT\u4e8b\u4ef6&#xff1b;\u5982\u679c\u8fdb\u7a0b\u6ca1\u6709\u88ab\u8c03\u8bd5\u6216\u8005\u8c03\u8bd5\u5668\u4e0d\u5904\u7406\u8be5\u5f02\u5e38&#xff0c;\u5219\u4f1a\u8c03\u7528\u7528\u6237\u5c42\u7684\u5f02\u5e38\u5904\u7406\u7a0b\u5e8f&#xff08;\u5982\u679c\u6709&#xff09;&#xff0c;\u8c03\u8bd5\u5668\u4e5f\u76f8\u5f53\u4e8e\u4e00\u4e2a\u5f02\u5e38\u5904\u7406\u7a0b\u5e8f\u5e76\u88ab\u9996\u5148\u8c03\u7528\u3002\u5982\u679c\u8fdb\u7a0b\u6ca1\u6709\u88ab\u8c03\u8bd5\u6216\u8c03\u8bd5\u5668\u4e0d\u5904\u7406\u8be5\u5f02\u5e38&#xff0c;\u6211\u4eec\u5b66\u4e60\u8fc7\u7ed3\u6784\u5316\u5f02\u5e38\u5904\u7406\u548c\u57fa\u4e8e\u8fdb\u7a0b\u5168\u5c40\u7684\u5411\u91cf\u5316\u5f02\u5e38\u5904\u7406&#xff0c;\u968f\u7740\u5c42\u5c42\u51fd\u6570\u8c03\u7528&#xff0c;\u6240\u6709\u7684\u6808\u4e0a\u7ed3\u6784\u5316\u5f02\u5e38\u5904\u7406\u7a0b\u5e8f\u4f1a\u5f62\u6210\u4e00\u4e2aSEH\u94fe\u8868&#xff0c;\u7a0b\u5e8f\u4e5f\u53ef\u4ee5\u901a\u8fc7\u591a\u6b21\u8c03\u7528AddVectoredExceptionHandler\u51fd\u6570\u6765\u6dfb\u52a0\u591a\u4e2a\u5411\u91cf\u5316\u5f02\u5e38\u5904\u7406\u7a0b\u5e8f\u5f62\u6210\u4e00\u4e2a\u5411\u91cf\u5316\u94fe\u8868&#xff0c;\u5728\u8fd9\u79cd\u60c5\u51b5\u4e0b&#xff0c;\u7cfb\u7edf\u5148\u6309\u7167VEH\u94fe\u8868\u987a\u5e8f\u9010\u4e2a\u8c03\u7528\u5411\u91cf\u5316\u5f02\u5e38\u5904\u7406\u7a0b\u5e8f&#xff0c;\u5982\u679c\u67d0\u4e2a\u5411\u91cf\u5316\u5f02\u5e38\u5904\u7406\u7a0b\u5e8f\u53ef\u4ee5\u5904\u7406\u5f02\u5e38&#xff0c;\u5219VEH\u94fe\u8868\u4e2d\u7684\u5176\u4ed6\u5f02\u5e38\u5904\u7406\u7a0b\u5e8f\u548c\u7ed3\u6784\u5316\u5f02\u5e38\u8fc7\u6ee4\u7a0b\u5e8f\u4e0d\u4f1a\u518d\u88ab\u6267\u884c&#xff1b;\u5982\u679c\u6240\u6709\u7684VEH\u5f02\u5e38\u5904\u7406\u7a0b\u5e8f\u90fd\u4e0d\u80fd\u5904\u7406\u5f02\u5e38&#xff0c;\u5219\u7ed3\u6784\u5316\u5f02\u5e38\u8fc7\u6ee4\u7a0b\u5e8f\u5c31\u4f1a\u6267\u884c\u3002\u5173\u4e8e\u5f02\u5e38\u5904\u7406\u4f18\u5148\u7ea7&#xff0c;\u8bfb\u8005\u53ef\u4ee5\u81ea\u884c\u6d4b\u8bd5ExceptionHandlingPriority\u9879\u76ee\u3002<\/p>\n<h3>8.3\u3000\u9876\u5c42\u672a\u5904\u7406\u5f02\u5e38\u8fc7\u6ee4&#xff08;\u5168\u5c40&#xff09;<\/h3>\n<p>\u5f53\u4e00\u4e2a\u5f02\u5e38\u53d1\u751f\u65f6&#xff0c;\u5982\u679c\u8fdb\u7a0b\u4e2d\u6240\u6709\u7684\u5411\u91cf\u5316\u5f02\u5e38\u5904\u7406\u7a0b\u5e8f\u90fd\u4e0d\u5904\u7406\u8fd9\u4e2a\u5f02\u5e38&#xff0c;\u5f53\u524d\u7ebf\u7a0b\u4e2d\u6240\u6709\u7684\u7ed3\u6784\u5316\u5f02\u5e38\u5904\u7406\u7a0b\u5e8f\u4e5f\u4e0d\u5904\u7406\u8fd9\u4e2a\u5f02\u5e38&#xff0c;\u5c31\u4f1a\u4ea7\u751f\u4e00\u4e2a\u672a\u5904\u7406\u5f02\u5e38&#xff0c;Windows\u5bf9\u672a\u5904\u7406\u5f02\u5e38\u7684\u9ed8\u8ba4\u5904\u7406\u65b9\u5f0f\u662f\u7ed3\u675f\u8fdb\u7a0b\u3002\u4e0d\u5904\u7406\u8fd9\u4e2a\u5f02\u5e38\u6307\u7684\u662f\u6ca1\u6709\u76f8\u5173\u5f02\u5e38\u5904\u7406\u7a0b\u5e8f&#xff08;\u6216\u5f02\u5e38\u8fc7\u6ee4\u7a0b\u5e8f&#xff09;&#xff0c;\u6216\u8005\u5f02\u5e38\u5904\u7406\u7a0b\u5e8f&#xff08;\u6216\u5f02\u5e38\u8fc7\u6ee4\u7a0b\u5e8f&#xff09;\u8fd4\u56deEXCEPTION_CONTINUE_SEARCH\u3002<\/p>\n<p>\u7a0b\u5e8f\u53ef\u4ee5\u901a\u8fc7\u8c03\u7528SetUnhandledExceptionFilter\u51fd\u6570\u8bbe\u7f6e\u4e00\u4e2a\u9876\u5c42\u672a\u5904\u7406\u5f02\u5e38\u8fc7\u6ee4\u5668&#xff0c;\u5f53\u8fdb\u7a0b\u4e2d\u53d1\u751f\u672a\u5904\u7406\u5f02\u5e38\u65f6&#xff0c;\u4f1a\u8c03\u7528\u6307\u5b9a\u7684\u9876\u5c42\u672a\u5904\u7406\u5f02\u5e38\u8fc7\u6ee4\u5668\u51fd\u6570lpTopLevelExceptionFilter&#xff1a;<\/p>\n<p>LPTOP_LEVEL_EXCEPTION_FILTER SetUnhandledExceptionFilter(<br \/>\n     LPTOP_LEVEL_EXCEPTION_FILTER lpTopLevelExceptionFilter); \/\/ \u9876\u5c42\u672a\u5904\u7406\u5f02\u5e38\u8fc7\u6ee4\u5668\u51fd\u6570\u7684\u6307\u9488<\/p>\n<p>\u524d\u9762\u8bf4\u8fc7\u6240\u6709\u7684\u5f02\u5e38\u5904\u7406\u90fd\u4ece\u5185\u6838\u5e95\u5c42\u7684\u5f02\u5e38\u5904\u7406\u7a0b\u5e8f\u5f00\u59cb&#xff0c;\u5e95\u5c42\u5f02\u5e38\u5904\u7406\u7a0b\u5e8f\u518d\u53bb\u8c03\u7528\u7528\u6237\u5c42\u7684\u5f02\u5e38\u5904\u7406\u7a0b\u5e8f&#xff08;\u5982\u679c\u6709&#xff09;&#xff0c;\u6240\u8c13\u9876\u5c42\u6307\u7684\u662f\u5f02\u5e38\u5904\u7406\u4f18\u5148\u7ea7&#xff0c;\u6211\u4eec\u77e5\u9053\u7528\u6237\u5c42\u6709VEH\u3001SEH\u548cUEF&#xff0c;\u5f53\u4e00\u4e2a\u5f02\u5e38\u53d1\u751f\u65f6&#xff0c;\u7528\u6237\u5c42\u5f02\u5e38\u5904\u7406\u7684\u4f18\u5148\u7ea7\u4e3aVEH \u2192 SEH \u2192 UEF\u3002<\/p>\n<p>LPTOP_LEVEL_EXCEPTION_FILTER\u6570\u636e\u7c7b\u578b\u5728errhandlingapi.h\u5934\u6587\u4ef6\u4e2d\u5b9a\u4e49\u5982\u4e0b&#xff1a;<\/p>\n<p>typedef LONG(WINAPI* PTOP_LEVEL_EXCEPTION_FILTER)(PEXCEPTION_POINTERS ExceptionInfo);<br \/>\ntypedef PTOP_LEVEL_EXCEPTION_FILTER LPTOP_LEVEL_EXCEPTION_FILTER;<\/p>\n<p>\u9876\u5c42\u672a\u5904\u7406\u5f02\u5e38\u8fc7\u6ee4\u5668\u51fd\u6570lpTopLevelExceptionFilter\u5e94\u8be5\u5b9a\u4e49\u4e3a\u5982\u4e0b\u683c\u5f0f&#xff1a;<\/p>\n<p>LONG WINAPI TopLevelUnhandledExceptionFilter(PEXCEPTION_POINTERS ExceptionInfo);<\/p>\n<p>\u9876\u5c42\u672a\u5904\u7406\u5f02\u5e38\u8fc7\u6ee4\u5668\u51fd\u6570\u53ef\u4ee5\u8fd4\u56deEXCEPTION_EXECUTE_HANDLER\u3001EXCEPTION_CONTINUE_SEARCH\u6216EXCEPTION_CONTINUE_EXECUTION&#xff08;\u89c1\u88688.6&#xff09;\u3002<\/p>\n<p>\u88688.6<\/p>\n<table>\n<tr>\u8fd4\u56de\u503c\u542b\u4e49<\/tr>\n<tbody>\n<tr>\n<td>EXCEPTION_EXECUTE_HANDLER<\/td>\n<td>\u5b9e\u9645\u4e0a\u7528\u6237\u8bbe\u7f6e\u7684\u9876\u5c42\u672a\u5904\u7406\u5f02\u5e38\u8fc7\u6ee4\u5668\u51fd\u6570\u662f\u7531Kernel32.dll\u4e2d\u7684UnhandledExceptionFilter\u51fd\u6570\u8c03\u7528\u7684&#xff0c;\u5982\u679c\u9876\u5c42\u672a\u5904\u7406\u5f02\u5e38\u8fc7\u6ee4\u5668\u51fd\u6570\u8fd4\u56deEXCEPTION_EXECUTE_HANDLER&#xff0c;\u90a3\u4e48\u7cfb\u7edf\u4f1a\u4eceKernel32.UnhandledExceptionFilter\u51fd\u6570\u8fd4\u56de&#xff0c;\u5e76\u4e0d\u52a0\u63d0\u793a\u5730\u7ec8\u6b62\u8fdb\u7a0b<\/td>\n<\/tr>\n<tr>\n<td>EXCEPTION_CONTINUE_SEARCH<\/td>\n<td>\u7ee7\u7eed\u6b63\u5e38\u6267\u884cKernel32.UnhandledExceptionFilter\u51fd\u6570&#xff0c;\u9876\u5c42\u672a\u5904\u7406\u5f02\u5e38\u8fc7\u6ee4\u5668\u662fWindows\u63d0\u4f9b\u7ed9\u7528\u6237\u7684\u6700\u540e\u5904\u7406\u5f02\u5e38\u7684\u673a\u4f1a&#xff0c;\u8fd4\u56deEXCEPTION_CONTINUE_SEARCH\u8868\u793a\u5f02\u5e38\u6ca1\u6709\u5f97\u5230\u4efb\u4f55\u5904\u7406&#xff0c;\u56e0\u6b64\u4f1a\u6267\u884c\u7cfb\u7edf\u9ed8\u8ba4\u7684\u672a\u5904\u7406\u5f02\u5e38\u7a0b\u5e8f&#xff08;\u7ec8\u6b62\u8fdb\u7a0b&#xff0c;\u6709\u5df2\u7ec8\u6b62\u5de5\u4f5c\u9519\u8bef\u63d0\u793a&#xff09;<\/td>\n<\/tr>\n<tr>\n<td>EXCEPTION_CONTINUE_EXECUTION<\/td>\n<td>\u4eceKernel32.UnhandledExceptionFilter\u51fd\u6570\u8fd4\u56de&#xff0c;\u5e76\u91cd\u65b0\u6267\u884c\u53d1\u751f\u5f02\u5e38\u7684\u6307\u4ee4&#xff0c;\u6211\u4eec\u53ef\u4ee5\u901a\u8fc7\u4fee\u6539\u9876\u5c42\u672a\u5904\u7406\u5f02\u5e38\u8fc7\u6ee4\u5668\u51fd\u6570\u7684ExceptionInfo\u53c2\u6570\u6307\u5411\u7684\u5f02\u5e38\u4fe1\u606f\u6765\u4fee\u590d\u5f02\u5e38<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>SetUnhandledExceptionFilter\u51fd\u6570\u7684\u8fd4\u56de\u503c\u662f\u5148\u524d\u7684\u9876\u5c42\u672a\u5904\u7406\u5f02\u5e38\u8fc7\u6ee4\u5668\u51fd\u6570\u7684\u5730\u5740&#xff0c;\u5982\u679c\u5148\u524d\u6ca1\u6709\u8bbe\u7f6e\u9876\u5c42\u672a\u5904\u7406\u5f02\u5e38\u8fc7\u6ee4\u5668\u51fd\u6570&#xff0c;\u5219\u8fd4\u56de\u503c\u4e3aNULL\u3002\u9876\u5c42\u672a\u5904\u7406\u5f02\u5e38\u8fc7\u6ee4\u5668\u662f\u57fa\u4e8e\u8fdb\u7a0b\u5168\u5c40\u7684&#xff0c;\u8fdb\u7a0b\u4e2d\u53ea\u53ef\u4ee5\u8bbe\u7f6e\u4e00\u4e2a\u9876\u5c42\u672a\u5904\u7406\u5f02\u5e38\u8fc7\u6ee4\u5668\u51fd\u6570&#xff0c;\u5f53\u8c03\u7528SetUnhandledExceptionFilter\u51fd\u6570\u8bbe\u7f6e\u4e00\u4e2a\u65b0\u7684\u8fc7\u6ee4\u5668\u65f6&#xff0c;\u5c31\u4f1a\u66ff\u6362\u6389\u5148\u524d\u7684\u8fc7\u6ee4\u5668\u51fd\u6570\u3002\u5982\u679cSetUnhandledExceptionFilter\u51fd\u6570\u7684lpTopLevelExceptionFilter\u53c2\u6570\u8bbe\u7f6e\u4e3aNULL\u8868\u793a\u6267\u884cUnhandledExceptionFilter\u51fd\u6570\u7684\u7cfb\u7edf\u9ed8\u8ba4\u5f02\u5e38\u5904\u7406\u7a0b\u5e8f&#xff08;\u5373\u5c06\u9876\u5c42\u672a\u5904\u7406\u5f02\u5e38\u8fc7\u6ee4\u5668\u51fd\u6570\u6062\u590d\u8bbe\u7f6e\u4e3aUnhandledExceptionFilter&#xff09;\u3002<\/p>\n<p>\u9876\u5c42\u672a\u5904\u7406\u5f02\u5e38\u8fc7\u6ee4\u5668\u57fa\u4e8e\u8fdb\u7a0b\u5168\u5c40\u3002\u5f53\u4e00\u4e2a\u5f02\u5e38\u5230\u8fbe\u8fd9\u91cc\u65f6&#xff0c;\u8fdb\u7a0b\u5185\u5b58\u901a\u5e38\u5df2\u7ecf\u5904\u4e8e\u88ab\u7834\u574f\u7684\u72b6\u6001&#xff0c;\u6240\u4ee5\u9876\u5c42\u672a\u5904\u7406\u5f02\u5e38\u8fc7\u6ee4\u5668\u51fd\u6570\u901a\u5e38\u4e0d\u9002\u5408\u8fd4\u56deEXCEPTION_CONTINUE_EXECUTION\u4ee5\u91cd\u65b0\u6267\u884c\u53d1\u751f\u5f02\u5e38\u7684\u6307\u4ee4&#xff0c;\u5728\u9876\u5c42\u672a\u5904\u7406\u5f02\u5e38\u8fc7\u6ee4\u5668\u51fd\u6570\u4e2d\u901a\u5e38\u5e94\u8be5\u83b7\u53d6\u5f02\u5e38\u4fe1\u606f\u5411\u670d\u52a1\u5668\u53d1\u9001\u9519\u8bef\u62a5\u544a&#xff0c;\u6216\u8005dump\u9519\u8bef\u4fe1\u606f\u5230\u672c\u5730\u3002<\/p>\n<p>\u8fd8\u6709\u5f88\u91cd\u8981\u7684\u4e00\u70b9&#xff0c;\u5982\u679c\u8fdb\u7a0b\u6b63\u5728\u88ab\u8c03\u8bd5&#xff0c;\u5219\u4e0d\u4f1a\u6267\u884c\u9876\u5c42\u672a\u5904\u7406\u5f02\u5e38\u8fc7\u6ee4\u5668\u51fd\u6570\u7684&#xff0c;\u5229\u7528\u8fd9\u4e00\u7279\u6027\u53ef\u4ee5\u8fdb\u884c\u53cd\u8c03\u8bd5\u3002\u4f46\u662f\u524d\u9762\u8bf4\u8fc7\u5b9e\u9645\u4e0a\u7528\u6237\u8bbe\u7f6e\u7684\u9876\u5c42\u672a\u5904\u7406\u5f02\u5e38\u8fc7\u6ee4\u5668\u51fd\u6570\u662f\u7531Kernel32.dll\u4e2d\u7684UnhandledExceptionFilter\u51fd\u6570\u8c03\u7528\u7684&#xff0c;UnhandledExceptionFilter\u51fd\u6570\u4f1a\u5224\u65ad\u5f53\u524d\u8fdb\u7a0b\u662f\u5426\u6b63\u5728\u88ab\u8c03\u8bd5&#xff08;\u901a\u8fc7\u8c03\u7528Ntdll.ZwQueryInformationProcess\u51fd\u6570&#xff09;&#xff0c;\u5982\u679c\u6b63\u5728\u88ab\u8c03\u8bd5\u5c31\u4e0d\u4f1a\u8c03\u7528\u7528\u6237\u8bbe\u7f6e\u7684\u9876\u5c42\u672a\u5904\u7406\u5f02\u5e38\u8fc7\u6ee4\u5668\u51fd\u6570&#xff0c;\u5229\u7528\u8fd9\u4e00\u7279\u6027\u53ef\u4ee5\u5b9e\u73b0\u53cd\u53cd\u8c03\u8bd5\u3002<\/p>\n<h3>8.4\u3000\u5411\u91cf\u5316\u7ee7\u7eed\u5904\u7406&#xff08;\u5168\u5c40&#xff09;<\/h3>\n<p>\u4e0e\u5411\u91cf\u5316\u5f02\u5e38\u5904\u7406\u7c7b\u4f3c&#xff0c;\u8fd8\u6709\u4e00\u4e2a\u5411\u91cf\u5316\u7ee7\u7eed\u5904\u7406&#xff08;Vectored Continue Handling&#xff0c;VCH&#xff09;\u3002\u7a0b\u5e8f\u53ef\u4ee5\u901a\u8fc7\u8c03\u7528AddVectoredContinueHandler\u51fd\u6570\u6dfb\u52a0\u6216\u8005\u6ce8\u518c\u4e00\u4e2a\u5411\u91cf\u5316\u7ee7\u7eed\u5904\u7406\u7a0b\u5e8f&#xff0c;\u591a\u6b21\u8c03\u7528AddVectoredContinueHandler\u51fd\u6570\u6dfb\u52a0\u591a\u4e2a\u7ee7\u7eed\u5904\u7406\u7a0b\u5e8f&#xff0c;\u6240\u6709\u5411\u91cf\u5316\u7ee7\u7eed\u5904\u7406\u7a0b\u5e8f\u90fd\u4f1a\u88ab\u6dfb\u52a0\u5230\u94fe\u8868\u4e2d\u3002AddVectoredContinueHandler\u4e0eAddVectoredExceptionHandler\u51fd\u6570\u7684\u58f0\u660e\u662f\u76f8\u540c\u7684&#xff1a;<\/p>\n<p>PVOID WINAPI AddVectoredContinueHandler(<br \/>\n     _In_ ULONG                            FirstHandler,         \/\/ \u8c03\u7528\u7ee7\u7eed\u5904\u7406\u7a0b\u5e8f\u7684\u987a\u5e8f&#xff0c;\u96f6\u6216\u975e\u96f6<br \/>\n     _In_ PVECTORED_EXCEPTION_HANDLER VectoredHandler);     \/\/ \u7ee7\u7eed\u5904\u7406\u7a0b\u5e8f\u6307\u9488&#xff0c;\u56de\u8c03\u51fd\u6570<\/p>\n<p>\u5f53\u4e0d\u518d\u9700\u8981\u4e4b\u524d\u6ce8\u518c\u7684\u5411\u91cf\u5316\u7ee7\u7eed\u5904\u7406\u7a0b\u5e8f\u65f6&#xff0c;\u53ef\u4ee5\u8c03\u7528RemoveVectored ContinueHandler\u5220\u9664\u8be5\u7a0b\u5e8f&#xff1a;<\/p>\n<p>ULONG WINAPI RemoveVectoredContinueHandler(_In_ PVOID pHandler);<\/p>\n<p>pHandler\u53c2\u6570\u662f\u5148\u524d\u8c03\u7528AddVectoredContinueHandler\u51fd\u6570\u6ce8\u518c\u7684\u5411\u91cf\u5316\u7ee7\u7eed\u5904\u7406\u7a0b\u5e8f\u7684\u53e5\u67c4\u3002<\/p>\n<p>\u5411\u91cf\u5316\u7ee7\u7eed\u5904\u7406\u548c\u5411\u91cf\u5316\u5f02\u5e38\u5904\u7406\u7684\u76f8\u5173\u51fd\u6570\u4f7f\u7528\u65b9\u6cd5\u5b8c\u5168\u76f8\u540c&#xff0c;\u5728\u6b64\u4e0d\u518d\u91cd\u590d\u53d9\u8ff0\u3002\u4f46\u662f&#xff0c;\u5411\u91cf\u5316\u7ee7\u7eed\u5904\u7406\u548c\u5411\u91cf\u5316\u5f02\u5e38\u5904\u7406\u7684\u884c\u4e3a\u4e0d\u540c&#xff0c;\u5982\u539f\u4e66\u7684\u56fe8.6\u6240\u793a\u3002<\/p>\n<p>\u5728\u56fe8.6\u4e2d&#xff0c;\u65e0\u6cd5\u5904\u7406\u5f02\u5e38\u6307\u7684\u662f\u6ca1\u6709\u76f8\u5173\u5f02\u5e38\u5904\u7406\u7a0b\u5e8f&#xff08;\u6216\u5f02\u5e38\u8fc7\u6ee4\u7a0b\u5e8f&#xff09;&#xff0c;\u6216\u8005\u5f02\u5e38\u5904\u7406\u7a0b\u5e8f&#xff08;\u6216\u5f02\u5e38\u8fc7\u6ee4\u7a0b\u5e8f&#xff09;\u8fd4\u56deEXCEPTION_CONTINUE_SEARCH&#xff1b;\u53ef\u4ee5\u5904\u7406\u5f02\u5e38\u662f\u6307\u6b63\u786e\u4fee\u590d\u4e86\u53d1\u751f\u5f02\u5e38\u7684\u6307\u4ee4\u5e76\u8fd4\u56deEXCEPTION_CONTINUE_EXECUTION\u3002\u53ef\u4ee5\u770b\u5230&#xff0c;\u53ea\u6709\u5728VEH\u3001SEH\u6216UEF\u5176\u4e2d\u4e4b\u4e00\u53ef\u4ee5\u5904\u7406\u5f02\u5e38\u7684\u60c5\u51b5\u4e0b\u624d\u4f1a\u6267\u884c\u5411\u91cf\u5316\u7ee7\u7eed\u5904\u7406\u7a0b\u5e8f\u3002<\/p>\n<p>\u5f53\u4e00\u4e2a\u5f02\u5e38\u53d1\u751f\u65f6&#xff0c;\u5f02\u5e38\u5904\u7406\u8fc7\u7a0b\u5982\u4e0b&#xff08;\u6d89\u53ca\u5185\u6838\u5c42\u6b21\u7684\u5904\u7406\u8fc7\u7a0b\u8fd9\u91cc\u4e0d\u4f5c\u7814\u7a76&#xff09;\u3002<\/p>\n<p>&#xff08;1&#xff09;\u901a\u77e5\u8c03\u8bd5\u5668\u3002\u5f53\u4e00\u4e2a\u5f02\u5e38\u53d1\u751f\u65f6&#xff0c;\u7cfb\u7edf\u4f1a\u9996\u5148\u67e5\u770b\u4ea7\u751f\u5f02\u5e38\u7684\u8fdb\u7a0b\u662f\u5426\u6b63\u5728\u88ab\u8c03\u8bd5\u3002\u5982\u679c\u6b63\u5728\u88ab\u8c03\u8bd5&#xff0c;\u5219\u4f1a\u5411\u8c03\u8bd5\u5668\u53d1\u9001\u4e00\u4e2aEXCEPTION_DEBUG_EVENT\u4e8b\u4ef6&#xff1b;\u5982\u679c\u8fdb\u7a0b\u6ca1\u6709\u88ab\u8c03\u8bd5\u6216\u8005\u8c03\u8bd5\u5668\u4e0d\u5904\u7406\u8be5\u5f02\u5e38&#xff0c;\u5219\u4f1a\u8c03\u7528\u7528\u6237\u5c42\u7684\u5f02\u5e38\u5904\u7406\u7a0b\u5e8f&#xff08;\u5982\u679c\u6709&#xff09;\u3002<\/p>\n<p>&#xff08;2&#xff09;\u6267\u884c\u5411\u91cf\u5316\u5f02\u5e38\u5904\u7406\u7a0b\u5e8f\u3002\u7cfb\u7edf\u5728\u6267\u884c\u7ed3\u6784\u5316\u5f02\u5e38\u8fc7\u6ee4\u7a0b\u5e8f\u524d&#xff0c;\u4f1a\u5148\u6309\u7167VEH\u94fe\u8868\u987a\u5e8f\u9010\u4e2a\u8c03\u7528\u5411\u91cf\u5316\u5f02\u5e38\u5904\u7406\u7a0b\u5e8f&#xff0c;\u5982\u679c\u67d0\u4e2a\u5411\u91cf\u5316\u5f02\u5e38\u5904\u7406\u7a0b\u5e8f\u53ef\u4ee5\u4fee\u590d\u53d1\u751f\u7684\u95ee\u9898&#xff0c;\u5219\u5e94\u8be5\u8fd4\u56deEXCEPTION_CONTINUE_EXECUTION&#xff0c;\u4f7f\u629b\u51fa\u5f02\u5e38\u7684\u6307\u4ee4\u518d\u6b21\u6267\u884c&#xff0c;\u53ea\u8981\u67d0\u4e2a\u5411\u91cf\u5316\u5f02\u5e38\u5904\u7406\u7a0b\u5e8f\u8fd4\u56deEXCEPTION_CONTINUE_EXECUTION&#xff0c;VEH\u94fe\u8868\u4e2d\u7684\u5176\u4ed6\u5f02\u5e38\u5904\u7406\u7a0b\u5e8f\u548c\u7ed3\u6784\u5316\u5f02\u5e38\u8fc7\u6ee4\u7a0b\u5e8f\u5c31\u4e0d\u4f1a\u518d\u88ab\u6267\u884c&#xff1b;\u5982\u679c\u4e00\u4e2a\u5411\u91cf\u5316\u5f02\u5e38\u5904\u7406\u7a0b\u5e8f\u4e0d\u80fd\u4fee\u590d\u53d1\u751f\u7684\u95ee\u9898&#xff0c;\u5219\u5e94\u8be5\u8fd4\u56deEXCEPTION_CONTINUE_SEARCH&#xff0c;\u4ee5\u4fbfVEH\u94fe\u8868\u4e2d\u7684\u5176\u4ed6\u5f02\u5e38\u5904\u7406\u7a0b\u5e8f\u6709\u673a\u4f1a\u53bb\u5904\u7406\u8be5\u5f02\u5e38\u3002\u5982\u679c\u6240\u6709\u7684\u5411\u91cf\u5316\u5f02\u5e38\u5904\u7406\u7a0b\u5e8f\u90fd\u8fd4\u56deEXCEPTION_CONTINUE_SEARCH&#xff0c;\u5219\u7ed3\u6784\u5316\u5f02\u5e38\u8fc7\u6ee4\u7a0b\u5e8f\u4f1a\u88ab\u6267\u884c\u3002\u9700\u8981\u6ce8\u610f\u7684\u662f&#xff0c;\u5411\u91cf\u5316\u5f02\u5e38\u5904\u7406\u7a0b\u5e8f\u4e0d\u80fd\u8fd4\u56deEXCEPTION_EXECUTE_HANDLER\u3002<\/p>\n<p>&#xff08;3&#xff09;\u6267\u884c\u7ed3\u6784\u5316\u5f02\u5e38\u5904\u7406\u7a0b\u5e8f\u3002\u6240\u6709\u7684\u6808\u4e0a\u7ed3\u6784\u5316\u5f02\u5e38\u5904\u7406\u7a0b\u5e8f\u4f1a\u5f62\u6210\u4e00\u4e2aSEH\u94fe\u8868&#xff0c;\u5982\u679c\u4e00\u4e2a\u7ed3\u6784\u5316\u5f02\u5e38\u8fc7\u6ee4\u7a0b\u5e8f\u8fd4\u56deEXCEPTION_EXECUTE_HANDLER&#xff0c;\u5219\u8868\u793a\u5904\u7406\u8fd9\u4e2a\u5f02\u5e38&#xff0c;\u6267\u884cexcept\u5757\u4e2d\u7684\u5f02\u5e38\u5904\u7406\u8bed\u53e5&#xff0c;\u5176\u4ed6\u7ed3\u6784\u5316\u5f02\u5e38\u8fc7\u6ee4\u7a0b\u5e8f\u4e0d\u4f1a\u88ab\u6267\u884c&#xff0c;\u9876\u5c42\u672a\u5904\u7406\u5f02\u5e38\u8fc7\u6ee4\u5668\u66f4\u4e0d\u4f1a\u88ab\u6267\u884c&#xff1b;\u5982\u679c\u4e00\u4e2a\u7ed3\u6784\u5316\u5f02\u5e38\u8fc7\u6ee4\u7a0b\u5e8f\u8fd4\u56deEXCEPTION_CONTINUE_SEARCH&#xff0c;\u5219\u8868\u793a\u4e0d\u5904\u7406\u8fd9\u4e2a\u5f02\u5e38&#xff0c;Windows\u7ee7\u7eed\u5411\u4e0a\u641c\u7d22\u4e0b\u4e00\u4e2a\u5177\u6709\u6700\u9ad8\u4f18\u5148\u7ea7\u7684\u7ed3\u6784\u5316\u5f02\u5e38\u8fc7\u6ee4\u7a0b\u5e8f&#xff1b;\u5982\u679c\u4e00\u4e2a\u7ed3\u6784\u5316\u5f02\u5e38\u8fc7\u6ee4\u7a0b\u5e8f\u8fd4\u56deEXCEPTION_CONTINUE_EXECUTION&#xff0c;\u5219\u8868\u793a\u91cd\u65b0\u6267\u884c\u53d1\u751f\u5f02\u5e38\u7684\u6307\u4ee4&#xff08;\u4e0d\u4f1a\u6267\u884cexcept\u5757\u4e2d\u7684\u5f02\u5e38\u5904\u7406\u8bed\u53e5&#xff09;&#xff0c;\u5176\u4ed6\u7ed3\u6784\u5316\u5f02\u5e38\u8fc7\u6ee4\u7a0b\u5e8f\u4e0d\u4f1a\u88ab\u6267\u884c&#xff0c;\u9876\u5c42\u672a\u5904\u7406\u5f02\u5e38\u8fc7\u6ee4\u5668\u66f4\u4e0d\u4f1a\u88ab\u6267\u884c\u3002\u5982\u679c\u5f02\u5e38\u8fc7\u6ee4\u7a0b\u5e8f\u53ef\u4ee5\u6b63\u786e\u4fee\u590d\u53d1\u751f\u5f02\u5e38\u7684\u6307\u4ee4&#xff0c;\u5219\u6574\u4e2a\u7a0b\u5e8f\u53ef\u4ee5\u7ee7\u7eed\u6b63\u5e38\u8fd0\u884c&#xff0c;\u5426\u5219\u4f1a\u5bfc\u81f4\u76f8\u540c\u7684\u5f02\u5e38\u91cd\u590d\u53d1\u751f\u3002<\/p>\n<p>&#xff08;4&#xff09;\u6267\u884c\u9876\u5c42\u672a\u5904\u7406\u5f02\u5e38\u8fc7\u6ee4\u5668\u51fd\u6570&#xff08;\u8fdb\u7a0b\u88ab\u8c03\u8bd5\u65f6\u4e0d\u4f1a\u88ab\u6267\u884c&#xff09;\u3002\u5982\u679c\u8fdb\u7a0b\u4e2d\u6240\u6709\u7684\u5411\u91cf\u5316\u5f02\u5e38\u5904\u7406\u7a0b\u5e8f\u90fd\u4e0d\u5904\u7406\u8fd9\u4e2a\u5f02\u5e38&#xff0c;\u5f53\u524d\u7ebf\u7a0b\u4e2d\u6240\u6709\u7684\u7ed3\u6784\u5316\u5f02\u5e38\u5904\u7406\u7a0b\u5e8f\u4e5f\u4e0d\u5904\u7406\u8fd9\u4e2a\u5f02\u5e38&#xff0c;\u5c31\u4f1a\u4ea7\u751f\u4e00\u4e2a\u672a\u5904\u7406\u5f02\u5e38&#xff0c;\u7a0b\u5e8f\u53ef\u4ee5\u901a\u8fc7\u8c03\u7528SetUnhandledExceptionFilter\u51fd\u6570\u8bbe\u7f6e\u4e00\u4e2a\u9876\u5c42\u672a\u5904\u7406\u5f02\u5e38\u8fc7\u6ee4\u5668&#xff0c;\u5f53\u8fdb\u7a0b\u4e2d\u53d1\u751f\u672a\u5904\u7406\u5f02\u5e38\u65f6&#xff0c;\u4f1a\u8c03\u7528\u6307\u5b9a\u7684\u9876\u5c42\u672a\u5904\u7406\u5f02\u5e38\u8fc7\u6ee4\u5668\u51fd\u6570\u3002<\/p>\n<p>&#xff08;5&#xff09;\u6267\u884c\u5411\u91cf\u5316\u7ee7\u7eed\u5904\u7406\u7a0b\u5e8f\u3002<\/p>\n<p>\u63a5\u4e0b\u6765\u5b9e\u73b0\u4e00\u4e2a\u6f14\u793a\u5f02\u5e38\u5904\u7406\u8fc7\u7a0b\u7684ExceptionHandlingProcess\u7a0b\u5e8f&#xff0c;\u7a0b\u5e8f\u8fd0\u884c\u6548\u679c\u5982\u539f\u4e66\u7684\u56fe8.7\u6240\u793a\u3002<\/p>\n<p>ExceptionHandlingProcess.cpp\u6e90\u6587\u4ef6\u7684\u5185\u5bb9\u5982\u4e0b\u3002<\/p>\n<p>#include &lt;windows.h&gt;<br \/>\n#include &#034;resource.h&#034;<\/p>\n<p>\/\/ \u5168\u5c40\u53d8\u91cf<br \/>\nHWND g_hwndDlg;<\/p>\n<p>\/\/ \u51fd\u6570\u58f0\u660e<br \/>\nINT_PTR CALLBACK DialogProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam);<\/p>\n<p>LONG CALLBACK VectoredExceptionHandler(PEXCEPTION_POINTERS ExceptionInfo);<br \/>\n                                                       \/\/ \u5411\u91cf\u5316\u5f02\u5e38\u5904\u7406\u7a0b\u5e8f<br \/>\nDWORD StructuredExceptionFilter(PEXCEPTION_POINTERS ExceptionInfo);<br \/>\n                                                        \/\/ \u7ed3\u6784\u5316\u5f02\u5e38\u8fc7\u6ee4\u7a0b\u5e8f<br \/>\nLONG WINAPI TopLevelUnhandledExceptionFilter(PEXCEPTION_POINTERS ExceptionInfo);<br \/>\n                                                       \/\/ \u9876\u5c42\u672a\u5904\u7406\u5f02\u5e38\u8fc7\u6ee4\u5668\u7a0b\u5e8f<br \/>\nLONG CALLBACK VectoredContinueHandler(PEXCEPTION_POINTERS ExceptionInfo);<br \/>\n                                                          \/\/ \u5411\u91cf\u5316\u7ee7\u7eed\u5904\u7406\u7a0b\u5e8f<br \/>\nDWORD WINAPI ThreadProc(LPVOID lpParameter);<\/p>\n<p>int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)<br \/>\n{<br \/>\n     DialogBoxParam(hInstance, MAKEINTRESOURCE(IDD_MAIN), NULL, DialogProc, NULL);<br \/>\n     return 0;<br \/>\n}<\/p>\n<p>INT_PTR CALLBACK DialogProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)<br \/>\n{<br \/>\n     static LPVOID lpHandler, lpHandlerContinue;<br \/>\n     HANDLE hThread;<br \/>\n     int n &#061; 10, m &#061; 0, x;<br \/>\n     TCHAR szBuf[32] &#061; { 0 };<\/p>\n<p>     switch (uMsg)<br \/>\n     {<br \/>\n     case WM_INITDIALOG:<br \/>\n          g_hwndDlg &#061; hwndDlg;<\/p>\n<p>          \/\/ \u5411\u91cf\u5316\u5f02\u5e38\u5904\u7406<br \/>\n          lpHandler &#061; AddVectoredExceptionHandler(1, VectoredExceptionHandler);<br \/>\n          \/\/ \u5411\u91cf\u5316\u7ee7\u7eed\u5904\u7406<br \/>\n          lpHandlerContinue &#061; AddVectoredContinueHandler(1, VectoredContinueHandler);<br \/>\n          \/\/ \u9876\u5c42\u672a\u5904\u7406\u5f02\u5e38\u8fc7\u6ee4\u5668<br \/>\n          SetUnhandledExceptionFilter(TopLevelUnhandledExceptionFilter);<br \/>\n          return TRUE;<\/p>\n<p>     case WM_COMMAND:<br \/>\n          switch (LOWORD(wParam))<br \/>\n          {<br \/>\n          case IDC_BTN_OK:<br \/>\n               __try<br \/>\n               {<br \/>\n                    \/\/ \u4f1a\u53d1\u751fEXCEPTION_INT_DIVIDE_BY_ZERO\u9664\u96f6\u5f02\u5e38<br \/>\n                    x &#061; n \/ m;<br \/>\n                    wsprintf(szBuf, TEXT(&#034;%d \/ %d &#061; %d&#034;), n, m, x);<br \/>\n                    MessageBox(hwndDlg, szBuf, TEXT(&#034;\u5df2\u4ece\u5f02\u5e38\u4e2d\u6062\u590d&#034;), MB_OK);<br \/>\n               }<br \/>\n               __except (StructuredExceptionFilter(GetExceptionInformation()))<br \/>\n               {<br \/>\n                    \/\/ \u9664\u975e\u7ed3\u6784\u5316\u5f02\u5e38\u8fc7\u6ee4\u7a0b\u5e8f\u8fd4\u56deEXCEPTION_EXECUTE_HANDLER&#xff0c;\u5426\u5219\u8fd9\u91cc\u4e0d\u4f1a\u6267\u884c<br \/>\n                    MessageBox(hwndDlg, TEXT(&#034;\u7ed3\u6784\u5316\u5f02\u5e38\u5904\u7406\u7a0b\u5e8f&#034;), TEXT(&#034;SEH\u63d0\u793a&#034;), MB_OK);<br \/>\n               }<br \/>\n               break;<\/p>\n<p>          case IDC_BTN_OK2:<br \/>\n               hThread &#061; CreateThread(NULL, 0, ThreadProc, NULL, 0, NULL);<br \/>\n               if (hThread)<br \/>\n                    CloseHandle(hThread);<br \/>\n               break;<\/p>\n<p>          case IDCANCEL:<br \/>\n               RemoveVectoredExceptionHandler(lpHandler);<br \/>\n               RemoveVectoredContinueHandler(lpHandlerContinue);<br \/>\n               EndDialog(hwndDlg, 0);<br \/>\n               break;<br \/>\n          }<br \/>\n          return TRUE;<br \/>\n     }<\/p>\n<p>     return FALSE;<br \/>\n}<\/p>\n<p>LONG CALLBACK VectoredExceptionHandler(PEXCEPTION_POINTERS ExceptionInfo)<br \/>\n{<br \/>\n     MessageBox(g_hwndDlg, TEXT(&#034;\u5411\u91cf\u5316\u5f02\u5e38\u5904\u7406\u7a0b\u5e8f&#034;), TEXT(&#034;VEH\u63d0\u793a&#034;), MB_OK);<\/p>\n<p>     \/\/ExceptionInfo-&gt;ContextRecord-&gt;Ecx &#061; 2;  \/\/ \u628a\u9664\u6570\u8bbe\u7f6e\u4e3a2<br \/>\n     return EXCEPTION_CONTINUE_SEARCH;<br \/>\n}<\/p>\n<p>DWORD StructuredExceptionFilter(PEXCEPTION_POINTERS ExceptionInfo)<br \/>\n{<br \/>\n     MessageBox(g_hwndDlg, TEXT(&#034;\u7ed3\u6784\u5316\u5f02\u5e38\u8fc7\u6ee4\u7a0b\u5e8f&#034;), TEXT(&#034;SEH\u63d0\u793a&#034;), MB_OK);<\/p>\n<p>     \/\/ExceptionInfo-&gt;ContextRecord-&gt;Ecx &#061; 2;  \/\/ \u628a\u9664\u6570\u8bbe\u7f6e\u4e3a2<br \/>\n     return EXCEPTION_CONTINUE_SEARCH;<br \/>\n}<\/p>\n<p>LONG WINAPI TopLevelUnhandledExceptionFilter(PEXCEPTION_POINTERS ExceptionInfo)<br \/>\n{<br \/>\n     MessageBox(g_hwndDlg, TEXT(&#034;\u9876\u5c42\u672a\u5904\u7406\u5f02\u5e38\u8fc7\u6ee4\u5668\u7a0b\u5e8f&#034;), TEXT(&#034;UEF\u63d0\u793a&#034;), MB_OK);<\/p>\n<p>     \/\/ExceptionInfo-&gt;ContextRecord-&gt;Ecx &#061; 2;  \/\/ \u628a\u9664\u6570\u8bbe\u7f6e\u4e3a2<br \/>\n     return EXCEPTION_CONTINUE_SEARCH;<br \/>\n}<\/p>\n<p>LONG CALLBACK VectoredContinueHandler(PEXCEPTION_POINTERS ExceptionInfo)<br \/>\n{<br \/>\n     MessageBox(g_hwndDlg, TEXT(&#034;\u5411\u91cf\u5316\u7ee7\u7eed\u5904\u7406\u7a0b\u5e8f&#034;), TEXT(&#034;VCH\u63d0\u793a&#034;), MB_OK);<\/p>\n<p>     return EXCEPTION_CONTINUE_SEARCH;<br \/>\n}<\/p>\n<p>DWORD WINAPI ThreadProc(LPVOID lpParameter)<br \/>\n{<br \/>\n     int n &#061; 10, m &#061; 0, x;<br \/>\n     TCHAR szBuf[32] &#061; { 0 };<\/p>\n<p>     __try<br \/>\n     {<br \/>\n          \/\/ \u4f1a\u53d1\u751fEXCEPTION_INT_DIVIDE_BY_ZERO\u9664\u96f6\u5f02\u5e38<br \/>\n          x &#061; n \/ m;<br \/>\n          wsprintf(szBuf, TEXT(&#034;%d \/ %d &#061; %d&#034;), n, m, x);<br \/>\n          MessageBox(g_hwndDlg, szBuf, TEXT(&#034;\u5df2\u4ece\u5f02\u5e38\u4e2d\u6062\u590d&#034;), MB_OK);<br \/>\n     }<br \/>\n     __except (StructuredExceptionFilter(GetExceptionInformation()))<br \/>\n     {<br \/>\n          \/\/ \u9664\u975e\u7ed3\u6784\u5316\u5f02\u5e38\u8fc7\u6ee4\u7a0b\u5e8f\u8fd4\u56deEXCEPTION_EXECUTE_HANDLER&#xff0c;\u5426\u5219\u8fd9\u91cc\u4e0d\u4f1a\u6267\u884c<br \/>\n          MessageBox(g_hwndDlg, TEXT(&#034;\u6765\u81ea\u8f85\u52a9\u7ebf\u7a0b&#xff1a;\u7ed3\u6784\u5316\u5f02\u5e38\u5904\u7406\u7a0b\u5e8f&#034;), TEXT(&#034;SEH\u63d0\u793a&#034;), MB_OK);<br \/>\n     }<\/p>\n<p>     return 0;<br \/>\n}<\/p>\n<p>\u56e0\u4e3a\u9664\u6570m\u4e3a0&#xff0c;\u6240\u4ee5\u6267\u884cx &#061; n\/m\u4f1a\u5bfc\u81f4\u7ebf\u7a0b\u53d1\u751f\u4e00\u4e2aEXCEPTION_INT_DIVIDE_BY_ZERO\u9664\u96f6\u5f02\u5e38\u3002\u5982\u679c\u7a0b\u5e8f\u7f16\u8bd1\u4e3aRelease\u7248\u672c&#xff0c;x &#061; n \/ m\u8bed\u53e5\u4f1a\u88ab\u7f16\u8bd1\u4e3a\u4ee5\u4e0b\u6c47\u7f16\u8bed\u53e5&#xff1a;<\/p>\n<p>mov  eax, 0Ah<br \/>\ncdq<br \/>\nxor  ecx, ecx<br \/>\nidiv eax, ecx<\/p>\n<p>\u5728\u6c47\u7f16\u8bed\u8a00\u4e2d&#xff0c;idiv\u6307\u4ee4\u662f\u6709\u7b26\u53f7\u6570\u9664\u6cd5\u6307\u4ee4&#xff0c;xor\u3000ecx, ecx\u7528\u4e8e\u628aecx\u6e05\u96f6&#xff0c;ecx\u4f5c\u4e3a\u9664\u6570&#xff0c;\u56e0\u6b64\u6267\u884cidiv eax, ecx\u4f1a\u5bfc\u81f4\u53d1\u751f\u9664\u96f6\u5f02\u5e38&#xff0c;\u5728\u5f02\u5e38\u5904\u7406\u7a0b\u5e8f&#xff08;\u6216\u5f02\u5e38\u8fc7\u6ee4\u7a0b\u5e8f&#xff09;\u4e2d\u53ef\u4ee5\u901a\u8fc7\u6539\u53d8ExceptionInfo-&gt;ContextRecord-&gt;Ecx\u7684\u503c\u4ee5\u4fee\u590d\u5f02\u5e38\u3002<\/p>\n<p>\u7f16\u8bd1ExceptionHandlingProcess\u7a0b\u5e8f\u4e3aRelease\u7248\u672c&#xff0c;\u5355\u51fb\u201c\u5728\u4e3b\u7ebf\u7a0b\u4e2d\u89e6\u53d1\u4e00\u4e2a\u5f02\u5e38\u201d\u6216\u8005\u201c\u5728\u8f85\u52a9\u7ebf\u7a0b\u4e2d\u89e6\u53d1\u4e00\u4e2a\u5f02\u5e38\u201d\u6309\u94ae&#xff0c;\u90fd\u4f1a\u6309\u7167\u539f\u4e66\u7684\u56fe8.8\u6240\u793a\u7684\u987a\u5e8f\u5f39\u51fa\u6d88\u606f\u6846\u3002<\/p>\n<p>\u56e0\u4e3a\u5411\u91cf\u5316\u5f02\u5e38\u5904\u7406\u3001\u7ed3\u6784\u5316\u5f02\u5e38\u5904\u7406\u548c\u9876\u5c42\u672a\u5904\u7406\u5f02\u5e38\u8fc7\u6ee4\u90fd\u8fd4\u56de EXCEPTION_CONTINUE_SEARCH&#xff0c;\u6240\u4ee5\u5411\u91cf\u5316\u7ee7\u7eed\u5904\u7406\u7a0b\u5e8f\u4e0d\u4f1a\u88ab\u6267\u884c\u3002\u5982\u679c\u4e0a\u8ff0 3 \u4e2a\u4e4b\u4e00\u53ef\u4ee5\u5904\u7406\u5f02\u5e38&#xff0c;\u90fd\u4f1a\u5bfc\u81f4\u6267\u884c\u5411\u91cf\u5316\u7ee7\u7eed\u5904\u7406\u7a0b\u5e8f\u3002<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u7b2c8\u7ae0\u3000Windows\u5f02\u5e38\u5904\u7406<br \/>\n\u7a0b\u5e8f\u6267\u884c\u8fc7\u7a0b\u4e2d\u96be\u514d\u4f1a\u53d1\u751f\u9519\u8bef\u3002CPU\u8d1f\u8d23\u6355\u83b7\u7c7b\u4f3c\u4e8e\u8bbf\u95ee\u975e\u6cd5\u5185\u5b58\u5730\u5740\u6216\u8005\u9664\u6570\u4e3a0\u7684\u9519\u8bef\u4ee3\u7801&#xff0c;\u5e76\u629b\u51fa\u76f8\u5e94\u7684\u5f02\u5e38&#xff0c;\u7531CPU\u629b\u51fa\u7684\u5f02\u5e38\u90fd\u662f\u786c\u4ef6\u5f02\u5e38&#xff1b;\u64cd\u4f5c\u7cfb\u7edf\u548c\u5e94\u7528\u7a0b\u5e8f\u4e5f\u53ef\u4ee5\u629b\u51fa\u5f02\u5e38&#xff0c;\u8fd9\u7c7b\u5f02\u5e38\u79f0\u4e3a\u8f6f\u4ef6\u5f02\u5e38\u3002\u5f53\u5f02\u5e38&#xff08;\u5305\u62ec\u786c\u4ef6\u5f02\u5e38\u548c\u8f6f\u4ef6\u5f02\u5e38&#xff09;\u53d1\u751f\u540e&#xff0c;Windows\u6216\u5e94\u7528\u7a0b\u5e8f\u9488\u5bf9\u6240\u53d1\u751f\u9519\u8bef\u751f\u6210\u4e00\u6bb5\u5904\u7406\u4ee3\u7801&#xff0c;\u901a\u5e38\u79f0\u4e3a\u5f02\u5e38\u5904\u7406\u51fd\u6570\u6216\u5f02\u5e38\u5904\u7406\u7a0b\u5e8f\u3002<br \/>\n\u53d1\u751f\u5f02<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[149,305],"topic":[],"class_list":["post-104764","post","type-post","status-publish","format-standard","hentry","category-server","tag-windows","tag-305"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v20.3 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>\u3010Windows\u3011\u300a\u6df1\u5165\u6d45\u51faWindows API\u7a0b\u5e8f\u8bbe\u8ba1\uff1a\u6838\u5fc3\u7f16\u7a0b\u7bc7\u300b\u7b14\u8bb0-Chapter8-Windows\u5f02\u5e38\u5904\u7406 - \u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.wsisp.com\/helps\/104764.html\" \/>\n<meta property=\"og:locale\" content=\"zh_CN\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"\u3010Windows\u3011\u300a\u6df1\u5165\u6d45\u51faWindows API\u7a0b\u5e8f\u8bbe\u8ba1\uff1a\u6838\u5fc3\u7f16\u7a0b\u7bc7\u300b\u7b14\u8bb0-Chapter8-Windows\u5f02\u5e38\u5904\u7406 - \u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3\" \/>\n<meta property=\"og:description\" content=\"\u7b2c8\u7ae0\u3000Windows\u5f02\u5e38\u5904\u7406 \u7a0b\u5e8f\u6267\u884c\u8fc7\u7a0b\u4e2d\u96be\u514d\u4f1a\u53d1\u751f\u9519\u8bef\u3002CPU\u8d1f\u8d23\u6355\u83b7\u7c7b\u4f3c\u4e8e\u8bbf\u95ee\u975e\u6cd5\u5185\u5b58\u5730\u5740\u6216\u8005\u9664\u6570\u4e3a0\u7684\u9519\u8bef\u4ee3\u7801&#xff0c;\u5e76\u629b\u51fa\u76f8\u5e94\u7684\u5f02\u5e38&#xff0c;\u7531CPU\u629b\u51fa\u7684\u5f02\u5e38\u90fd\u662f\u786c\u4ef6\u5f02\u5e38&#xff1b;\u64cd\u4f5c\u7cfb\u7edf\u548c\u5e94\u7528\u7a0b\u5e8f\u4e5f\u53ef\u4ee5\u629b\u51fa\u5f02\u5e38&#xff0c;\u8fd9\u7c7b\u5f02\u5e38\u79f0\u4e3a\u8f6f\u4ef6\u5f02\u5e38\u3002\u5f53\u5f02\u5e38&#xff08;\u5305\u62ec\u786c\u4ef6\u5f02\u5e38\u548c\u8f6f\u4ef6\u5f02\u5e38&#xff09;\u53d1\u751f\u540e&#xff0c;Windows\u6216\u5e94\u7528\u7a0b\u5e8f\u9488\u5bf9\u6240\u53d1\u751f\u9519\u8bef\u751f\u6210\u4e00\u6bb5\u5904\u7406\u4ee3\u7801&#xff0c;\u901a\u5e38\u79f0\u4e3a\u5f02\u5e38\u5904\u7406\u51fd\u6570\u6216\u5f02\u5e38\u5904\u7406\u7a0b\u5e8f\u3002 \u53d1\u751f\u5f02\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.wsisp.com\/helps\/104764.html\" \/>\n<meta property=\"og:site_name\" content=\"\u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3\" \/>\n<meta property=\"article:published_time\" content=\"2026-09-12T23:57:06+00:00\" \/>\n<meta name=\"author\" content=\"admin\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"\u4f5c\u8005\" \/>\n\t<meta name=\"twitter:data1\" content=\"admin\" \/>\n\t<meta name=\"twitter:label2\" content=\"\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4\" \/>\n\t<meta name=\"twitter:data2\" content=\"16 \u5206\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.wsisp.com\/helps\/104764.html\",\"url\":\"https:\/\/www.wsisp.com\/helps\/104764.html\",\"name\":\"\u3010Windows\u3011\u300a\u6df1\u5165\u6d45\u51faWindows API\u7a0b\u5e8f\u8bbe\u8ba1\uff1a\u6838\u5fc3\u7f16\u7a0b\u7bc7\u300b\u7b14\u8bb0-Chapter8-Windows\u5f02\u5e38\u5904\u7406 - \u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3\",\"isPartOf\":{\"@id\":\"https:\/\/www.wsisp.com\/helps\/#website\"},\"datePublished\":\"2026-09-12T23:57:06+00:00\",\"dateModified\":\"2026-09-12T23:57:06+00:00\",\"author\":{\"@id\":\"https:\/\/www.wsisp.com\/helps\/#\/schema\/person\/358e386c577a3ab51c4493330a20ad41\"},\"breadcrumb\":{\"@id\":\"https:\/\/www.wsisp.com\/helps\/104764.html#breadcrumb\"},\"inLanguage\":\"zh-Hans\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.wsisp.com\/helps\/104764.html\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.wsisp.com\/helps\/104764.html#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"\u9996\u9875\",\"item\":\"https:\/\/www.wsisp.com\/helps\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"\u3010Windows\u3011\u300a\u6df1\u5165\u6d45\u51faWindows API\u7a0b\u5e8f\u8bbe\u8ba1\uff1a\u6838\u5fc3\u7f16\u7a0b\u7bc7\u300b\u7b14\u8bb0-Chapter8-Windows\u5f02\u5e38\u5904\u7406\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.wsisp.com\/helps\/#website\",\"url\":\"https:\/\/www.wsisp.com\/helps\/\",\"name\":\"\u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3\",\"description\":\"\u9999\u6e2f\u670d\u52a1\u5668_\u9999\u6e2f\u4e91\u670d\u52a1\u5668\u8d44\u8baf_\u670d\u52a1\u5668\u5e2e\u52a9\u6587\u6863_\u670d\u52a1\u5668\u6559\u7a0b\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.wsisp.com\/helps\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"zh-Hans\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.wsisp.com\/helps\/#\/schema\/person\/358e386c577a3ab51c4493330a20ad41\",\"name\":\"admin\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"zh-Hans\",\"@id\":\"https:\/\/www.wsisp.com\/helps\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/gravatar.wp-china-yes.net\/avatar\/?s=96&d=mystery\",\"contentUrl\":\"https:\/\/gravatar.wp-china-yes.net\/avatar\/?s=96&d=mystery\",\"caption\":\"admin\"},\"sameAs\":[\"http:\/\/wp.wsisp.com\"],\"url\":\"https:\/\/www.wsisp.com\/helps\/author\/admin\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"\u3010Windows\u3011\u300a\u6df1\u5165\u6d45\u51faWindows API\u7a0b\u5e8f\u8bbe\u8ba1\uff1a\u6838\u5fc3\u7f16\u7a0b\u7bc7\u300b\u7b14\u8bb0-Chapter8-Windows\u5f02\u5e38\u5904\u7406 - \u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.wsisp.com\/helps\/104764.html","og_locale":"zh_CN","og_type":"article","og_title":"\u3010Windows\u3011\u300a\u6df1\u5165\u6d45\u51faWindows API\u7a0b\u5e8f\u8bbe\u8ba1\uff1a\u6838\u5fc3\u7f16\u7a0b\u7bc7\u300b\u7b14\u8bb0-Chapter8-Windows\u5f02\u5e38\u5904\u7406 - \u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3","og_description":"\u7b2c8\u7ae0\u3000Windows\u5f02\u5e38\u5904\u7406 \u7a0b\u5e8f\u6267\u884c\u8fc7\u7a0b\u4e2d\u96be\u514d\u4f1a\u53d1\u751f\u9519\u8bef\u3002CPU\u8d1f\u8d23\u6355\u83b7\u7c7b\u4f3c\u4e8e\u8bbf\u95ee\u975e\u6cd5\u5185\u5b58\u5730\u5740\u6216\u8005\u9664\u6570\u4e3a0\u7684\u9519\u8bef\u4ee3\u7801&#xff0c;\u5e76\u629b\u51fa\u76f8\u5e94\u7684\u5f02\u5e38&#xff0c;\u7531CPU\u629b\u51fa\u7684\u5f02\u5e38\u90fd\u662f\u786c\u4ef6\u5f02\u5e38&#xff1b;\u64cd\u4f5c\u7cfb\u7edf\u548c\u5e94\u7528\u7a0b\u5e8f\u4e5f\u53ef\u4ee5\u629b\u51fa\u5f02\u5e38&#xff0c;\u8fd9\u7c7b\u5f02\u5e38\u79f0\u4e3a\u8f6f\u4ef6\u5f02\u5e38\u3002\u5f53\u5f02\u5e38&#xff08;\u5305\u62ec\u786c\u4ef6\u5f02\u5e38\u548c\u8f6f\u4ef6\u5f02\u5e38&#xff09;\u53d1\u751f\u540e&#xff0c;Windows\u6216\u5e94\u7528\u7a0b\u5e8f\u9488\u5bf9\u6240\u53d1\u751f\u9519\u8bef\u751f\u6210\u4e00\u6bb5\u5904\u7406\u4ee3\u7801&#xff0c;\u901a\u5e38\u79f0\u4e3a\u5f02\u5e38\u5904\u7406\u51fd\u6570\u6216\u5f02\u5e38\u5904\u7406\u7a0b\u5e8f\u3002 \u53d1\u751f\u5f02","og_url":"https:\/\/www.wsisp.com\/helps\/104764.html","og_site_name":"\u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3","article_published_time":"2026-09-12T23:57:06+00:00","author":"admin","twitter_card":"summary_large_image","twitter_misc":{"\u4f5c\u8005":"admin","\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4":"16 \u5206"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.wsisp.com\/helps\/104764.html","url":"https:\/\/www.wsisp.com\/helps\/104764.html","name":"\u3010Windows\u3011\u300a\u6df1\u5165\u6d45\u51faWindows API\u7a0b\u5e8f\u8bbe\u8ba1\uff1a\u6838\u5fc3\u7f16\u7a0b\u7bc7\u300b\u7b14\u8bb0-Chapter8-Windows\u5f02\u5e38\u5904\u7406 - \u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3","isPartOf":{"@id":"https:\/\/www.wsisp.com\/helps\/#website"},"datePublished":"2026-09-12T23:57:06+00:00","dateModified":"2026-09-12T23:57:06+00:00","author":{"@id":"https:\/\/www.wsisp.com\/helps\/#\/schema\/person\/358e386c577a3ab51c4493330a20ad41"},"breadcrumb":{"@id":"https:\/\/www.wsisp.com\/helps\/104764.html#breadcrumb"},"inLanguage":"zh-Hans","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.wsisp.com\/helps\/104764.html"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.wsisp.com\/helps\/104764.html#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"\u9996\u9875","item":"https:\/\/www.wsisp.com\/helps"},{"@type":"ListItem","position":2,"name":"\u3010Windows\u3011\u300a\u6df1\u5165\u6d45\u51faWindows API\u7a0b\u5e8f\u8bbe\u8ba1\uff1a\u6838\u5fc3\u7f16\u7a0b\u7bc7\u300b\u7b14\u8bb0-Chapter8-Windows\u5f02\u5e38\u5904\u7406"}]},{"@type":"WebSite","@id":"https:\/\/www.wsisp.com\/helps\/#website","url":"https:\/\/www.wsisp.com\/helps\/","name":"\u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3","description":"\u9999\u6e2f\u670d\u52a1\u5668_\u9999\u6e2f\u4e91\u670d\u52a1\u5668\u8d44\u8baf_\u670d\u52a1\u5668\u5e2e\u52a9\u6587\u6863_\u670d\u52a1\u5668\u6559\u7a0b","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.wsisp.com\/helps\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"zh-Hans"},{"@type":"Person","@id":"https:\/\/www.wsisp.com\/helps\/#\/schema\/person\/358e386c577a3ab51c4493330a20ad41","name":"admin","image":{"@type":"ImageObject","inLanguage":"zh-Hans","@id":"https:\/\/www.wsisp.com\/helps\/#\/schema\/person\/image\/","url":"https:\/\/gravatar.wp-china-yes.net\/avatar\/?s=96&d=mystery","contentUrl":"https:\/\/gravatar.wp-china-yes.net\/avatar\/?s=96&d=mystery","caption":"admin"},"sameAs":["http:\/\/wp.wsisp.com"],"url":"https:\/\/www.wsisp.com\/helps\/author\/admin"}]}},"_links":{"self":[{"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/posts\/104764","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/comments?post=104764"}],"version-history":[{"count":0,"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/posts\/104764\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/media?parent=104764"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/categories?post=104764"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/tags?post=104764"},{"taxonomy":"topic","embeddable":true,"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/topic?post=104764"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}