網(wǎng)絡(luò)技術(shù)是從1990年代中期發(fā)展起來的新技術(shù),它把互聯(lián)網(wǎng)上分散的資源融為有機整體,實現(xiàn)資源的全面共享和有機協(xié)作,使人們能夠透明地使用資源的整體能力并按需獲取信息。資源包括高性能計算機、存儲資源、數(shù)據(jù)資源、信息資源、知識資源、專家資源、大型數(shù)據(jù)庫、網(wǎng)絡(luò)、傳感器等。 當(dāng)前的互聯(lián)網(wǎng)只限于信息共享,網(wǎng)絡(luò)則被認為是互聯(lián)網(wǎng)發(fā)展的第三階段。 首先來看看 Security::SecWalkCommonProlog 函數(shù) (Security.cpp:406) 定義的特殊幀。首先會跳過遍歷操作的調(diào)用者自己的幀;然后當(dāng)進行堆棧遍歷指定最大幀數(shù)為1時,跳過所有 Reflection/Remoting 調(diào)用的內(nèi)部幀;最后針對 LookForMyCallersCaller 這種特殊調(diào)用,以及指定最大幀數(shù)進行處理。 以下內(nèi)容為程序代碼: BOOL Security::SecWalkCommonProlog (SecWalkPrologData * pData, MethodDesc * pMeth, StackWalkAction * pAction, CrawlFrame * pCf) { *pAction = SWA_CONTINUE; // 跳過 CAS 檢測調(diào)用幀 if ((pData->pStackMark != NULL) && !IsInCalleesFrames(pCf->GetRegisterSet(), pData->pStackMark)) return TRUE; // 跳過內(nèi)部函數(shù)幀,如 Reflection / Remoting 調(diào)用的內(nèi)部幀等等 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 相關(guān)類型的方法幀 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; } } // 如果只希望檢測調(diào)用者的調(diào)用者兩級,則跳過其他的所有幀 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 函數(shù)將對 Assembly/AppDomain 變化,和顯式指定安全對象的情況,進行 CAS 檢測。 網(wǎng)絡(luò)的神奇作用吸引著越來越多的用戶加入其中,正因如此,網(wǎng)絡(luò)的承受能力也面臨著越來越嚴峻的考驗―從硬件上、軟件上、所用標(biāo)準(zhǔn)上......,各項技術(shù)都需要適時應(yīng)勢,對應(yīng)發(fā)展,這正是網(wǎng)絡(luò)迅速走向進步的催化劑。 |
溫馨提示:喜歡本站的話,請收藏一下本站!