日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
深度解析Linux經(jīng)典棧溢出攻擊方式(linux經(jīng)典棧溢出)

棧(Stack)是計(jì)算機(jī)內(nèi)存中的一種數(shù)據(jù)結(jié)構(gòu),用于保存函數(shù)調(diào)用中的參數(shù)和局部變量等信息。但是,棧在實(shí)現(xiàn)過程中存在缺陷,即棧溢出(Stack Overflow),也就是在??臻g中寫入超過其分配空間的數(shù)據(jù)。攻擊者可以利用這個(gè)漏洞實(shí)現(xiàn)棧溢出攻擊。而Linux系統(tǒng)是這類棧溢出攻擊的主要受害者,因此本文將深入探討Linux經(jīng)典棧溢出攻擊的實(shí)現(xiàn)原理和防范方法。

在成都網(wǎng)站設(shè)計(jì)、成都做網(wǎng)站過程中,需要針對客戶的行業(yè)特點(diǎn)、產(chǎn)品特性、目標(biāo)受眾和市場情況進(jìn)行定位分析,以確定網(wǎng)站的風(fēng)格、色彩、版式、交互等方面的設(shè)計(jì)方向。創(chuàng)新互聯(lián)公司還需要根據(jù)客戶的需求進(jìn)行功能模塊的開發(fā)和設(shè)計(jì),包括內(nèi)容管理、前臺(tái)展示、用戶權(quán)限管理、數(shù)據(jù)統(tǒng)計(jì)和安全保護(hù)等功能。

一、棧溢出攻擊原理

我們需要了解一些基礎(chǔ)概念。

1.1 調(diào)用棧

當(dāng)一個(gè)函數(shù)被調(diào)用時(shí),它的程序參數(shù)存儲(chǔ)在棧中的一部分內(nèi)存中,同時(shí)在棧的頂部存儲(chǔ)了該函數(shù)的返回地址,也就是說當(dāng)該函數(shù)執(zhí)行完畢之后會(huì)返回到該地址處繼續(xù)執(zhí)行。調(diào)用棧是這樣的一個(gè)數(shù)據(jù)結(jié)構(gòu),調(diào)用函數(shù)時(shí)使用,當(dāng)函數(shù)返回時(shí)撤銷之前的函數(shù)調(diào)用。

1.2 棧溢出

當(dāng)向一個(gè)緩沖區(qū)寫入超過其本身容量的數(shù)據(jù)時(shí),數(shù)據(jù)就會(huì)覆蓋那個(gè)緩沖區(qū)后面的內(nèi)存地址。如果這個(gè)被寫入的位置正好是調(diào)用棧元素的位置,那么就會(huì)覆蓋這個(gè)調(diào)用棧上的棧幀(Stack Frame)中的數(shù)據(jù),同時(shí)也會(huì)覆蓋存儲(chǔ)在棧中的返回地址。由此,攻擊者就可以在函數(shù)返回時(shí)跳轉(zhuǎn)到自己編寫的代碼中去執(zhí)行,從而完全控制程序的執(zhí)行流程。

一旦攻擊者控制了程序的執(zhí)行流程,他就可以做任何事情,例如啟動(dòng)后門程序、讀取機(jī)密文件、改變環(huán)境變量、執(zhí)行任意代碼等等。由于棧溢出是一種常見的漏洞類型,惡意攻擊者利用棧溢出攻擊常常能夠成功。

1.3 棧溢出攻擊的實(shí)現(xiàn)方式

基本原理已經(jīng)解釋清楚了,攻擊者實(shí)現(xiàn)這么一個(gè)棧溢出攻擊的方法通常有兩種:

1.3.1 覆蓋函數(shù)返回地址

攻擊者通過覆蓋棧上的返回地址,使得當(dāng)前函數(shù)執(zhí)行完成時(shí)會(huì)跳轉(zhuǎn)到攻擊者編寫的代碼處繼續(xù)執(zhí)行。這個(gè)方法實(shí)現(xiàn)起來比較簡單,只要知道棧幀的大小,計(jì)算出攻擊者的代碼地址就可以,因?yàn)樘D(zhuǎn)地址就是覆蓋掉的返回地址。

