什么叫堆溢位,什麼叫堆溢位

2023-02-18 10:20:38 字數 5896 閱讀 4911

1樓:南霸天

堆疊是一個在電腦科學中經常使用的抽象資料型別。堆疊中的物體具有一個特性: 最後一個放入堆疊中的物體總是被最先拿出來, 這個特性通常稱為後進先出(lifo)佇列。

堆疊中定義了一些操作。 兩個最重要的是push和pop。 push操作在堆疊的頂部加入一 個元素。

pop操作相反, 在堆疊頂部移去一個元素, 並將堆疊的大小減一。

堆疊溢位的產生是由於過多的函式呼叫,導致呼叫堆疊無法容納這些呼叫的返回地址,一般在遞迴中產生。堆疊溢位很可能由無限遞迴(infinite recursion)產生,但也可能僅僅是過多的堆疊層級。

什麼是棧溢位和堆溢位?

2樓:匿名使用者

所謂溢位廣義上就是超出範圍,整數就有溢位,比如8位元組無符號整數是0到255

0 - 1就是下溢 255 + 1就是上溢

說正題int f(int x)

這個就是棧溢位,x被寫到了不應該寫的地方。在特定編譯模式下,這個x的內容就會覆蓋f原來的返回地址。也就是原本應該返回到呼叫位置的f函式,返回到了x指向的位置。

一般情況下程式會就此崩潰。但是如果x被有意指向一段惡意**,這段惡意**就會被執行。

堆溢位相對比較複雜,因為各種環境堆的實現都不完全相同。但是程式管理堆必須有額外的資料來標記堆的各種資訊。堆記憶體如果發生上面那樣的賦值的話就有可能破壞堆的邏輯結構。

進而修改原本無法訪問的資料。

int f(char *s, int n)

這個是棧溢位比較真實一點的例子,如果傳入的資料長度大於10就會造成溢位,進而改變f的返回地址。只要事先在特定地址寫入惡意**,**就會被執行。

堆溢位執行惡意**的一種情況是通過過長的資料破壞堆結構,使下次申請能得到儲存某些特定函式指標的位置,然後進行修改。

棧和堆溢位的一個共性就是第三方可以完全依靠提供特定資料實現**級別的入侵。玩遊戲的話可能知道psp3000的破解,利用的就是psp系統顯示tiff檔案時候的一個溢位漏洞。tiff檔案內包含一段入侵**,載入tiff檔案的時候這段**也會被載入,只不過這個時候各奔不可能被執行。

但是tiff中的一部分資料是超長的,並且超長的部分包含了入侵**的位置。當系統讀取這部分資料的時候入侵**就會被執行。

3樓:匿名使用者

棧溢位是由於c語言系列沒有內建檢查機制來確保複製到緩衝區的資料不得大於緩衝區的大小,因此當這個資料足夠大的時候,將會溢位緩衝區的範圍。

堆溢位的產生是由於過多的函式呼叫,導致呼叫堆疊無法容納這些呼叫的返回地址,一般在遞迴中產生。堆溢位很可能由無限遞迴(infinite recursion)產生,但也可能僅僅是過多的堆疊層級。

int f(int x)

這個就是棧溢位,x被寫到了不應該寫的地方。在特定編譯模式下,這個x的內容就會覆蓋f原來的返回地址。也就是原本應該返回到呼叫位置的f函式,返回到了x指向的位置。

一般情況下程式會就此崩潰。但是如果x被有意指向一段惡意**,這段惡意**就會被執行。

堆溢位相對比較複雜,因為各種環境堆的實現都不完全相同。但是程式管理堆必須有額外的資料來標記堆的各種資訊。堆記憶體如果發生上面那樣的賦值的話就有可能破壞堆的邏輯結構。

進而修改原本無法訪問的資料。

int f(char *s, int n)

char a[10];

memcpy(a, s, n);

這個是棧溢位比較真實一點的例子,如果傳入的資料長度大於10就會造成溢位,進而改變f的返回地址。只要事先在特定地址寫入惡意**,**就會被執行。

4樓:匿名使用者

什麼是能校時?自動校時?

strt equ p2.6

stp equ p2.7

clrr equ p3.0

sec equ p3.5

min equ p3.6

hour equ p3.7

org 00h

sjmp main

org 0bh

ajmp t0int0

org 30h

main: mov sp,#60h

mov r4,#20

mov tmod,#01h

mov th0,#03ch;#9eh 12m晶振時定時初值取#3cb0h

mov tl0,#0b0h;#58h

setb et0

setb ea

;mov 28h,#12

ks: lcall disp

jb sec,km

lcall disp

jnb sec,$-3

ajmp sinc

km: jb min,kh

lcall disp

jnb min,$-3

ajmp minc

kh: jb hour,k1

lcall disp

jnb hour,$-3

ajmp hinc

sinc: inc 26h

mov a,26h

cjne a,#60,sinc0

mov 26h,#0

sinc0: ajmp ks

minc: inc 27h

mov a,27h

cjne a,#60,minc0

mov 27h,#0

minc0: ajmp km

hinc: inc 28h

mov a,28h

cjne a,#24,hinc0

mov 28h,#0

hinc0: ajmp kh

k1: lcall disp

jb strt,k2

lcall disp

jnb strt,$-3

ajmp start

k2: jb stp,k3

lcall disp

jnb stp,stop

k3: jb clrr,ks

lcall disp

jnb clrr,clear

ajmp ks

start: setb tr0

ajmp k1

stop: clr tr0

ajmp k2

clear: clr tr0

