国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

Libheap:一款用于分析Glibc堆結(jié)構(gòu)的GDB調(diào)試工具

安全 數(shù)據(jù)安全
Libheap是一個用于在Linux平臺上分析glibc堆結(jié)構(gòu)的GDB調(diào)試腳本,使用Python語言編寫。

Libheap是一個用于在Linux平臺上分析glibc堆結(jié)構(gòu)的GDB調(diào)試腳本,使用Python語言編寫。

[[164643]]

安裝

Glibc安裝

盡管Libheap不要求glibc使用GDB調(diào)試支持和符號進(jìn)行編譯,但是如果用戶使用的話,也不會影響它的功能。已經(jīng)有很多手動構(gòu)建Glibc的指導(dǎo)說明,目前最合適的一個:

Devpit – Building GLIBC

Fedora上使用了以下簡單的方法實(shí)現(xiàn)了該方法:

debuginfo-install glibc

使用該命令,系統(tǒng)會自動安裝并設(shè)置調(diào)試Glibc。

GDB安裝

如果用戶使用的是較新版本的Fedora,其中的GDB使用加入了最新的python支持的新技術(shù)。否則,用戶就需要從SVN中構(gòu)建GDB,而不是使用Tom Tromey提供的步驟:

$ sudo yum install python-devel git texinfo
$ mkdir -p ~/archer/build ~/archer/install
$ cd ~/archer
$ git clone git://sourceware.org/git/archer.git
$ cd archer
$ git checkout --track -b python origin/archer-tromey-python
$ cd ../build
$ ../archer/configure --prefix=$(cd ../install && pwd)
$ make all install

這一步完成后,用戶就會得到一個可以在archer/install/bin/gdb上運(yùn)行的編譯版本GDB。

Libheap安裝

最后一步是安裝Libheap庫,這一步相對簡單,只需要將其移動到Python路徑(sys.path)下:

$ mv libheap.py /usr/lib/python2.6

用法

加載libheap同加載其他Python庫的方法類似:

$ gdb

(gdb) python from libheap import *

整體堆狀態(tài)

多個不同的狀態(tài)用于輸出堆的整體狀態(tài),如下:

heap -h

(gdb) heap -h
==================== Heap Dump=========================
 
