gdb列印結構體member offset

2021-09-22 06:42:58 字數 985 閱讀 6685

linux的crash有個好處就是可以方便列印結構體成員變數的offset, 有時候對彙編的時候, 需要偏移, 可惜crash需要乙個活體才行, 不能單純的vmlinux, 因為它就是這麼設計的

gdb天生沒有這個功能, 不過python可以實現

cat offset.py

import gdb

class offsets(gdb.command):

def __init__(self):

super (offsets, self).__init__ ('offsets-of', gdb.command_data)

def invoke(self, arg, from_tty):

ar** = gdb.string_to_ar**(arg)

if len(ar**) != 1:

raise gdb.gdberror('offsets-of takes exactly 1 argument.')

stype = gdb.lookup_type('struct %s' % ar**[0])

print ar**[0], ''

offsets()

gdb vmlinux -x ~/offset.py

(gdb) offsets-of task_struct

task_struct {

[0x0] thread_info

[0x8] state

[0x10] stack

[0x18] usage

[0x1c] flags

[0x20] ptrace

[0x28] wake_entry

[0x30] on_cpu

[0x34] cpu

[0x38] wakee_flips

[0x40] wakee_flip_decay_ts

其實還是挺方便的, 省得用0指標來轉

從這裡來

ios 列印 結構體

我們經常會輸出一些座標尺寸資訊之類的,比如view的frame,是cgrect型別的,用frame.oringial.x 和frame.size.width來做nslog引數好麻煩,還好蘋果對這些常用的資料提供了字串轉換的方法,如下 1 2 3 4 5 6 nsstring nsstringfrom...

OC 列印結構體的內容

oc結構體 如nsrect,nssize,nspoint等 型別的結構體變數不是物件,所以要想整體列印他們內容。必須事先把它們轉換為oc字串型別,常用的方法就是直接使用nsstringfrom 方法即可 一 nsrage void range int main int argc,const char...

Go列印結構體的field

擷取自我的部落格 go可以很方便的列印出結構體的field,不同於json.marshal 操作,json操作有很多侷限性,首先其要求結構體字段為大寫字段,否則沒有訪問許可權,其二,其會多出一步函式呼叫,比較麻煩。這裡又很方便既可以將結構體field列印出來的方法,不用區分大小寫。printf的關鍵...