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的關鍵...