mov a,#0

mov 20h,a

mov 21h,a

mov 22h,a

mov 23h,a

mov 24h,a

mov 25h,a

mov 26h,a

ajmp ks

disp:

mov a,26h

mov b,#10

div ab

mov 20h,b ;餘數(秒個位數)

mov 21h,a ;商(秒十位數)

mov a,27h

mov b,#10

div ab

mov 22h,b ;餘數(分個位數)

mov 23h,a ;商(分十位數)

mov a,28h

mov b,#10

div ab

mov 24h,b ;餘數(時個位數)

mov 25h,a ;商(時十位數)

mov a,20h ;秒個位

acall seg7

mov p0,a

clr p2.0

acall dly

setb p2.0

mov a,21h ;秒十位

acall seg7

mov p0,a

clr p2.1

acall dly

setb p2.1

mov a,22h ;分個位

acall seg7

mov p0,a

setb p0.7

clr p2.2

acall dly

setb p2.2

mov a,23h ;分十位

acall seg7

mov p0,a

clr p2.3

acall dly

setb p2.3

mov a,24h ;時個位

acall seg7

mov p0,a

setb p0.7

clr p2.4

acall dly

setb p2.4

mov a,25h ;時十位

acall seg7

mov p0,a

clr p2.5

acall dly

setb p2.5

rett0int0: mov th0,#03ch;#9eh ;定時中斷子程式。重灌定時常數

mov tl0,#0b0h;#58h

djnz r4,t0intr ;50msx20=1s,未滿20次,跳出中斷子程式

mov r4,#20

inc 26h

mov a,26h

cjne a,#60,t0intr

mov 26h,#0

inc 27h

mov a,27h

cjne a,#60,t0intr

mov 27h,#0

inc 28h

mov a,28h

cjne a,#24,t0intr

mov 28h,#0

ajmp t0intr

t0intr: reti

dly10: mov r3,#30

d0: acall dly

djnz r3,d0

retdly: mov r7,#2

d1: mov r6,#40

djnz r6,$

djnz r7,d1

retseg7: inc a

movc a,@a+pc

retdb 03fh ;0

db 006h ;1

db 05bh ;2

db 04fh ;3

db 066h ;4

db 06dh ;5

db 07dh ;6

db 007h ;7

db 07fh ;8

db 06fh ;9end

5樓:匿名使用者

因為intel指令沒有對暫存器ffff變到0進行檢測的功能。所以,當暫存器作為指標,像sp,就會從最後蹦到0去。對於其他大小的也一樣,沒有檢測。

請問:堆疊溢位是什麼意思?怎麼處理?

6樓:流塵一號東

堆疊溢位就是不顧堆疊中分配的區域性資料塊大小,向該資料塊寫入了過多的資料,導致資料越界,結果覆蓋了老的堆疊資料。就是字寫多了!

電腦跳出視窗顯示堆疊溢位 第一行 是什麼意思

7樓:行在月夜

電腦跳出視窗顯示堆疊溢位的具體解決方法如下:

1、首先,在電腦上按下鍵盤上的ctrl + shift + del組合鍵,然後就點選工作管理員:

2、之後電腦就會開啟一個工作管理員的視窗了:

3、然後在工作管理員中找到一項名字為ibm的程序,點選它:

4、然後就在視窗的右下角找到結束任務的按鈕並點選它:

5、結束程序之後就點選工作管理員視窗左上角的檔案,然後執行新任務,這樣電腦上就不會出現堆疊溢位的問題了:

8樓:

電腦提示「堆疊溢位,位置:第1行」,這種情況一般是瀏覽器在往記憶體中載入資料,資料在記憶體堆疊中溢位導致的,可通過清除瀏覽器快取來解決,具體操作方法如下:

1、 開啟瀏覽器,點選右側更多,在下拉框中選擇「工具」。

2、在工具的選項框中點選「internet 選項」。

3、在彈出的「internet 選項屬性」對話方塊中,選擇「常規」選項,點選「刪除」按鈕。

4、在彈出的對話中,勾選所有選項後,點選「刪除」。

什么叫友情,什麼叫友情

你聽說過這樣一個原理嗎?責任分攤。就是當一群人看到有人需要幫助時人們往往會無動於衷,因為他們往往會想,我不幫他的話還有這麼大一群人幫他呢 但要是是具體的一個人看到另外一個人需要幫助時往往會毫不猶豫的上去幫他,因為他不上去幫就沒人能幫了。前者是因為一大群人分攤了幫助人的責任,後者是沒人分攤,就他自己的...

什么叫集合,什麼叫集合?

就是有特定屬性的東西集合在一起 屬性必須是特定的 比如說 你們班所有的胖子 就不是集合 再比如 你們班所有體重超過100斤的人 就是個集合 這個概念在高一的數學書上 人教版高一數學1 現在把原文提供給你,希望對你能有所幫助 我們把研究的物件稱為元素,元素組成的整體稱為集合。什麼是集合?集合是指具有某...

什么叫窩溝齲,什麼叫窩溝齲

窩溝齲拗口磨牙 前磨牙咬合 面 磨牙頰面溝和上頜前牙舌面的齲損。窩溝齲損呈錐形,底部朝牙本質,尖向釉質表面。有些齲損的釉質表面無明顯破壞,具有這類臨床特徵的齲損又稱潛行性齲。這樣深的窩溝內很容易藏匿食物殘渣和細菌,而即使是最細的牙刷毛直徑也有0.2毫米左右,因此很難通過漱口刷牙使窩溝清潔。深處的窩溝...