1.3.2 利用shellcode

Shellcode可以看作是一段正常的程序,但是它的目標(biāo)是執(zhí)行攻擊者想要的命令。攻擊者可以在棧溢出時(shí)把shellcode放入到棧緩沖區(qū)中,然后同時(shí)覆蓋掉返回地址,這樣函數(shù)執(zhí)行完畢時(shí)就會(huì)跳轉(zhuǎn)到這個(gè)shellcode執(zhí)行攻擊者編寫的程序,這種方式在繞過程序棧非執(zhí)行區(qū)域的保護(hù)措施上比較有用。

二、Linux下的棧溢出攻擊

Linux系統(tǒng)是一種受到極大威脅的操作系統(tǒng)。因此,對于Linux下的棧溢出攻擊,我們需要重點(diǎn)關(guān)注以下幾點(diǎn)。

2.1 編譯器優(yōu)化引起的問題

Ubuntu發(fā)行版下,gcc 5 開始默認(rèn)啟用了棧保護(hù)技術(shù),即在棧上加入了一段特定的隨機(jī)值作為stack canary,用于在函數(shù)返回時(shí)防止棧被破壞,這樣就可以一定程度上防止棧溢出攻擊。當(dāng)棧被修改時(shí),會(huì)觸發(fā) stack canary 檢查,導(dǎo)致程序異常終止。

但是,在編寫某些特定類型程序時(shí),利用未經(jīng)驗(yàn)證的用戶輸入,或者字符串格式化等可疑操作時(shí),這種技術(shù)可能未能及時(shí)發(fā)現(xiàn)棧溢出攻擊,同時(shí)這種技術(shù)對程序帶來的額外負(fù)荷也是不能忽略的。

2.2 代碼注入

代碼注入通常是通過覆蓋函數(shù)棧幀返回地址的方法實(shí)現(xiàn)的。在覆蓋函數(shù)返回地址時(shí),攻擊者可以將指向攻擊者編寫的惡意代碼的地址寫入該位置。當(dāng)緩沖區(qū)溢出時(shí),程序就會(huì)跳轉(zhuǎn)到惡意代碼,并執(zhí)行該代碼。這種攻擊方法幾乎可以越過任何內(nèi)存保護(hù),從而成為Linux系統(tǒng)下更受歡迎的攻擊類型之一。

2.3 思考:是否需要編寫地址

上文提到的棧溢出攻擊,常常需要覆蓋函數(shù)棧幀中的返回地址,其中最重要的是攻擊者需要知道攻擊代碼的地址。另外一種思路是直接使用已經(jīng)存在的函數(shù)的地址(終止器函數(shù))將代碼放入堆棧上,從而在下次調(diào)用時(shí)執(zhí)行該代碼。這種方法不需要知道惡意代碼的地址,因此會(huì)比較高效。這種方法跟之前的方法一樣,同時(shí)也是比較受歡迎的棧溢出攻擊方式,特別是在堆棧上跳轉(zhuǎn)到快速終止器函數(shù)調(diào)用的時(shí)候。

三、防范棧溢出攻擊的方法

3.1 棧保護(hù)技術(shù)

很多操作系統(tǒng)現(xiàn)在都提供了一種在棧中加入 stack canary 的保護(hù)機(jī)制。這種機(jī)制會(huì)在棧中添加一個(gè)隨機(jī)數(shù),隨機(jī)數(shù)的值只有在函數(shù)返回時(shí)才能計(jì)算出來。這個(gè)隨機(jī)數(shù)會(huì)被保存在一次返回的信息中,因此,如果在返回時(shí)該值被修改了,那么程序就會(huì)中斷執(zhí)行,從而避免了棧溢出攻擊的發(fā)生。

3.2 編譯器選項(xiàng)

