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毫米左右,因此很難通過漱口刷牙使窩溝清潔。深處的窩溝...