堆的入門

堆的系統(tǒng)調(diào)用

實例代碼

/* sbrk and brk example */
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>

int main()
{
        void *curr_brk, *tmp_brk = NULL;

        printf("Welcome to sbrk example:%d\n", getpid());

        /* sbrk(0) gives current program break location */
        tmp_brk = curr_brk = sbrk(0);
        printf("Program Break Location1:%p\n", curr_brk);
        getchar();

        /* brk(addr) increments/decrements program break location */
        brk(curr_brk+4096);

        curr_brk = sbrk(0);
        printf("Program break Location2:%p\n", curr_brk);
        getchar();

        brk(tmp_brk);

        curr_brk = sbrk(0);
        printf("Program Break Location3:%p\n", curr_brk);
        getchar();

        return 0;
}

編譯運行之后, 在第一次調(diào)用brk之前


查看內(nèi)存映射

堆的分析

這是每個chunk的布局

prev_size: 如果當(dāng)前chunk的相鄰前一chunk未被使用贾节,prev_size為此前一chunk的大小
size: 當(dāng)前chunk的大小汁汗。由于chunk大小是8的整數(shù)倍,所以此size的后3 bit被用于存儲其他信息知牌。我們需要記住的便是最低bit祈争,即圖中P的位置角寸,用于指示前一chunk是否已被使用(PREV_INUSE)菩混。

如果當(dāng)前chunk未被使用扁藕, 則

fd: 下一個未被使用的chunk的地址
bk: 上一個未被使用的chunk的地址

所以我們可以通過當(dāng)前的chunk去定位前一個chunk和后一個chunk
也就是拿當(dāng)前chunk的地址減去前一個chunk的大小
或者拿當(dāng)前chunk的地址加上當(dāng)前chunk的大小

那些未被使用的chunks通過fd, bk組成了鏈表。事實上亿柑,malloc確實維護了一系列鏈表用于內(nèi)存的分配和回收邢疙,這些鏈表被成為"bins"。

bin分為fastbin, unsorted bin, small bin, large bin疟游。我們這里要研究的就是fastbin呼畸。

看了這篇文章之后覺得fastbin似乎也不是很難颁虐, 當(dāng)然最難的地方在于如何構(gòu)造payload淺析Linux堆溢出之fastbin

再好好分析一下malloc()這個神奇的函數(shù)

在glibc中蛮原,malloc_chunk以 2*sizeof(size_t)對齊另绩,在32位系統(tǒng)中以8字節(jié)對齊儒陨,在64位系統(tǒng)中一般以16字節(jié)對齊板熊。Malloc_chunk的定義如下:

既然malloc_chunk以2sizeof(size_t)對齊框全,那么malloc返回給用戶的指針數(shù)值也是以2sizeof(size_t)對齊干签。

最小的chunk是多大呢

最小的chunk需要保證能放下prev_size津辩、size容劳、fd以及bk字段并保證對齊喘沿。在32位系統(tǒng)中竭贩,即16字節(jié)蚜印,在64位系統(tǒng)中留量,一般為32字節(jié)窄赋。在64位系統(tǒng)中也可能定義INTERNAL_SIZE_T也即size_t為4字節(jié),這種情況下最小的chunk位24字節(jié)

fastbin中有10個bin
在32位系統(tǒng)中忆绰,fastbin里相鄰的兩個bin大小差距8個字節(jié);在64位系統(tǒng)中可岂,則是差距16個字節(jié)。

32位系統(tǒng)中缕粹,fastbin里chunk的大小范圍從16到64稚茅;

怎么根據(jù)p=malloc(m)里的m來判斷分配多大的chunk呢?

將申請的內(nèi)存大小加上每個chunk的overhead平斩,也就是chunk結(jié)構(gòu)體里的size字段。然后對齊绘面,就是需要分配的chunk的大小欺税。

在實戰(zhàn)之前先把wp好好看一下

接下來就是實戰(zhàn)了

程序的大致流程
相關(guān)的字符串

貌似不能在32位平臺上運行

腳本執(zhí)行報錯怎么辦。峭竣。

這個錯誤貌似是struct這個包在pack的時候出的問題?


struct.pack

在stackoverflow上找到了這樣一個例子皆撩, 說是把q改成Q就行了