編譯器有一些選項(xiàng)可以使得棧更安全,比如可以讓編譯器自動(dòng)尋找可疑的緩沖區(qū)、強(qiáng)制編譯器檢測函數(shù)調(diào)用的大小。

3.3 堆棧空間初始化

很多攻擊者利用指針未被初始化的漏洞來實(shí)現(xiàn)棧溢出攻擊,因此,適當(dāng)?shù)某跏蓟兞糠浅S斜匾T谝恍└呒?jí)語言中則更為自動(dòng)化,例如 Java、Python、C# 等高級(jí)語言會(huì)將變量自動(dòng)置為 null 或 0。

3.4 輸入驗(yàn)證

正常的輸入應(yīng)該被驗(yàn)證其完整性和大小,并且需要確保不會(huì)造成過度的數(shù)據(jù)輸入。同時(shí),輸入驗(yàn)證還可以保證程序在運(yùn)行期間不會(huì)出現(xiàn)意外溢出。

3.5 限制系統(tǒng)權(quán)限

操作系統(tǒng)不需要 root 權(quán)限就可以對程序進(jìn)行控制和執(zhí)行,因此操作系統(tǒng)對程序所屬的用戶、資源的權(quán)限等方面的控制也是很重要的。

對于棧溢出攻擊方面,Linux系統(tǒng)并沒有真正解決這個(gè)問題,因此,良好的程序設(shè)計(jì)、開發(fā)和實(shí)施安全措施是保護(hù) Linux 系統(tǒng)的更佳方法。希望今天的文章能夠?yàn)榇蠹伊私?Linux 系統(tǒng)棧溢出攻擊提供一些參考,同時(shí)也幫助大家更好地應(yīng)對這種致命漏洞。

相關(guān)問題拓展閱讀:

  • linux系統(tǒng)中線程同步實(shí)現(xiàn)機(jī)制有哪些
  • Linux 進(jìn)程棧和線程棧的區(qū)別
  • 請問 怎樣分別查看windows系統(tǒng)與Linux系統(tǒng)的??臻g大?。?/li>

linux系統(tǒng)中線程同步實(shí)現(xiàn)機(jī)制有哪些

LinuxThread的線程機(jī)制

LinuxThreads是目前Linux平臺(tái)上使用最為廣泛的線程庫,由Xavier Leroy () 負(fù)責(zé)開發(fā)完成,并已綁定在GLIBC中發(fā)行。它所實(shí)現(xiàn)的就是基于核心輕量級(jí)進(jìn)程的”一對一”線程模型,一個(gè)線程實(shí)體對應(yīng)一個(gè)核心輕量級(jí)進(jìn)程,而線程之間的 管理在核外函數(shù)庫中實(shí)現(xiàn)。

1.線程描述數(shù)據(jù)結(jié)構(gòu)及實(shí)現(xiàn)限制

LinuxThreads定義了一個(gè)struct _pthread_descr_struct數(shù)據(jù)結(jié)構(gòu)來描述線程,并使用全局?jǐn)?shù)組變量 __pthread_handles來描晌胡基述和引用進(jìn)程所轄線程。在__pthread_handles中的前兩項(xiàng),LinuxThreads定義了兩個(gè)全 局的系統(tǒng)線程:__pthread_initial_thread和__pthread_manager_thread,并用 __pthread_main_thread表征__pthread_manager_thread的父線程(初始為 __pthread_initial_thread)。

struct _pthread_descr_struct是一個(gè)雙環(huán)鏈表結(jié)構(gòu),__pthread_manager_thread所在的鏈表僅包括它 一個(gè)元素,實(shí)際上,__pthread_manager_thread是一個(gè)特殊線程,LinuxThreads僅使用了其中的errno、p_pid、 p_priority等三個(gè)域。而__pthread_main_thread所在的鏈則將進(jìn)程中所有用戶線程串在了一起。經(jīng)過一系列 pthread_create()之后形成的__pthread_handles數(shù)組將如下圖所示:

圖2 __pthread_handles數(shù)組結(jié)構(gòu)

