亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? 結構化異常處理.htm

?? 結構化異常處理是一種操作系統提供的機制,用來優化程序的結構,提供更加健壯的程序執行環境.
?? HTM
?? 第 1 頁 / 共 2 頁
字號:
<br>   };
<br>
<br>  明白了handler的任務以后,看它實際的代碼吧.
<br>  int __except_handler3(_EXCEPTION_RECORD * pExceptionRecord,EXCEPTION_REGISTRATION * pRegistrationFrame,_CONTEXT     
<br>              *pContextRecord,void * pDispatcherContext )
<br>  {
<br>    LONG filterFuncRet
<br>    LONG trylevel
<br>    EXCEPTION_POINTERS exceptPtrs
<br>    PSCOPETABLE pScopeTable
<br>
<br>    CLD // Clear the direction flag (make no assumptions!),這個是c語言編譯器默認的操作方式
<br>
<br>    // if neither the EXCEPTION_UNWINDING nor EXCEPTION_EXIT_UNWIND bit
<br>    // is set... This is true the first time through the handler (the
<br>    // non-unwinding case)
<br>
<br>    // 檢查是不是要進行unwind
<br>    if ( ! (pExceptionRecord->ExceptionFlags & (EXCEPTION_UNWINDING | EXCEPTION_EXIT_UNWIND)) )
<br>    {
<br>      // 設置[ebp-14]的值,記得上面說的[ebp-14]放的是什么么,這里的ExceptionRecord是在handler的堆棧里面的
<br>      // 所以它的生存期是有限的,handler函數返回了,這個就不存在了,[ebp-14]這個指針也就指向了未知區域了,所以msdn里面限制
<br>      // 了GetExceptionXXX函數的調用地點,明白了么?
<br>      // Build the EXCEPTION_POINTERS structure on the stack
<br>      exceptPtrs.ExceptionRecord = pExceptionRecord;
<br>      exceptPtrs.ContextRecord = pContextRecord;
<br>
<br>      // Put the pointer to the EXCEPTION_POINTERS 4 bytes below the
<br>      // establisher frame. See ASM code for GetExceptionInformation
<br>      // 想想看,-4指向了什么地方?
<br>      *(PDWORD)((PBYTE)pRegistrationFrame - 4) = &exceptPtrs;
<br>
<br>      // Get initial &#34;trylevel&#34; value,看看布局再看看上面那個結構的定義
<br>      trylevel = pRegistrationFrame->trylevel 
<br>
<br>      // Get a pointer to the scopetable array
<br>      scopeTable = pRegistrationFrame->scopetable;
<br>
<br>search_for_handler: 
<br>
<br>      if ( pRegistrationFrame->trylevel != TRYLEVEL_NONE/*-1*/ )
<br>      {
<br>        // 如果是空,就表示這個是一個finally語句,finally是用來作unwind的
<br>        if ( pRegistrationFrame->scopetable[trylevel].lpfnFilter )
<br>        {
<br>           PUSH EBP // Save this frame EBP
<br>
<br>           // !!!Very Important!!! Switch to original EBP. This is
<br>           // what allows all locals in the frame to have the same
<br>           // value as before the exception occurred.
<br>           // ebp是一個函數的frame pointer,對于一個函數的執行非常的重要,這里既然是要執行filter(except后面小括號
<br>           // 里面的語句),就必須要恢復ebp的值,ebp是怎么恢復的呢?,上面的代碼里面可以看到是一個mov ebp,esp,這個esp又
<br>           // 是什么呢?對比下上面的內存布局,好好體會這句話的含義,看清楚前面有個取地址符.
<br>           EBP = &pRegistrationFrame->_ebp 
<br>
<br>           // Call the filter function調用except小括號里面的語句,檢查這個返回值
<br>           filterFuncRet = scopetable[trylevel].lpfnFilter();
<br>
<br>           POP EBP // Restore handler frame EBP
<br>
<br>           if ( filterFuncRet != EXCEPTION_CONTINUE_SEARCH )
<br>           {
<br>             if ( filterFuncRet < 0 ) // EXCEPTION_CONTINUE_EXECUTION
<br>               return ExceptionContinueExecution; // 依靠操作系統完成continue execution 
<br>
<br>             // If we get here, EXCEPTION_EXECUTE_HANDLER was specified
<br>             scopetable == pRegistrationFrame->scopetable
<br>
<br>             // Does the actual OS cleanup of registration frames
<br>             // Causes this function to recurse
<br>             // 進行unwind,操作系統會變量當前registration record以前的handler一一調用他們,然后斷開這些record鏈表
<br>             __global_unwind2( pRegistrationFrame );
<br>
<br>             // Once we get here, everything is all cleaned up, except
<br>             // for the last frame, where we&#39;ll continue execution
<br>             EBP = &pRegistrationFrame->_ebp
<br>
<br>             // 操作系統幫我們完成前面的unwind,當前record的unwind要自己來完成
<br>             __local_unwind2( pRegistrationFrame, trylevel );
<br>
<br>             // 這里是setjmp/longjmp支持代碼
<br>             // NLG == &#34;non-local-goto&#34; (setjmp/longjmp stuff)
<br>             __NLG_Notify( 1 ); // EAX == scopetable->lpfnHandler
<br>
<br>             // Set the current trylevel to whatever SCOPETABLE entry
<br>             // was being used when a handler was found
<br>             // 修改當前的trylevel為prevtrylevel,很顯然,從當前的try block出來了自然就到了上一個try block 
<br>             pRegistrationFrame->trylevel = scopetable->previousTryLevel;
<br>
<br>             // Call the _except {} block. Never returns.
<br>             // goto except語句,這里并不返回,因為編譯器并沒有在except語句最后生成一個ret代碼
<br>             pRegistrationFrame->scopetable[trylevel].lpfnHandler();
<br>           }
<br>         }
<br>
<br>         scopeTable = pRegistrationFrame->scopetable;
<br>         trylevel = scopeTable->previousTryLevel
<br>
<br>         goto search_for_handler;
<br>       }
<br>       else // trylevel == TRYLEVEL_NONE
<br>       {
<br>          retvalue == DISPOSITION_CONTINUE_SEARCH;
<br>       } 
<br>     }
<br>   }
<br>   else // EXCEPTION_UNWINDING or EXCEPTION_EXIT_UNWIND flags are set
<br>   {
<br>     // 進行unwind(由__global_unwind2函數觸發)
<br>     PUSH EBP // Save EBP
<br>     EBP = &pRegistrationFrame->_ebp // Set EBP for __local_unwind2
<br>
<br>     __local_unwind2( pRegistrationFrame, TRYLEVEL_NONE )
<br>
<br>     POP EBP // Restore EBP
<br>
<br>     retvalue == DISPOSITION_CONTINUE_SEARCH;
<br>   }
<br> }
<br>
<br>  這里也不能不提到編譯器為你生成代碼的樣子
<br>
<br>  __try 
<br>  {
<br>    i = 0;
<br>  } 
<br>  __except(EXCEPTION_EXECUTE_HANDLER)
<br>  {
<br>    i = 1;
<br>  } 
<br>
<br>  這里假設i放在 ebp-20的地方,同時省略fs:[0]的設置
<br>
<br>__try: 
<br>  mov [ebp-4],0 ; trylevel = 0
<br>  mov [ebp-18h],esp ; 保存esp 
<br>  mov [ebp-20h],0 ; 執行i = 0
<br>  jmp __finish ; 跳出try語句
<br>__except_filter: 
<br>  mov eax,EXCEPTION_EXECUTE_HANDLER ; 返回
<br>  ret
<br>__except_body:
<br>  mov esp,[ebp-18h] ; 首先恢復esp值,也就是回復運行棧
<br>  mov [ebp-20h],1 ; 執行 i = 1;
<br>__finish: 
<br>  mov [ebp-4],0ffffffffh ; trylevel = -1
<br>
<br>  到這里差不多我要講的就結束了,更為詳細的可以參考我多次提到的msj里面的那個文章.
<br>  http://www.microsoft.com/msj/0197/exception/exception.aspx
<br>  如果你對vc生成的代碼更加的感興趣,你可以使用ida+softice動態靜態跟蹤看看.
<br>
<br></td>
      </tr>
    </table>
		
		
		
    </td>
    <td bgcolor="#CCCCCC"><img src="image/001.gif" width="1" height="1"></td>
  </tr>