和我想的相差不多, 就是那個libc_case的地址小于0x3a55ed

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末扛吞,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子荆责,更是在濱河造成了極大的恐慌,老刑警劉巖盲泛,帶你破解...
    沈念sama閱讀 221,273評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異键耕,居然都是意外死亡,警方通過查閱死者的電腦和手機屈雄,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,349評論 3 398
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來酒奶,“玉大人蚁孔,你說我怎么就攤上這事惋嚎「芮猓” “怎么了瘸彤?”我有些...
    開封第一講書人閱讀 167,709評論 0 360
  • 文/不壞的土叔 我叫張陵修然,是天一觀的道長质况。 經(jīng)常有香客問我,道長玻靡,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,520評論 1 296
  • 正文 為了忘掉前任囤捻,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘视哑。我一直安慰自己,他們只是感情好挡毅,可當(dāng)我...
    茶點故事閱讀 68,515評論 6 397
  • 文/花漫 我一把揭開白布蒜撮。 她就那樣靜靜地躺著跪呈,像睡著了一般段磨。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上苹支,一...
    開封第一講書人閱讀 52,158評論 1 308
  • 那天,我揣著相機與錄音误阻,去河邊找鬼。 笑死究反,一個胖子當(dāng)著我的面吹牛策幼,可吹牛的內(nèi)容都是我干的奴紧。 我是一名探鬼主播特姐,決...
    沈念sama閱讀 40,755評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼黍氮,長吁一口氣:“原來是場噩夢啊……” “哼唐含!你這毒婦竟也來了沫浆?” 一聲冷哼從身側(cè)響起捷枯,我...
    開封第一講書人閱讀 39,660評論 0 276
  • 序言:老撾萬榮一對情侶失蹤专执,失蹤者是張志新(化名)和其女友劉穎淮捆,沒想到半個月后本股,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體攀痊,經(jīng)...
    沈念sama閱讀 46,203評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡拄显,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,287評論 3 340
  • 正文 我和宋清朗相戀三年苟径,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片棘街。...
    茶點故事閱讀 40,427評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡蟆盐,死狀恐怖遭殉,靈堂內(nèi)的尸體忽然破棺而出石挂,到底是詐尸還是另有隱情,我是刑警寧澤誊稚,帶...
    沈念sama閱讀 36,122評論 5 349
  • 正文 年R本政府宣布,位于F島的核電站罗心,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏渤闷。R本人自食惡果不足惜疾瓮,卻給世界環(huán)境...
    茶點故事閱讀 41,801評論 3 333
  • 文/蒙蒙 一飒箭、第九天 我趴在偏房一處隱蔽的房頂上張望狼电。 院中可真熱鬧弦蹂,春花似錦肩碟、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,272評論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽脑漫。三九已至,卻和暖如春优幸,著一層夾襖步出監(jiān)牢的瞬間吨拍,已是汗流浹背网杆。 一陣腳步聲響...
    開封第一講書人閱讀 33,393評論 1 272
  • 我被黑心中介騙來泰國打工羹饰, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人队秩。 一個月前我還...
    沈念sama閱讀 48,808評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像追城,于是被迫代替她去往敵國和親燥撞。 傳聞我的和親對象是個殘疾皇子座柱,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,440評論 2 359

推薦閱讀更多精彩內(nèi)容

  • 生命里戏锹,總有那么一種情懷火诸,傾訴著眷戀曾經(jīng)無悔锦针。 內(nèi)心深處,總有一道風(fēng)景線,在溫柔里永如初見置蜀。 不需奢華,不需完美盯荤,...
    醉墨人生閱讀 436評論 1 4
  • @無神 在《知識付費的困局》留言說:看簡書這么久了馋吗,第一次看到這樣的文章秋秤,分析的透徹宏粤。估計很多人看了這篇文章,不會...
    牛糞茶壺閱讀 1,135評論 48 55
  • 一時風(fēng)起云涌绍哎,橘子族和花蝴蝶族的大戰(zhàn)一觸即發(fā)! 難得能圍觀這種跨種族的對戰(zhàn)鞋真,青青草原草長為您發(fā)來遠方詳細報道。 首...
    皮卡7閱讀 256評論 0 2
  • 函數(shù)調(diào)用自身涩咖,稱為『遞歸』赶袄;函數(shù)尾調(diào)用自身抠藕,稱為『尾遞歸』 由于遞歸需要保存大量調(diào)用幀饿肺,很消耗內(nèi)存,容易發(fā)生 st...
    恒星的背影閱讀 136評論 0 0