版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
實驗九存儲管理實驗九存儲管理/NUMPAGES28實驗九存儲管理實驗九存儲管理實驗九存儲管理[1]WindowsXp內(nèi)存結(jié)構(gòu)背景知識WindowsXp是32位的操作系統(tǒng),它使計算機CPU可以用32位地址對32位內(nèi)存塊進行操作。內(nèi)存中的每一個字節(jié)都可以用一個32位的指針來尋址。這樣,最大的存儲空間就是232字節(jié)或4000兆字節(jié)(4GB)。這樣,在Windows下運行的每一個應(yīng)用程序都認為能獨占可能的4GB大小的空間而另一方面,實際上沒有幾臺機器的RAM能達到4GB,更不必說讓每個進程都獨享4GB內(nèi)存了。Windows在幕后將虛擬內(nèi)存(virtualmemory,VM)地址映射到了各進程的物理內(nèi)存地址上。而所謂物理內(nèi)存是指計算機的RAM和由Windows分配到用戶驅(qū)動器根目錄上的換頁文件。物理內(nèi)存完全由系統(tǒng)管理。實驗?zāi)康耐ㄟ^實驗了解windowsXp內(nèi)存的使用,學習如何在應(yīng)用程序中管理內(nèi)存、體會Windows應(yīng)用程序內(nèi)存的簡單性和自我防護能力。了解windowsXp的內(nèi)存結(jié)構(gòu)和虛擬內(nèi)存的管理,進而了解進程堆和windows為使用內(nèi)存而提供的一些擴展功能。工具/準備工作您需要做以下準備:一臺運行WindowsXpProfessional操作系統(tǒng)的計算機計算機中需安裝VisualC++6.0專業(yè)版或企業(yè)版實驗內(nèi)容與步驟Windows提供了一個API即GetSystemInfo(),以便用戶能檢查系統(tǒng)中虛擬內(nèi)存的一些特性。程序5-1顯示了如何調(diào)用該函數(shù)以及顯示系統(tǒng)中當前內(nèi)存的參數(shù)。步驟1:登錄進入WindowsXpProfessional。步驟2:在“開始”菜單中單擊“程序”-“MicrosoftVisualStudio6.0”–“MicrosoftVisualC++6.0”命令,進入步驟3:在工具欄單擊“打開”按鈕,在“打開”對話框中找到并打開實驗源程序5-1.cpp。程序5-1:獲取有關(guān)系統(tǒng)的內(nèi)存設(shè)置的信息//工程vmeminfo#include<windows.h>#include<iostream>#include<shlwapi.h>#include<iomanip>#pragmacomment(lib,"shlwapi.lib")voidmain(){//首先,讓我們獲得系統(tǒng)信息SYSTEM_INFOsi;::ZeroMemory(&si,sizeof(si));::GetSystemInfo(&si);//使用外殼輔助程序?qū)σ恍┏叽邕M行格式化TCHARszPageSize[MAX_PATH];::StrFormatByteSize(si.dwPageSize,szPageSize,MAX_PATH);DWORDdwMemSize=(DWORD)si.lpMaximumApplicationAddress-(DWORD)si.lpMinimumApplicationAddress;TCHARszMemSize[MAX_PATH];::StrFormatByteSize(dwMemSize,szMemSize,MAX_PATH);//將內(nèi)存信息顯示出來std::cout<<"Virtualmemorypagesize:"<<szPageSize<<std::endl;std::cout.fill('0');std::cout<<"Minimumapplicationaddress:0x"<<std::hex<<std::setw(8)<<(DWORD)si.lpMinimumApplicationAddress<<std::endl;std::cout<<"Maximumapplicationaddress:0x"<<std::hex<<std::setw(8)<<(DWORD)si.lpMaximumApplicationAddress<<std::endl;std::cout<<"Totalavailablevirtualmemory:"<<szMemSize<<std::endl;}步驟4:單擊“Build”菜單中的“Compile5-1.cpp”命令,并單擊“是”按鈕確認。系統(tǒng)對5-1.cpp進行編譯。步驟5:編譯完成后,單擊“Build”菜單中的“Build5-1.exe”命令,建立5-1.exe可執(zhí)行文件。操作能否正常進行?如果不行,則可能的原因是什么?_不可以運行,#pragmacomment(lib,"shlwapi.lib")指令錯誤,在pragma與comment中間應(yīng)該有空格___________________________________________________________________________________________________________________________________________步驟6:在工具欄單擊“ExecuteProgram”(執(zhí)行程序)按鈕,執(zhí)行5-1.exe程序。運行結(jié)果(分行書寫。如果運行不成功,則可能的原因是什么?):1)虛擬內(nèi)存每頁容量為:4.00KB2)最小應(yīng)用地址:0*000100003)最大應(yīng)用地址:0*7ffeffff4)當前可供應(yīng)用程序使用的內(nèi)存空間為:2.00GB5)當前計算機的實際內(nèi)存大小為:1.99GB1)虛擬內(nèi)存每頁容量為:2)最小應(yīng)用地址:3)最大應(yīng)用地址為:4)當前可供應(yīng)用程序使用的內(nèi)存空間為:5)當前計算機的實際內(nèi)存大小為:閱讀和分析程序5-1,請回答問題:理論上每個windows應(yīng)用程序可以獨占的最大存儲空間是:____4GB____在程序5-1中,用于檢索系統(tǒng)中虛擬內(nèi)存特性的API函數(shù)是:DWORD提示:可供應(yīng)用程序使用的內(nèi)存空間實際上已經(jīng)減去了開頭與結(jié)尾兩個64KB的保護區(qū)。虛擬內(nèi)存空間中的64KB保護區(qū)是防止編程錯誤的一種Windows方式。任何對內(nèi)存中這一區(qū)域的訪問(讀、寫、執(zhí)行)都將引發(fā)一個錯誤陷井,從而導致錯誤并終止程序的執(zhí)行。也就是說,假如用戶有一個NULL指針(地址為0),但仍試圖在此之前很近的地址處使用另一個指針,這將因為試圖從更低的保留區(qū)域讀寫數(shù)據(jù),從而產(chǎn)生意外錯誤并終止程序的執(zhí)行。[2]WindowsXp虛擬內(nèi)存背景知識在WindowsXp環(huán)境下,4GB的虛擬地址空間被劃分成兩個部分:低端2GB提供給進程使用,高端2GB提供給系統(tǒng)使用。這意味著用戶的應(yīng)用程序代碼,包括DLL以及進程使用的各種數(shù)據(jù)等,都裝在用戶進程地址空間內(nèi)(低端2GB)。用戶過程的虛擬地址空間也被分成三部分:1)虛擬內(nèi)存的已調(diào)配區(qū)(committed):具有備用的物理內(nèi)存,根據(jù)該區(qū)域設(shè)定的訪問權(quán)限,用戶可以進行寫、讀或在其中執(zhí)行程序等操作。2)虛擬內(nèi)存的保留區(qū)(reserved):沒有備用的物理內(nèi)存,但有一定的訪問權(quán)限。3)虛擬內(nèi)存的自由區(qū)(free):不限定其用途,有相應(yīng)的PAGE_NOACCESS權(quán)限。與虛擬內(nèi)存區(qū)相關(guān)的訪問權(quán)限告知系統(tǒng)進程可在內(nèi)存中進行何種類型的操作。例如,用戶不能在只有PAGE_READONLY權(quán)限的區(qū)域上進行寫操作或執(zhí)行程序;也不能在只有PAGE_EXECUTE權(quán)限的區(qū)域里進行讀、寫操作。而具有PAGE_NOACCESS權(quán)限的特殊區(qū)域,則意味著不允許進程對其地址進行任何操作。在進程裝入之前,整個虛擬內(nèi)存的地址空間都被設(shè)置為只有PAGE_NOACCESS權(quán)限的自由區(qū)域。當系統(tǒng)裝入進程代碼和數(shù)據(jù)后,才將內(nèi)存地址的空間標記為已調(diào)配區(qū)或保留區(qū),并將諸如EXECUTE、READWRITE和READONLY的權(quán)限與這些區(qū)域相關(guān)聯(lián)。如表3-2所示,給出了MEMORY_BASIC_INFORMAITON的結(jié)構(gòu),此數(shù)據(jù)描述了進程虛擬內(nèi)存空間中的一組虛擬內(nèi)存頁面的當前狀態(tài),期中State項表明這些區(qū)域是否為自由區(qū)、已調(diào)配區(qū)或保留區(qū);Protect項則包含了windows系統(tǒng)為這些區(qū)域添加了何種訪問保護;type項則表明這些區(qū)域是課執(zhí)行圖像、內(nèi)存映射文件還是簡單的私有內(nèi)存。VirsualQueryEX()API能讓用戶在指定的進程中,對虛擬內(nèi)存地址的大小和屬性進行檢測。Windows還提供了一整套能使用戶精確控制應(yīng)用程序的虛擬地址空間的虛擬內(nèi)存API。一些用于虛擬內(nèi)存操作及檢測的API如表3-2所示。表3-1MEMORY_BASIC_INFORMAITON結(jié)構(gòu)的成員成員名稱目的PVOIDBaseAddress虛擬內(nèi)存區(qū)域開始處的指針PVOIDAllocationBase如果這個特定的區(qū)域為子分配區(qū)的話,則為虛擬內(nèi)存外面區(qū)域的指針;否則此值與BaseAddress相同DWORDAllocationProtect虛擬內(nèi)存最初分配區(qū)域的保護屬性。其可能值包括:PAGE_NOACCESS,PAGE_READONLY,PAGE_READWRITE和PAGE_EXECUTE_READDWORDRegionSize虛擬內(nèi)存區(qū)域的字節(jié)數(shù)DWORD區(qū)域的當前分配狀態(tài)。其可能值為MEM_COMMIT,MEM_PREE和MEM_RESERVEDWORDProtect虛擬內(nèi)存當前的保護屬性??赡苤蹬cAllocationProtect成員的相同DWORDType虛擬內(nèi)存區(qū)域中出現(xiàn)的頁面類型。可能值為MEM_IMAGE,MEM_MAPPED和MEM_PRIVATE表3-2虛擬內(nèi)存的APIAPI名稱描述VisualQueryEX()通過填充MEMORY_BASIC_INFORMATION結(jié)構(gòu)檢測進程內(nèi)虛擬內(nèi)存的區(qū)域VisualAlloc()保留或調(diào)配進程的部分虛擬內(nèi)存,設(shè)置分配和保護標志VirsualFree()釋放或收回應(yīng)用程序使用的部分虛擬地址VirsualProtect()改變虛擬內(nèi)存區(qū)域保護規(guī)范VirsualLock()防止系統(tǒng)將虛擬內(nèi)存區(qū)域通過系統(tǒng)交換到頁面文件中VirsualUnlock()釋放虛擬內(nèi)存的鎖定區(qū)域,必要時,允許系統(tǒng)將其交換到頁面文件中提供虛擬內(nèi)存分配功能的是VirtualAlloc()API。該API支持用戶向系統(tǒng)要求新的虛擬內(nèi)存或改變已分配內(nèi)存的當前狀態(tài)。用戶若想通過VirtualAlloc()函數(shù)使用虛擬內(nèi)存,可以采用兩種方式通知系統(tǒng):1)簡單地將內(nèi)存內(nèi)容保存在地址空間內(nèi)2)請求系統(tǒng)返回帶有物理存儲區(qū)(RAM的空間或換頁文件)的部分地址空間用戶可以用flAllocationType參數(shù)(commit和reserve)來定義這些方式,用戶可以通知Windows按只讀、讀寫、不可讀寫、執(zhí)行或特殊方式來處理新的虛擬內(nèi)存。與VirtualAlloc()函數(shù)對應(yīng)的是VirtualFree()函數(shù),其作用是釋放虛擬內(nèi)存中的已調(diào)配頁或保留頁。用戶可利用dwFreeType參數(shù)將已調(diào)配頁修改成保留頁屬性。VirtualProtect()是VirtualAlloc()的一個輔助函數(shù),利用它可以改變虛擬內(nèi)存區(qū)的保護規(guī)范。實驗?zāi)康?)通過實驗了解WindowsXp內(nèi)存的使用,學習如何在應(yīng)用程序中管理內(nèi)存,體會Windows應(yīng)用程序內(nèi)存的簡單性和自我防護能力。2)學習檢查虛擬內(nèi)存空間或?qū)ζ溥M行操作。3)了解WindowsXp的內(nèi)存結(jié)構(gòu)和虛擬內(nèi)存的管理,進而了解進程堆和Windows為使用內(nèi)存而提供的一些擴展功能。工具/準備工作在開始本實驗之前,請回顧教科書的相關(guān)內(nèi)容。您需要做以下準備:1)一臺運行WindowsXpProfessional操作系統(tǒng)的計算機。2)計算機中需安裝VisualC++6.0專業(yè)版或企業(yè)版。實驗內(nèi)容與步驟1.虛擬內(nèi)存的檢測清單5-2所示的程序使用VirtualQueryEX()函數(shù)來檢查虛擬內(nèi)存空間。步驟1:登錄進入WindowsXpProfessional。步驟2:在“開始”菜單中單擊“程序”-“MicrosoftVisualStudio6.0”–“MicrosoftVisualC++6.0”命令,進入步驟3:在工具欄單擊“打開”按鈕,在“打開”對話框中找到并打開實驗源程序5-2.cpp。清單5-2檢測進程的虛擬地址空間//工程vmwalker#include<windows.h>#include<iostream>#include<shlwapi.h>#include<iomanip>#pragmacomment(lib,"Shlwapi.lib")//以可讀方式對用戶顯示保護的輔助方法。//保護標記表示允許應(yīng)用程序?qū)?nèi)存進行訪問的類型//以及操作系統(tǒng)強制訪問的類型inlineboolTestSet(DWORDdwTarget,DWORDdwMask){return((dwTarget&dwMask)==dwMask);}#defineSHOWMASK(dwTarget,type)\if(TestSet(dwTarget,PAGE_##type))\{std::cout<<","<<#type;}voidShowProtection(DWORDdwTarget){SHOWMASK(dwTarget,READONLY);SHOWMASK(dwTarget,GUARD);SHOWMASK(dwTarget,NOCACHE);SHOWMASK(dwTarget,READWRITE);SHOWMASK(dwTarget,WRITECOPY);SHOWMASK(dwTarget,EXECUTE);SHOWMASK(dwTarget,EXECUTE_READ);SHOWMASK(dwTarget,EXECUTE_READWRITE);SHOWMASK(dwTarget,EXECUTE_WRITECOPY);SHOWMASK(dwTarget,NOACCESS);}//遍歷整個虛擬內(nèi)存并對用戶顯示其屬性的工作程序的方法voidWalkVM(HANDLEhProcess){//首先,獲得系統(tǒng)信息SYSTEM_INFOsi;::ZeroMemory(&si,sizeof(si));::GetSystemInfo(&si);//分配要存放信息的緩沖區(qū)MEMORY_BASIC_INFORMATIONmbi;::ZeroMemory(&mbi,sizeof(mbi));//循環(huán)整個應(yīng)用程序地址空間LPCVOIDpBlock=(LPVOID)si.lpMinimumApplicationAddress;while(pBlock<si.lpMaximumApplicationAddress){//獲得下一個虛擬內(nèi)存塊的信息if(::VirtualQueryEx(hProcess, //相關(guān)的進程pBlock,//開始位置 &mbi,//緩沖區(qū)sizeof(mbi))==sizeof(mbi)) //大小的確認{//計算塊的結(jié)尾及其大小LPCVOIDpEnd=(PBYTE)pBlock+mbi.RegionSize; TCHARszSize[MAX_PATH];::StrFormatByteSize(mbi.RegionSize,szSize,MAX_PATH);//顯示塊地址和大小std::cout.fill('0');std::cout<<std::hex<<std::setw(8)<<(DWORD)pBlock<<"-"<<std::hex<<std::setw(8)<<(DWORD)pEnd<<(::strlen(szSize)==7?"(":"(")<<szSize<<")";//顯示塊的狀態(tài)switch(mbi.State){caseMEM_COMMIT: std::cout<<"Committed"; break;caseMEM_FREE: std::cout<<"Free"; break;caseMEM_RESERVE: std::cout<<"Reserved"; break;}//顯示保護 if(mbi.Protect==0&&mbi.State!=MEM_FREE){mbi.Protect=PAGE_READONLY;} ShowProtection(mbi.Protect);//顯示類型switch(mbi.Type){caseMEM_IMAGE: std::cout<<",Image"; break; caseMEM_MAPPED: std::cout<<",Mapped"; break;caseMEM_PRIVATE: std::cout<<",Private"; break; }//檢驗可執(zhí)行的影像TCHARszFilename[MAX_PATH];if(::GetModuleFileName((HMODULE)pBlock, //實際虛擬內(nèi)存的模塊句柄 szFilename,//完全指定的文件名稱 MAX_PATH)>0)//實際使用的緩沖區(qū)大小{//除去路徑并顯示::PathStripPath(szFilename);std::cout<<",Module:"<<szFilename; }std::cout<<std::endl; //移動塊指針以獲得下一下個塊pBlock=pEnd;}}}voidmain(){//遍歷當前進程的虛擬內(nèi)存 ::WalkVM(::GetCurrentProcess());}清單5-2中顯示一個walkVM()函數(shù)開始于某個進程可訪問的最低端虛擬地址處,并在其中顯示各塊虛擬內(nèi)存的特性。虛擬內(nèi)存中的塊由VirsualQueryEX()API定義成連續(xù)快或具有相同狀態(tài)(自由區(qū),已調(diào)配區(qū)等)的內(nèi)存,并分配以一組統(tǒng)一的保護標志(只讀、可執(zhí)行等)。步驟4:單擊“Build”菜單中的“Compile5-2.cpp”命令,并單擊“是”按鈕確認。系統(tǒng)對5-2.cpp進行編譯。步驟5:編譯完成后,單擊“Build”菜單中的“Build5-2.exe”命令,建立5-2.exe可執(zhí)行文件。操作能否正常進行?如果不行,則可能的原因是什么?___能運行_________________________________________________________________________________________________________________________________________步驟6:在工具欄單擊“ExecuteProgram”(執(zhí)行程序)按鈕,執(zhí)行5-2.exe程序。1)分析運行結(jié)果(如果運行不成功,則可能的原因是什么)按committed,reserved,free等三種虛擬地址空間分別記錄實驗數(shù)據(jù),其中“描述”是對該組數(shù)據(jù)的簡單描述,例如,對下列一組數(shù)據(jù):00010000-0001Xp<8.00KB>Committed,READWRITE,Private可描述為:具有READWRITE權(quán)限的已調(diào)配私有內(nèi)存區(qū)。將系統(tǒng)當前的自由區(qū)(Free)虛擬地址空間填入表3-3中。地址大小虛擬地址空間類型訪問權(quán)限描述
00010000-00012000
8.00KBfree
READWRITE
具有READWRITE權(quán)限的已調(diào)配私有內(nèi)存區(qū)
00012000-0002000056.0KBfreeNOACCESS
沒有任何權(quán)限的已調(diào)配的共有內(nèi)存區(qū)
00020000-00021000
4.00KBfree
READWRITE
具有READWRITE權(quán)限的已調(diào)配私有內(nèi)存區(qū)
00021000-00030000
60.0KBfreeNOACCESS
沒有任何權(quán)限的已調(diào)配的共有內(nèi)存區(qū)
00030000-0012c000
0.98MBfree
READONLY
只具有READ權(quán)限的已調(diào)配私有內(nèi)存區(qū)
0012c000-0012d000
4.00KBfree
READWRITE
具有READWRITE權(quán)限的已調(diào)配私有內(nèi)存區(qū)
0012/p>
12.0KBfree
READWRITE
具有READWRITE權(quán)限的已調(diào)配私有內(nèi)存區(qū)
00130000-00133000
12.0KBfree
READONLY
只具有READ權(quán)限的已調(diào)配內(nèi)存區(qū)表3-3實驗記錄地址大小虛擬空間類型訪問權(quán)限描述freefreefreefreefreefreefree將系統(tǒng)當前的已調(diào)配區(qū)(Committed)虛擬地址空間填入表3-4中。表3-4實驗記錄00010000-00020000(64.0KB)Committed,READWRITE,Mapped00020000-00030000(64.0KB)Committed,READWRITE,Mapped0012d000-0012e000(4.00KB)Committed,GUARD,READWRITE,Private00128.00KB)Committed,READWRITE,Private00130000-00134000(16.0KB)Committed,READONLY,Mapped00140000-001a7000(412KB)Committed,READONLY,Mapped001b0000-001b1000(4.00KB)Committed,READWRITE,Private001c0000-001c1000(4.00KB)Committed,READWRITE,Private001d0000-001d7000(28.0KB)Committed,READONLY,Mapped001e0000-001e2000(8.00KB)Committed,READWRITE,Mapped地址大小虛擬空間類型訪問權(quán)限描述CommittedCommittedCommittedCommittedCommittedCommittedCommitted將系統(tǒng)當前的保留區(qū)(Reserved)虛擬地址空間填入表3-5中。0022844KB)Reserved,READONLY,Private00306000-003c0000(744KB)Reserved,READONLY,Mapped003c3000-003c8000(20.0KB)Reserved,READONLY,Mapped00673000-00680000(52.0KB)Reserved,READONLY,Private006f4000-01280000(11.5MB)Reserved,READONLY,Mapped01288000-01380000(992KB)Reserved,READONLY,Private01406000-01410000(40.0KB)Reserved,READONLY,Private表3-5實驗記錄地址大小虛擬空間類型訪問權(quán)限描述ReservedReservedReservedReservedReservedReservedReserved從上述輸出結(jié)果,對照分析清單5-2的程序,請簡單描述程序運行的流程:____________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________2.虛擬內(nèi)存的分配與釋放能正確使用系統(tǒng)函數(shù)GetMeoryStatus()和數(shù)據(jù)結(jié)構(gòu)MEMORY_STATUS了解系統(tǒng)內(nèi)存和虛擬存儲空間使用情況,會使用VirsualAlloc()函數(shù)和VirsualFree()函數(shù)分配和釋放虛擬內(nèi)存空間。//GetMemoryStatus.cpp:Definestheentrypointfortheconsoleapplication.//#include"stdafx.h"#include"GetMemoryStatus.h"#ifdef_DEBUG#definenewDEBUG_NEW#undefTHIS_FILEstaticcharTHIS_FILE[]=__FILE__;#endifvoidGetMemSta(void);//TheoneandonlyapplicationobjectCWinApptheApp;usingnamespacestd;int_tmain(intargc,TCHAR*argv[],TCHAR*envp[]){intnRetCode=0;LPVOIDBaseAddr;char*str;GetMemSta();printf("NowAllocate32MVirsualMemoryand2MPhysicalMemory\n\n");BaseAddr=::VirtualAlloc(NULL,1024*1024*32,MEM_RESERVE|MEM_COMMIT,PAGE_READWRITE);//分配虛擬內(nèi)存if(BaseAddr==NULL)printf("VirsualAllocateFail.\n");str=(char*)malloc(1024*1024*2);//分配內(nèi)存GetMemSta(); printf("NowRelease32MVirsualMemoryand2MPhysicalMemory\n\n");if(::VirtualFree(BaseAddr,0,MEM_RELEASE)==0)//釋放虛擬內(nèi)存printf("ReleaseAllocateFail.\n");free(str);//釋放內(nèi)存GetMemSta();returnnRetCode;}voidGetMemSta(void){MEMORYSTATUSMemInfo;GlobalMemoryStatus(&MemInfo);printf("CurrentMemoryStatusis:\n");printf("\tTotalPhysicalMemoryis%dMB\n",MemInfo.dwTotalPhys/(1024*1024)); printf("\tAvailablePhysicalMemoryis%dMB\n",MemInfo.dwAvailPhys/(1024*1024));printf("\tTotalPageFileis%dMB\n",MemInfo.dwTotalPageFile/(1024*1024));printf("\tAvailablePageFileis%dMB\n",MemInfo.dwAvailPageFile/(1024*1024));printf("\tTotalVirtualMemoryis%dMB\n",MemInfo.dwTotalVirtual/(1024*1024)); printf("\tAvailableVirsualmemoryis%dMB\n",MemInfo.dwAvailVi
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年保姆看護老人協(xié)議樣本
- 投資入股協(xié)議書范文
- 【初中地理】第二章地圖知識點每日一背-2024-2025學年七年級地理上學期(人教版2024)
- 2024年環(huán)境衛(wèi)生治理合同協(xié)議書范本
- 房產(chǎn)投資合作協(xié)議書
- 戶外店鋪合作協(xié)議范本
- 家庭教育委托協(xié)議書新范本
- 中外貨物買賣合同要點解讀
- 有關(guān)上海租賃住房合同范本
- 企業(yè)擔保借款合同書
- 人美版七年級下冊《美術(shù)》單元作業(yè)設(shè)計
- 公交有限公司觸電事故現(xiàn)場處置預(yù)案
- 2024年考研管理類聯(lián)考綜合能力真題及答案
- 安全使用城鎮(zhèn)燃氣知識講座
- T-BJCC 1003-2024 首店、首發(fā)活動、首發(fā)中心界定標準
- 2024年廣東省出版集團數(shù)字出版有限公司招聘筆試參考題庫含答案解析
- 機械原理課程設(shè)計全自動黑板擦方案
- 職業(yè)生涯規(guī)劃數(shù)媒專業(yè)
- 新生兒腸脹氣課件
- 顧客滿意理念與技巧課件
- 付款條件與支付方式
評論
0/150
提交評論