新創(chuàng)建的線程將首先在__pthread_handles數(shù)組中占據(jù)一項(xiàng),然后通過數(shù)據(jù)結(jié)構(gòu)中的鏈指針連入以__pthread_main_thread為首指針的鏈表中。這個(gè)鏈表的使用在介紹線程的創(chuàng)建和釋放的時(shí)候?qū)⑻岬健?/p>

LinuxThreads遵循POSIX1003.1c標(biāo)準(zhǔn),其中對線程庫的實(shí)現(xiàn)進(jìn)行了一些范圍限制,比如進(jìn)程更大線程數(shù),線程私有數(shù)據(jù)區(qū)大小等等。在 LinuxThreads的實(shí)現(xiàn)中,基本遵循這些限制,但也進(jìn)行了一定的改動(dòng),改動(dòng)的趨勢是放松或者說擴(kuò)大這些限制,使編程更加方便。這些限定宏主要集中 在sysdeps/unix/sysv/linux/bits/local_lim.h(不同平臺(tái)使用的文件位置不同)中,包括如下幾個(gè):

每進(jìn)程的私有數(shù)據(jù)key數(shù),POSIX定義_POSIX_THREAD_KEYS_MAX為128,LinuxThreads使用 PTHREAD_KEYS_MAX,1024;私有數(shù)據(jù)釋放時(shí)允許執(zhí)行的操作數(shù),LinuxThreads與POSIX一致,定義 PTHREAD_DESTRUCTOR_ITERATIONS為4;每進(jìn)程的線程數(shù),POSIX定義為64,LinuxThreads增大到1024 (PTHREAD_THREADS_MAX);線程運(yùn)行棧最小空間大小,POSIX未指定,LinuxThreads使用 PTHREAD_STACK_MIN,16384(字節(jié))。

2.管理線程

“一對一”模型的好處之一是線程的調(diào)度由核心完成了,而其他諸如線程取消、線程間的同步等工作,宴謹(jǐn)都是在核外線程庫中完成的。在LinuxThreads 中,專門為每一個(gè)進(jìn)程構(gòu)造了一個(gè)管理線程,負(fù)責(zé)處理線程相關(guān)的管理工作。當(dāng)進(jìn)程之一次調(diào)用pthread_create()創(chuàng)建一個(gè)線程的時(shí)候就會(huì)創(chuàng)建 (__clone())并啟動(dòng)管理線程。

在一個(gè)進(jìn)程空間內(nèi),管理線程與其他線程之間通過一對”管理管道(manager_pipe)”來通訊,該管道在創(chuàng)建管理線程之前創(chuàng)建,在成功啟動(dòng) 了管理線程之后,管理管道的讀端和寫端分別做姿賦給兩個(gè)全局變量__pthread_manager_reader和 __pthread_manager_request,之后,每個(gè)用戶線程都通過__pthread_manager_request向管理線程發(fā)請求, 但管理線程本身并沒有直接使用__pthread_manager_reader,管道的讀端(manager_pipe)是作為__clone ()的參數(shù)之一傳給管理線程的,管理線程的工作主要就是監(jiān)聽管道讀端,并對從中取出的請求作出反應(yīng)。

創(chuàng)建管理線程的流程如下所示:

(全局變量pthread_manager_request初值為-1)

圖3 創(chuàng)建管理線程的流程

初始化結(jié)束后,在__pthread_manager_thread中記錄了輕量級(jí)進(jìn)程號(hào)以及核外分配和管理的線程id, 2*PTHREAD_THREADS_MAX+1這個(gè)數(shù)值不會(huì)與任何常規(guī)用戶線程id沖突。管理線程作為pthread_create()的調(diào)用者線程的 子線程運(yùn)行,而pthread_create()所創(chuàng)建的那個(gè)用戶線程則是由管理線程來調(diào)用clone()創(chuàng)建,因此實(shí)際上是管理線程的子線程。(此處子 線程的概念應(yīng)該當(dāng)作子進(jìn)程來理解。)

