人人做人人澡人人爽欧美,国产主播一区二区,久久久精品五月天,羞羞视频在线观看免费

當前位置:蘿卜系統 > 網絡技術教程 > 詳細頁面

CLR 中代碼訪問安全檢測完成原理(4)

CLR 中代碼訪問安全檢測完成原理(4)

更新時間:2021-10-03 文章作者:未知 信息來源:網絡 閱讀次數:

網絡技術是從1990年代中期發展起來的新技術,它把互聯網上分散的資源融為有機整體,實現資源的全面共享和有機協作,使人們能夠透明地使用資源的整體能力并按需獲取信息。資源包括高性能計算機、存儲資源、數據資源、信息資源、知識資源、專家資源、大型數據庫、網絡、傳感器等。 當前的互聯網只限于信息共享,網絡則被認為是互聯網發展的第三階段。
首先來看看 Security::SecWalkCommonProlog 函數 (Security.cpp:406) 定義的特殊幀。首先會跳過遍歷操作的調用者自己的幀;然后當進行堆棧遍歷指定最大幀數為1時,跳過所有 Reflection/Remoting 調用的內部幀;最后針對 LookForMyCallersCaller 這種特殊調用,以及指定最大幀數進行處理。

以下內容為程序代碼:

BOOL Security::SecWalkCommonProlog (SecWalkPrologData * pData, MethodDesc * pMeth, StackWalkAction * pAction, CrawlFrame * pCf)
{
 *pAction = SWA_CONTINUE;

 // 跳過 CAS 檢測調用幀
 if ((pData->pStackMark != NULL) && !IsInCalleesFrames(pCf->GetRegisterSet(), pData->pStackMark))
  return TRUE;


 // 跳過內部函數幀,如 Reflection / Remoting 調用的內部幀等等
 if (pData->dwFlags & CORSEC_SKIP_INTERNAL_FRAMES)
 {
  // 跳過 Remoting.Messaging.StackBuilderSink.PrivateProcessMessage 方法
  if (pMeth == s_stdData.pMethPrivateProcessMessage)
  {
   pData->bSkippingRemoting = TRUE;
   return TRUE
  }

  // 跳過 Remoting 透明代理幀
  if (!pCf->IsFrameless() && pCf->GetFrame()->GetFrameType() == Frame::TYPE_TP_METHOD_FRAME)
  {
   pData->bSkippingRemoting = FALSE;
   return TRUE;
  }

  // 跳過 Remoting 幀
  if (pData->bSkippingRemoting)
   return TRUE;

  // 跳過 Refection 相關類型的方法幀
  MethodTable *pMT = pMeth->GetMethodTable();

  if (pMT == s_stdData.pTypeRuntimeMethodInfo ||
    pMT == s_stdData.pTypeMethodBase ||
    pMT == s_stdData.pTypeRuntimeConstructorInfo ||
    pMT == s_stdData.pTypeConstructorInfo ||
    pMT == s_stdData.pTypeRuntimeType ||
    pMT == s_stdData.pTypeType ||
    pMT == s_stdData.pTypeRuntimeEventInfo ||
    pMT == s_stdData.pTypeEventInfo ||
    pMT == s_stdData.pTypeRuntimePropertyInfo ||
    pMT == s_stdData.pTypePropertyInfo ||
    pMT == s_stdData.pTypeActivator ||
    pMT == s_stdData.pTypeAppDomain ||
    pMT == s_stdData.pTypeAssembly)
  {
   return TRUE;
  }
 }

 // 如果只希望檢測調用者的調用者兩級,則跳過其他的所有幀
 if ((pData->pStackMark != NULL) && (*pData->pStackMark == LookForMyCallersCaller) && !pData->bFoundCaller)
 {
  pData->bFoundCaller = TRUE;
  return TRUE;
 }

 // 最多只檢測 cCheck 幀
 if (pData->cCheck >= 0)
 {
  if (pData->cCheck == 0)
  {
   pData->dwFlags |= CORSEC_STACKWALK_HALTED;
   *pAction = SWA_ABORT;
   return TRUE;
  }
  else
  {
   --(pData->cCheck);
  }
 }

 return FALSE;
}


  在跳過了這些無需處理的堆棧幀后,CodeAccessCheckStackWalkCB 函數將對 Assembly/AppDomain 變化,和顯式指定安全對象的情況,進行 CAS 檢測。


網絡的神奇作用吸引著越來越多的用戶加入其中,正因如此,網絡的承受能力也面臨著越來越嚴峻的考驗―從硬件上、軟件上、所用標準上......,各項技術都需要適時應勢,對應發展,這正是網絡迅速走向進步的催化劑。

溫馨提示:喜歡本站的話,請收藏一下本站!

本類教程下載

系統下載排行

網站地圖xml | 網站地圖html
主站蜘蛛池模板: 中阳县| 普陀区| 南丰县| 望谟县| 钟祥市| 马公市| 运城市| 古蔺县| 乳源| 台中县| 鄂州市| 股票| 德安县| 祁阳县| 桂阳县| 读书| 曲阳县| 山西省| 资中县| 久治县| 台中县| 阿巴嘎旗| 武定县| 灵丘县| 伊吾县| 嘉义市| 封丘县| 竹北市| 德兴市| 大丰市| 蒙山县| 隆子县| 阳泉市| 贵德县| 靖宇县| 曲水县| 凤山市| 雷山县| 江永县| 黎城县| 龙门县|