為什麼heap spary要用0x0C0C0C0C這個奇怪的數字?

時間 2021-05-31 20:12:14

1樓:

原因很簡單,因為在DEP出現之前堆噴是一種不精準的技術。就是說它需要一段滑板指令來增大靶子的面積。在這種情況下就需要乙個值,當它是位址時是我們的堆噴可以抵達的,當它是指令時是可以當成滑板指令不影響執行的。

所以0x0C0C0C0C就成為了通用位址。

那麼為什麼nop這種在棧中常用的滑板指令不行?你可以想一下c++虛表訪問的情形(比如堆噴最常見的ie中的利用),比如

mov eax,[ecx]

call [eax+4]

如果你用nop填充就會跳到90909090。

所以很多時候也並沒有必要用0x0C0C0C0C,如果只是為了給shellcode找乙個穩定的位址那麼找乙個堆噴可到達位址。使用nop滑板指令+shellcode即可。

2樓:tombkeeper

0x0C0C0C0C 作為位址,指向了 Heap Spary 分配到的記憶體;作為指令,是 or al,0x0C,在任何環境下都不會直接引發異常,和 NOP 一樣可作為 sled 填充——這點在 DEP 環境下並不重要,但在當年無 DEP 的環境下,幾乎完全不懂漏洞原理的人,知道去 Heap Spary 0x0C0C0C0C 就能搭積木一樣寫出 Exploit,而且還很通用。

當然,並不一定非得用 0x0C0C0C0C。

0 除以 0 為什麼沒有結果呢?那此時 0 為什麼不能做除數呢?

冰楓的第五小號 其實關鍵在於除法的定義與實現,所以說如果在這裡我給出一種能夠除以0的實現,比如說像這個 只適用於自然數 public static operatorint int left int right if i left break if i left return newint times...

1 乘 0 為什麼等於 0?

xfl 我個人想當然地認為,那是因為人們始終相信乘法交換律就是徹底的真理。首先,我得感嘆中華文化的博大精深,中國玩文字遊戲,可謂世界之最。後面的計算全部基於十進位制 先拿除法開刀 13 5 2 3 中文讀法是 十三除以五得二餘三,或者五除十三得二餘三。我對中文這樣描述的理解是 除,即除去,刪去,去掉...

為什麼要用stand in

cha Cha 我不確定你想問什麼,就從兩方面回答吧。1.為什麼用不定式to stand in enough to後面的不定式,傳統語法往往視為修飾整句的結果狀語,表示enough到了某個程度就會產生這個結果。而現代語法則認為這個不定式是修飾enough的補足語 能夠產生某種結果的程度,或者叫程度狀...