</table>

</body>
</html>

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产98色在线|日韩| 久久综合久久鬼色| 久久久久综合网| 亚洲成人久久影院| 成人精品国产一区二区4080| 69堂精品视频| 亚洲欧美aⅴ...| 国产黄色精品网站| 日韩欧美成人一区| 亚洲亚洲人成综合网络| 99久久综合国产精品| 精品成人a区在线观看| 亚洲国产精品天堂| 一本大道综合伊人精品热热| 亚洲国产精品成人综合| 黑人巨大精品欧美一区| 日韩一区二区三区在线视频| 亚洲影视在线观看| 91麻豆国产自产在线观看| 中文字幕成人网| 国产高清精品在线| 久久人人爽爽爽人久久久| 日韩国产欧美三级| 91麻豆精品国产91久久久久久久久| 成人欧美一区二区三区小说 | 日韩视频一区二区在线观看| 一区二区三区四区在线播放| av在线这里只有精品| 国产精品久久久久影院色老大| 国产乱人伦偷精品视频免下载 | 丁香桃色午夜亚洲一区二区三区| 91精品国产全国免费观看| 亚洲小说春色综合另类电影| 精品1区2区3区| 丝袜亚洲精品中文字幕一区| 欧美挠脚心视频网站| 石原莉奈在线亚洲二区| 欧美日韩国产123区| 免费观看日韩av| 26uuu亚洲综合色欧美| 激情综合网av| 国产欧美日韩综合精品一区二区| 国产91精品露脸国语对白| 中文字幕高清不卡| 色哟哟在线观看一区二区三区| 亚洲在线成人精品| 欧美高清视频www夜色资源网| 日韩激情视频在线观看| 日韩免费在线观看| 国产99精品国产| 一区二区三区小说| 5566中文字幕一区二区电影| 精东粉嫩av免费一区二区三区| 久久色在线观看| jlzzjlzz欧美大全| 日本女人一区二区三区| 国产午夜一区二区三区| 色综合天天做天天爱| 丝袜国产日韩另类美女| 精品粉嫩超白一线天av| 99久久精品费精品国产一区二区| 亚洲一区二区视频| 精品国偷自产国产一区| 97精品视频在线观看自产线路二| 亚洲综合在线免费观看| 欧美成人三级电影在线| 99久久99久久精品免费看蜜桃| 亚欧色一区w666天堂| 久久精品人人爽人人爽| 欧美性大战久久久久久久蜜臀 | 亚洲午夜久久久久| 久久日韩精品一区二区五区| 日本道精品一区二区三区| 久久99精品国产麻豆婷婷| 国产精品国模大尺度视频| 91精品在线一区二区| 成人一区二区三区视频 | 七七婷婷婷婷精品国产| 国产日产欧美精品一区二区三区| 欧美午夜在线观看| 国产福利91精品一区| 亚洲第一会所有码转帖| 国产精品乱码一区二区三区软件 | 欧美视频在线观看一区| 九色|91porny| 天天综合色天天| 国产精品久久久久久久久晋中 | 不卡视频一二三四| 毛片av一区二区| 一区二区三区在线观看动漫| 久久综合九色综合97婷婷女人| 在线观看免费成人| 成人在线视频一区二区| 久久电影网站中文字幕 | 蜜臀av性久久久久蜜臀aⅴ流畅 | 日韩三级视频中文字幕| 日本韩国欧美在线| 粉嫩在线一区二区三区视频| 麻豆一区二区在线| 五月婷婷久久综合| 一区二区免费看| 国产精品免费丝袜| 中日韩免费视频中文字幕| 久久综合资源网| www激情久久| 欧美成va人片在线观看| 欧美年轻男男videosbes| 欧美在线观看一区二区| 欧美天堂一区二区三区| 色婷婷激情综合| 色综合一个色综合亚洲| 色综合色综合色综合色综合色综合 | 麻豆视频一区二区| 丝袜诱惑制服诱惑色一区在线观看 | 国产亚洲自拍一区| 欧美变态tickle挠乳网站| 91精品国产色综合久久不卡电影 | 8v天堂国产在线一区二区| 欧美精品久久99| 7878成人国产在线观看| 51久久夜色精品国产麻豆| 欧美日韩国产色站一区二区三区| 欧美无乱码久久久免费午夜一区 | 国产毛片精品国产一区二区三区| 琪琪久久久久日韩精品| 日产欧产美韩系列久久99| 美女免费视频一区| 国产一区三区三区| 福利电影一区二区三区| 99国产麻豆精品| 欧美精三区欧美精三区| 日韩一级片网址| 国产欧美日韩久久| 亚洲视频一区二区在线| 亚洲第一福利视频在线| 日本不卡不码高清免费观看| 美女视频网站久久| 国产成人精品亚洲777人妖| 99视频在线精品| 欧美欧美欧美欧美首页| 久久综合色播五月| 亚洲美女屁股眼交| 爽好多水快深点欧美视频| 久久99国产精品免费| 成人91在线观看| 欧美日本在线看| 国产人妖乱国产精品人妖| 有码一区二区三区| 蜜臀久久久久久久| 成人黄色小视频在线观看| 欧美日韩一区成人| 国产清纯美女被跳蛋高潮一区二区久久w | 在线观看91视频| 精品国产成人系列| 亚洲精品国产a| 精品一区二区三区在线观看| 91麻豆国产在线观看| 亚洲精品一区二区三区香蕉 | 一区二区欧美精品| 精彩视频一区二区三区| 91九色最新地址| 久久精品这里都是精品| 一区二区三区在线视频观看| 精品在线免费视频| 欧美色国产精品| 国产精品久久久久久户外露出| 丝袜国产日韩另类美女| 91网站最新地址| 欧美xxxx在线观看| 婷婷国产在线综合| 99视频精品在线| 国产婷婷色一区二区三区在线| 婷婷夜色潮精品综合在线| 99视频国产精品| 欧美高清在线一区二区| 另类欧美日韩国产在线| 在线国产亚洲欧美| 国产精品久久久久久久浪潮网站| 精一区二区三区| 91精品国产综合久久久久久 | 欧美在线短视频| 国产精品剧情在线亚洲| 久久国产婷婷国产香蕉| 欧美区在线观看| 亚洲第一av色| 欧美日韩在线观看一区二区| 国产精品久久一卡二卡| 精品午夜久久福利影院| 日韩视频免费直播| 美女视频黄久久| 91精品久久久久久蜜臀| 三级一区在线视频先锋 | 91女厕偷拍女厕偷拍高清| 国产精品美女久久久久久久久| 国产毛片一区二区| 久久久99精品久久| 国产精品一区二区久久不卡| 日韩一区二区三区电影| 久久99热99| 国产婷婷色一区二区三区四区|