__pthread_manager()就是管理線程的主循環(huán)所在,在進(jìn)行一系列初始化工作后,進(jìn)入while(1)循環(huán)。在循環(huán)中,線程以2秒為 timeout查詢(__poll())管理管道的讀端。在處理請求前,檢查其父線程(也就是創(chuàng)建manager的主線程)是否已退出,如果已退出就退出 整個(gè)進(jìn)程。如果有退出的子線程需要清理,則調(diào)用pthread_reap_children()清理。

然后才是讀取管道中的請求,根據(jù)請求類型執(zhí)行相應(yīng)操作(switch-case)。具體的請求處理,源碼中比較清楚,這里就不贅述了。

3.線程棧

在LinuxThreads中,管理線程的棧和用戶線程的棧是分離的,管理線程在進(jìn)程堆中通過malloc()分配一個(gè)THREAD_MANAGER_STACK_SIZE字節(jié)的區(qū)域作為自己的運(yùn)行棧。

用戶線程的棧分配辦法隨著體系結(jié)構(gòu)的不同而不同,主要根據(jù)兩個(gè)宏定義來區(qū)分,一個(gè)是NEED_SEPARATE_REGISTER_STACK,這個(gè)屬 性僅在IA64平臺(tái)上使用;另一個(gè)是FLOATING_STACK宏,在i386等少數(shù)平臺(tái)上使用,此時(shí)用戶線程棧由系統(tǒng)決定具置并提供保護(hù)。與此同 時(shí),用戶還可以通過線程屬性結(jié)構(gòu)來指定使用用戶自定義的棧。因篇幅所限,這里只能分析i386平臺(tái)所使用的兩種棧組織方式:FLOATING_STACK 方式和用戶自定義方式。

在FLOATING_STACK方式下,LinuxThreads利用mmap()從內(nèi)核空間中分配8MB空間(i386系統(tǒng)缺省的更大棧空間大小,如 果有運(yùn)行限制(rlimit),則按照運(yùn)行限制設(shè)置),使用mprotect()設(shè)置其中之一頁為非訪問區(qū)。該8M空間的功能分配如下圖:

圖4 棧結(jié)構(gòu)示意

低地址被保護(hù)的頁面用來監(jiān)測棧溢出。

對于用戶指定的棧,在按照指針對界后,設(shè)置線程棧頂,并計(jì)算出棧底,不做保護(hù),正確性由用戶自己保證。

不論哪種組織方式,線程描述結(jié)構(gòu)總是位于棧頂緊鄰堆棧的位置。

4.線程id和進(jìn)程id

Linux 進(jìn)程棧和線程棧的區(qū)別

進(jìn)程好比公交車,線程好比公交車上的人。。 一個(gè)進(jìn)程可以包含多個(gè)線程,頌差當(dāng)然也可以只有一個(gè)磨消線程,野游皮就是司機(jī)。。線程是任務(wù)調(diào)度單位,因?yàn)檫@更方便。進(jìn)程 更多的是提供資源,比如進(jìn)程的地址空間,所有的線程都運(yùn)行在該 進(jìn)程的地址空間里

返回博客列表

轉(zhuǎn) Linux 進(jìn)程棧和線程棧的區(qū)別

地獄的烈火

發(fā)布時(shí)間: 2023/05/25 01:10

閱讀: 1141

收藏: 22

點(diǎn)贊: 0

評論: 0

注:本文所涉及的環(huán)境為Linux, 下文討論的棧跟內(nèi)核棧,沒有任何的關(guān)系,關(guān)于內(nèi)核棧,請參考《深入Linux內(nèi)核架構(gòu)前悄》中的2.4.1 進(jìn)程復(fù)制

這頃信里有如下幾個(gè)問題,線程棧的空間是開辟在那里的? 線程棧之間可以互訪嗎?為什么在使用pthread_attr_setstack函數(shù)時(shí),需要設(shè)置棧的大小,而進(jìn)程task_struct的 mm_struct *mm 成員中卻并沒有卻并沒有stack_size這個(gè)成員項(xiàng),怎么保存的棧大小呢?