Options:
  -a 0x1234 指定arena地址
  -b        輸出壓縮的bin列表(只是空閑數(shù)據(jù)塊)
  -c        輸出壓縮的arena列表(所有數(shù)據(jù)塊)
  -f [#]    輸出所有的fast bin,或獨(dú)立的fast bin
  -l        輸出arena 中所有數(shù)據(jù)塊的flat列表
  -s [#]    輸出所有的small bin,或獨(dú)立的small bin

heap

(gdb) heap
==================== HeapDump=========================
 
Arena(s) found:
     arena @ 0xf2f3a0

heap -b

(gdb) heap -b
==================== Heap Dump=========================
 
  fast bin 0   @ 0x804b000
    free chunk @ 0x804b000- size 0x10
  unsorted bin @ 0xf2f3d8
    free_chunk @ 0x804b010- size 0x88

heap -f

(gdb) heap -b
==================== HeapDump=========================
 
  fast bin 0   @ 0x804b000
    free chunk @ 0x804b000- size 0x10
  unsorted bin @ 0xf2f3d8
    free_chunk @ 0x804b010- size 0x88

heap -f

(gdb) heap -f
==================== HeapDump=========================
 
[ fb  0 ] 0xf2f3a8 -> [0x0804b000 ] (16)
[ fb  1 ] 0xf2f3ac -> [0x00000000 ]
[ fb  2 ] 0xf2f3b0 -> [0x00000000 ]
[ fb  3 ] 0xf2f3b4 -> [0x00000000 ]
[ fb  4 ] 0xf2f3b8 -> [0x00000000 ]
[ fb  5 ] 0xf2f3bc -> [0x00000000 ]
[ fb  6 ] 0xf2f3c0 -> [0x00000000 ]
[ fb  7 ] 0xf2f3c4 -> [0x00000000 ]
[ fb  8 ] 0xf2f3c8 -> [0x00000000 ]
[ fb  9 ] 0xf2f3cc -> [0x00000000 ]

heap -s

(gdb) heap -s 1
==================== HeapDump=========================
 
[ sb 01 ] 0xf2f3d8 -> [ 0x0804b010 | 0x0804b010 ]
                      [0x00f2f3d0 | 0x00f2f3d0 ]  (136)

heap -l

(gdb) heap -l
==================== Heap Dump=========================
 
          ADDR             SIZE         STATUS
sbrk_base 0x602c00
chunk     0x602c00         0x110        (inuse)
chunk     0x602d10         0x110        (F) FD 75dea366deb8 BK 602f30
chunk     0x602e20         0x110        (inuse)
chunk     0x602f30         0x110        (F) FD 602d10 BK 75dea366deb8
chunk     0x603040         0x110        (inuse)
chunk     0x603150         0x20eb0      (top)
sbrk_end  0x624008

heap -c

(gdb) heap -c
==================== Heap Dump=========================
|A||11||A||11||A||T|

數(shù)據(jù)塊

libheap為用戶提供了多種方法用于檢查內(nèi)存分配數(shù)據(jù)塊。該庫使用一個比較完善的malloc_chunk結(jié)構(gòu)體輸出程序,因此只要是有效的數(shù)據(jù)庫,就可以輸出其地址:

(gdb) p *(mchunkptr) 0x608790
struct malloc_chunk {
prev_size   = 0x0
size        = 0x21a81
fd          = 0x0
bk          = 0x0
fd_nextsize = 0x0
bk_nextsize = 0x0

為了獲取數(shù)據(jù)庫的更加細(xì)粒度的訪問權(quán)限,libheap使用了一個代表內(nèi)存分配數(shù)據(jù)塊的python類:

(gdb) python print malloc_chunk(0x608790)
struct malloc_chunk {
prev_size   = 0x0
size        = 0x21a81
fd          = 0x0
bk          = 0x0
fd_nextsize = 0x0
bk_nextsize = 0x0

默認(rèn)情況下,程序會將一個地址看作已釋放的數(shù)據(jù)庫,并讀取malloc_chunk結(jié)構(gòu)體的所有字段。但是如果用戶傳遞一個名為‘inuse’的可選布爾項(xiàng)就可以改變這種情況。如果用戶只是想要讀取已分配數(shù)據(jù)塊的頭部,那么可以傳入一個名為‘read_data’的可選布爾項(xiàng)。該類默認(rèn)讀取數(shù)據(jù)塊中指定的任意大小的內(nèi)存,這樣顯示是有弊端的:攻擊者可以使用虛假的值覆蓋size字段。因此程序設(shè)置了一個可選的size標(biāo)志,用戶可以指定真實(shí)的數(shù)據(jù)塊大小。綜上所述,用戶可以訪問和更改數(shù)據(jù)塊中獨(dú)立的字段:

(gdb) python chunk = malloc_chunk(0x608790, inuse=True,read_data=False)
(gdb) python print chunk
struct malloc_chunk {
prev_size   = 0x0
size        = 0x21a81
 
(gdb) python chunk.size = 1
(gdb) python chunk.write()
(gdb) python print chunk
struct malloc_chunk {
prev_size   = 0x0
size        = 0x1
 
(gdb) python print malloc_chunk(0x608790, inuse=True, size=8)
struct malloc_chunk {
prev_size   = 0x0
size        = 0x1
data        = (0,)
raw         ="\x00\x00\x00\x00"

最后,如果用戶想要查看內(nèi)存分配數(shù)據(jù)塊在堆實(shí)現(xiàn)中的表現(xiàn)形式,可以向該類傳遞一個行內(nèi)存字符串,并查看解析情況:

(gdb) python printmalloc_chunk(mem='\x01\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00',inuse=True)
struct malloc_chunk {
prev_size   = 0x1
size        = 0x2

Glibc結(jié)構(gòu)體

libheap中還包含malloc_par和malloc_state結(jié)構(gòu)體的輸出程序。用戶可以通過請求輸出全局變量查看:

(gdb) p mp_
$1 = struct malloc_par {
 
(gdb) p main_arena
$2 = struct malloc_state {

以下為這兩個重要結(jié)構(gòu)體的Python類實(shí)現(xiàn),用戶可以使用這些類查看任意內(nèi)存:

(gdb) python print malloc_state(0x6503d0b37e60)
struct malloc_state {
mutex          = 0x0
flags          = 0x1
fastbinsY      = {...}
top            = 0x608790
last_remainder = 0x0
bins           = {...}
binmap         = {...}
next           =0x6503d0b37e60
system_mem     = 0x21890
max_system_mem = 0x21890
 
(gdb) python print malloc_par(0x6cb800)
struct malloc_par {
trim_threshold   = 0x9e000
top_pad          = 0x20000
mmap_threshold   = 0x4f000
n_mmaps          = 0x0
n_mmaps_max      = 0x10000
max_n_mmaps      = 0x1
no_dyn_threshold = 0x0
mmapped_mem      = 0x0
max_mmapped_mem  = 0x4f000
max_total_mem    = 0x0
sbrk_base        =0x809c000

便捷函數(shù)

如果用戶想要擴(kuò)展該庫或使用其中的任意功能,以下為在Python中重新實(shí)現(xiàn)的Glibc函數(shù)列表:

chunk2mem(p)
mem2chunk(mem)
request2size(req)
prev_inuse(p)
chunk_is_mmapped(p)
chunk_non_main_arena(p)
chunksize(p)
next_chunk(p)
prev_chunk(p)
chunk_at_offset(p, s)
inuse(p)
set_inuse(p)
clear_inuse(p)
inuse_bit_at_offset(p, s)
set_inuse_bit_at_offset(p, s)
clear_inuse_bit_at_offset(p, s)
bin_at(m, i)
next_bin(b)
first(b)
last(b)
in_smallbin_range(sz)
smallbin_index(sz)
largebin_index_32(sz)
largebin_index_64(sz)
largebin_index(sz)
bin_index(sz)
fastbin(ar_ptr, idx)
fastbin_index(sz)
have_fastchunks(M)
clear_fastchunks(M)
set_fastchunks(M)
contiguous(M)
noncontiguous(M)
set_noncontiguous(M)
set_contiguous(M)
mutex_lock(ar_ptr [, inferior])
mutex_unlock(ar_ptr [, inferior])
top(ar_ptr)
heap_for_ptr(ptr)

 

責(zé)任編輯:藍(lán)雨淚 來源: FreeBuf
相關(guān)推薦

2011-05-10 09:55:14

2025-03-31 03:25:00

2025-07-03 02:00:00

2018-08-01 09:00:00

測試工具負(fù)載測試性能測試

2020-05-28 09:33:07

Web調(diào)試代理工具Fiddler

2022-07-25 07:57:19

工具代碼調(diào)試

2025-04-07 08:10:00

2016-03-29 14:54:36

2019-07-22 09:24:54

LinuxMySQL數(shù)據(jù)庫

2020-09-30 13:29:25

工具代碼開發(fā)

2021-06-09 09:52:29

開源Pyroscope代碼

2021-11-01 05:53:08

Doldrums逆向工程分析工具安全工具

2018-11-27 11:35:32

systemtapMySQL調(diào)試工具

2023-08-30 08:24:34

2020-11-17 09:27:26

KubernetesYAMLKubeLinter

2015-08-14 09:21:09

gdb工具調(diào)試 Go

2022-01-16 06:48:42

Jektor測試工具安全工具

2024-01-25 10:40:11

AutoProfil開源分析工具

2021-02-16 10:58:50

ScreenLinux命令

2021-01-27 13:16:39

ScreenLinux命令
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號

久久精品成人欧美大片古装| 日本一区免费| 欧美成人精品三级在线观看 | 国产综合色香蕉精品| 成人影视亚洲图片在线| 国产精品入口麻豆原神| 日本一本中文字幕| 麻豆成人91精品二区三区| 国产一区福利视频| 欧美激情 亚洲a∨综合| 国产精品小说在线| 一本色道久久综合亚洲精品酒店| www.日韩av.com| 88xx成人网| 日韩精品视频免费在线观看| 七七成人影院| 精品国产在天天线2019| 黄色在线免费网站| 91精品免费观看| 日本韩国在线视频爽| 欧美日韩精品电影| 黄视频网站在线看| 亚洲高清福利视频| 小早川怜子影音先锋在线观看| 欧美成人国产一区二区| heyzo高清中文字幕在线| 亚洲国产三级网| 日本成人片在线| 精品精品国产国产自在线| 国产精品777777在线播放| 日韩亚洲精品电影| 超碰成人在线免费| 国产精品旅馆在线| 欧美三级小说| 亚洲va久久久噜噜噜久久狠狠 | 91天堂在线| 欧美日韩国产一区二区三区| 黄网在线免费| 日韩免费观看高清完整版 | 国产欧美日韩在线一区二区| 国产精品久久久久99| 亚州av乱码久久精品蜜桃| 国产一区二区三区色淫影院| 日本美女视频一区二区| 夜夜添无码一区二区三区| 国产亚洲欧美日韩俺去了| 黄色片在线看| 亚洲人成在线观看一区二区| 日韩a级在线观看| 久久久国产精品午夜一区ai换脸| 日韩五码在线观看| 国产成人高清视频| 8x海外华人永久免费日韩内陆视频 | www日韩大片| 天天干天天综合| 丁香五六月婷婷久久激情| 亚洲综合伊人久久大杳蕉| 在线观看日韩av| 日韩成人精品一区二区| 欧美一区二区高清在线观看| 91美女精品福利| 国产私人尤物无码不卡| 中文字幕在线看视频国产欧美在线看完整| 乱中年女人伦av一区二区| 欧美gay男男猛男无套| 国产精品视频26uuu| 你懂的视频欧美| 日韩一区二区三区免费播放| 91精品久久久久久| 99久热在线精品视频观看| 欧美一区二区三区免费视频| av电影一区二区三区| 伊人成人网在线看| 日韩视频精品在线| 老司机午夜在线视频| 一区二区三区色| 少妇性l交大片| 国产日韩精品视频一区二区三区| 综合网五月天| 亚洲免费观看高清完整版在线观看熊| 国产成人天天5g影院在线观看| 中文字幕亚洲欧美一区二区三区 | 亚洲精品成人自拍| 一级精品视频在线观看宜春院| 操人在线观看| 91在线观看免费高清完整版在线观看| 国产成a人无v码亚洲福利| 成人免费在线观看| 午夜精品www| 国产一区二区三区国产| 福利片在线看| 日本aⅴ大伊香蕉精品视频| 国产精品中文欧美| 久草中文在线| 成人激情视频在线观看| 欧美国产精品专区| 777午夜精品电影免费看| 中文字幕精品一区二区精品| 亚洲永久免费| 国产又大又长又粗又黄| 欧美成人午夜影院| www.成人| 9999在线观看| 91精选在线观看| 青青草91久久久久久久久| 日韩视频免费播放| 精品国产一区二区三区久久久蜜月| 久久人人99| 久久婷婷综合色| 久久福利视频网| 国产成人综合亚洲91猫咪| 在线中文字幕视频观看| 国产98在线|日韩| 亚洲成av人片www| 啪啪国产精品| 免费看污黄网站| 中文字幕在线日韩 | 97久久精品国产| 久久久久国产免费免费| 欧美成人精品三级网站| 一区二区三区精品国产| 91精品国产欧美一区二区成人| 亚洲人体av| 免费在线性爱视频| 国产日韩av在线播放| 亚洲国产天堂| 污版视频在线观看| 亚洲欧洲在线播放| 正在播放日韩欧美一页 | 午夜影视日本亚洲欧洲精品| 隔壁人妻偷人bd中字| 久久久国际精品| 浪潮色综合久久天堂| 天天干天天草天天| 91久久久久久久久久| 欧美精品导航| 欧美大胆视频| 黄色精品视频| 四虎黄色影院| 国产精品一区视频| 欧美日本精品在线| 亚洲欧美在线一区二区| 亚洲影院免费观看| 88xx成人精品| 国产目拍亚洲精品99久久精品| 欧美另类中文字幕| avav在线看| 欧美激情精品久久久久久变态| 岛国一区二区三区| 9999在线精品视频| 超碰在线97免费| 97视频在线播放| 亚洲成a人片在线观看中文| 天天久久综合| 欧美天天影院| 9l视频自拍9l视频自拍| 在线视频日本亚洲性| 国产日韩欧美高清| 午夜久久免费观看| 国产探花视频在线观看| 69sex久久精品国产麻豆| 久久久欧美一区二区| 亚洲国产精品一区二区久久| 99在线|亚洲一区二区| 日韩制服一区| 22288色视频在线观看| 久久久久久高清| 久久精品视频va| 精品久久久久久中文字幕一区奶水| 欧美一级网站| 成人av在线播放| 日韩资源在线| 青青青在线观看视频| 欧美一区深夜视频| 欧美高清性hdvideosex| 99久久国产免费看| 成人羞羞网站入口| 免费污视频在线| 最近中文字幕一区二区| 成人a级免费视频| 亚洲黄页视频免费观看| 国产精品高潮久久久久无| 欧美日韩一卡| 久久久久伊人| 懂色av中文在线| 欧美美女黄色网| 国产精品一二三在线| 精品一区二区电影| 亚洲成人在线网站| 国产成人av资源| 欧美日本精品| 久久免费福利| 成人无遮挡免费网站视频在线观看| 1024av视频| 九色综合婷婷综合| 国内精品久久久久| 亚洲成人免费在线视频| 亚洲综合av网| av资源站一区| 日韩国产精品91|