再看perf是如何通過dwarf處理棧幀的

2022-04-13 20:33:35 字數 2942 閱讀 7698

從結構體stack_dump入手,

util/unwind-libunwind-local.c 中有函式access_mem

#0  access_mem (as=0x1f65bd0, addr=140221249831136, valp=0x7fffffffa930, __write=0, arg=0x7fffffffb900) at util/unwind-libunwind-local.c:452

#1 0x00007ffff6c171ec in _ux86_64_dwarf_search_unwind_table () from /usr/lib/x86_64-linux-gnu/libunwind-x86_64.so.8

#2 0x000000000052cd16 in find_proc_info (as=0x1f65bd0, ip=140221248995871, pi=0x7fffffffb620, need_unwind_info=1, arg=0x7fffffffb900)

at util/unwind-libunwind-local.c:364

#3 0x00007ffff6c13e75 in ?? () from /usr/lib/x86_64-linux-gnu/libunwind-x86_64.so.8

#4 0x00007ffff6c159e7 in ?? () from /usr/lib/x86_64-linux-gnu/libunwind-x86_64.so.8

#5 0x00007ffff6c16cd9 in ?? () from /usr/lib/x86_64-linux-gnu/libunwind-x86_64.so.8

#6 0x00007ffff6c0f671 in _ux86_64_step () from /usr/lib/x86_64-linux-gnu/libunwind-x86_64.so.8

#7 0x000000000052c48c in get_entries (ui=ui@entry=0x7fffffffb900, cb=0x4c0ff0 , arg=0x7ffff7fcf758, max_stack=127)

at util/unwind-libunwind-local.c:648

#8 0x000000000052c6c2 in _unwind__get_entries (cb=, arg=, thread=, data=,

max_stack=) at util/unwind-libunwind-local.c:686

#9 0x00000000004c652c in thread__resolve_callchain_unwind (max_stack=127, sample=0x7fffffffbb60, evsel=0x1ee46f0, cursor=0x7ffff7fcf758,

thread=0x1f42060) at util/machine.c:1941

#10 thread__resolve_callchain (thread=0x1f42060, cursor=0x7ffff7fcf758, evsel=0x1ee46f0, sample=0x7fffffffbb60, parent=0x7fffffffba68,

root_al=0x7fffffffba00, max_stack=127) at util/machine.c:1968

#11 0x00000000004bf181 in sample__resolve_callchain (sample=, cursor=, parent=parent@entry=0x7fffffffba68,

evsel=, al=al@entry=0x7fffffffba00, max_stack=max_stack@entry=127) at util/callchain.c:803

#12 0x00000000004ed711 in hist_entry_iter__add (iter=0x7fffffffba40, al=0x7fffffffba00, max_stack_depth=127, arg=0x7fffffffc0e0)

at util/hist.c:1023

#13 0x000000000043208e in process_sample_event (tool=0x7fffffffc0e0, event=, sample=0x7fffffffbb60, evsel=,

machine=) at builtin-report.c:192

#14 0x00000000004cb1fa in perf_evlist__deliver_sample (machine=, evsel=0x1ee46f0, sample=0x7fffffffbb60, event=0x7ffff7ff5578,

tool=0x7fffffffc0e0, evlist=0x1ee3cb0) at util/session.c:1196

#15 machines__deliver_event (machines=machines@entry=0x1ee39f8, evlist=0x1ee3cb0, event=event@entry=0x7ffff7ff5578,

sample=sample@entry=0x7fffffffbb60, tool=tool@entry=0x7fffffffc0e0, file_offset=file_offset@entry=17784) at util/session.c:1233

是如何處理棧幀的

.... sp    0x7ffd099f2b58

.... ip 0x7f87cdbc821f

然後發現access_mem呼叫了好多次,可能是因為使用者棧大小的問題,是怎麼

編譯了binary,但是並沒有正確解析出函式呼叫棧,這是因為在我系統的lib64.so中並沒有相關的debuginfo,導致在解析getpid函式的時候並沒有準確得到呼叫棧的資訊,如果我在func函式的地方打點,那麼就不會遇到這個問題了:

試一下即便在uprobe處打點,為啥只檢測出來一層呼叫棧,看樣子是解析出

我是如何通過CSRF拿到Shell的

織夢內容管理系統 dedecms 以簡單 實用 開源而聞名,是國內最知名的php開源 管理系統,也是使用使用者最多的php類cms系統,在經歷多年的發展,目前的版本無論在功能,還是在易用性方面,都有了長足的發展和進步,dedecms免費版的主要目標使用者鎖定在個人站長,功能更專注於個人 或中小型門戶...

我是如何通過程式設計技術轉換還金錢

簡介 常用網名 豬頭三 出生日期 1981.xx.xx 個人 email pliceman 110 163.com qq交流 643439947 程式設計生涯 2001年 至今 13年 職業生涯 11年 開發語言 c c 80x86asm php perl objective c object pa...

我是如何通過微信賺到5000元的

很多人利用微信都賺到錢了,我也算其中的乙個。我玩微信至今只賺了5000元。微信給我帶來的遠遠不止5000元,用微信官方的宣傳語來表達,微信改變了我的生活方式。下面說說我是如何通過微信賺錢的。一丶定位決定市場,市場決定規模。定位很重要,定位好比一座大樓的地基。地基打不好,大樓易倒塌 定位做不好,彎路沒...