進(jìn)程棧:

進(jìn)程用戶空間的管理在task_struct 的mm_struct *mm成員中體現(xiàn), mm中的成員定義了用戶空間的布局情況如圖一。 用戶空間的棧起始于STACK_TOP, 如果設(shè)置了PF_RANDOMIZE,則起始點(diǎn)會(huì)減少一個(gè)小的隨機(jī)量,每個(gè)體系結(jié)構(gòu)都必須定義STACK_TOP, 大多數(shù)都設(shè)置為TASK_SIZE, 在32位機(jī)上該值為0XC。經(jīng)過隨機(jī)處理后,進(jìn)程棧的起始地址將存放在mm->start_stack中,可以通過cat /proc/xxx/stat 查看慧乎渣。

如圖一,棧從上而下擴(kuò)展,而用于內(nèi)存映射的區(qū)域起始于mm->mmap_base, mm->mmap_base通過調(diào)用mmap_base函數(shù)來初始化,為了確保棧不與mmap區(qū)域不發(fā)生沖突,兩者之間設(shè)置了一個(gè)安全間隙。mmap_base函數(shù)源代碼如下:

#define MIN_GAP (128*1024*1024)

#define MAX_GAP (TASK_SIZE/6*5)

static inline unsigned long mmap_base(struct mm_struct *mm)

{

unsigned long gap = current->signal->rlim.rlim_cur; // rlim_cur 默認(rèn)為,及8M, 可以使用 getrlimit(RLIMIT_STACK, &limit) 查看

unsigned long random_factor = 0;

if (current->flags & PF_RANDOMIZE)

random_factor = get_random_int() % (1024*1024);

if (gap MAX_GAP) // 棧的更大空間為TASK_SIZE/6*5, 及2.5G

gap = MAX_GAP;

return PAGE_ALIGN(TASK_SIZE – gap – random_factor); // 通過保留random_factor空間大小的間隙來防止棧溢出

}

圖 一 IA-32計(jì)算機(jī)上虛擬地址空間的布局

線程棧:

線程包含了表示進(jìn)程內(nèi)執(zhí)行環(huán)境必需的信息,其中包括進(jìn)程中標(biāo)示線程的線程ID,一組寄存器值,棧,調(diào)度優(yōu)先級(jí)和策略, 信號(hào)屏蔽字,errno變量以及線程私有數(shù)據(jù)。進(jìn)程的所有信息對該進(jìn)程的所有線程都是共享的,包括可執(zhí)行的程序文本,程序的全局內(nèi)存和堆內(nèi)存,棧以及文件描述符,所以線程的mm_struct *mm指針變量和所屬進(jìn)程的mm指針變量相同。

在創(chuàng)建線程的時(shí)候,可以通過pthread_attr_t來初始化線程的屬性,包括線程的棧布局信息,如棧起始地址stackaddr, 棧大小stacksize。 具體需要通過方法

int pthread_attr_setstack(pthread_attr_t *attr, void *stackaddr, size_t stacksize);

// 注:stackaddr 指向?yàn)樵摼€程開辟的空間,該空間可以使用malloc或者mmap來開辟,而不能來自進(jìn)程的棧區(qū)。開辟的stackaddr所指向的動(dòng)態(tài)空間需要自己負(fù)責(zé)釋放。

當(dāng)然也可將線程棧的空間管理交給系統(tǒng),如果想改變系統(tǒng)默認(rèn)的棧大小8MB,可以通過

int pthread_attr_setstacksize(pthread_attr_t *attr, size_t stacksize);

// 注:stacksize最小值為16384,單位為字節(jié)

由上面的API接口,可以得到,線程棧的stacksize是保存在pthread_attr_t中的,可以通過人為的指定,也可以通過在創(chuàng)建線程的時(shí)候讀取系統(tǒng)的配置文件來初始化stacksize,當(dāng)初始化完棧的起始地址,和大小后,便可以通過

int pthread_attr_setguardsize(pthread_attr_t *attr, size_t guardsize);

來初始化線程棧末尾之后用以避免棧溢出的緩沖區(qū)的大小,如果應(yīng)用程序溢出到此緩沖區(qū)中,這個(gè)錯(cuò)誤可能會(huì)導(dǎo)致 SIGSEGV 信號(hào)被發(fā)送給該線程, 從而造成段錯(cuò)誤,緩沖區(qū)默認(rèn)設(shè)置為PAGESIZE個(gè)字節(jié)。因?yàn)榫€程的mm->start_stack和所屬進(jìn)程相同,所以線程棧的起始地址并沒有存放在task_struct中,應(yīng)該只是使用attr中的stackaddr,來初始化task_struct->thread-> sp(sp指向struct pt_regs對象,該結(jié)構(gòu)體用于保存用戶進(jìn)程或者線程的寄存器現(xiàn)場)。

請問 怎樣分別查看windows系統(tǒng)與Linux系統(tǒng)的??臻g大???

linux和windows下同樣的文件或文件夾的大小有什么區(qū)別1.window下文件夾不算大小,linux下文件夾要算大小2.兩個(gè)系統(tǒng)下的文件系統(tǒng)可能不一樣,不同的文件系統(tǒng),blocksize可能不一樣。blocksize不一樣,文件占用的磁盤空間可能就不一樣。不同操作系統(tǒng)下查看blocksize的命令:AIX:lsfs -q /u01 Windows:fsutil fsinfo ntfsinfo c:linux:tune2fs -l /dev/sda1 3.window和弊衡linux下,文本文件租頌做的換行符不同,windows下是/n/r,linux下是/n。當(dāng)使用FTP傳輸文本文件時(shí),默認(rèn)會(huì)進(jìn)行換行符的轉(zhuǎn)換,造成傳輸前后文件大小不一致。4.要確認(rèn)看到的文件大小是指文件本身的櫻數(shù)大小,還是文件占用的磁盤空間的大小,兩者概念不同。

linux 下:

終端輸入命令:ulimit -a

這一行就是,大概8M:stack size(kbytes, -s) 8192

windows下:

好像沒正衡有命令可以查看,但是可以通過遞歸調(diào)用函數(shù),使其首清源溢出來查看棧者態(tài)大?。?/p>

#include

void fun()

{

int a;

printf(“%p\n”,&a);

fun();

}

int main(void)

{

fun();

return 0;

}

首先,在fun()函數(shù)中的fun();處,打個(gè)斷點(diǎn),得到a的

然后,去掉斷點(diǎn),運(yùn)行,直到棧溢出,致使程序崩潰,得到最后一個(gè)a的

兩個(gè)地址相減,即為棧的大?。杭s為 :1M

linux 經(jīng)典棧溢出的介紹就聊到這里吧,感謝你花時(shí)間閱讀本站內(nèi)容,更多關(guān)于linux 經(jīng)典棧溢出,深度解析Linux經(jīng)典棧溢出攻擊方式,linux系統(tǒng)中線程同步實(shí)現(xiàn)機(jī)制有哪些,Linux 進(jìn)程棧和線程棧的區(qū)別,請問 怎樣分別查看windows系統(tǒng)與Linux系統(tǒng)的棧空間大???的信息別忘了在本站進(jìn)行查找喔。

成都創(chuàng)新互聯(lián)建站主營:成都網(wǎng)站建設(shè)、網(wǎng)站維護(hù)、網(wǎng)站改版的網(wǎng)站建設(shè)公司,提供成都網(wǎng)站制作成都網(wǎng)站建設(shè)、成都網(wǎng)站推廣、成都網(wǎng)站優(yōu)化seo、響應(yīng)式移動(dòng)網(wǎng)站開發(fā)制作等網(wǎng)站服務(wù)。


網(wǎng)頁名稱:深度解析Linux經(jīng)典棧溢出攻擊方式(linux經(jīng)典棧溢出)
本文地址:http://www.5511xx.com/article/ccscjcc.html