gdb列印結構體memberoffset
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):
argv = gdb.string_to_argv(arg)
if len(argv) != 1:
raise gdb.GdbError(`offsets-of takes exactly 1 argument.`)
stype = gdb.lookup_type(`struct %s` % argv[0])
print argv[0], `{`
for field in stype.fields():
print ` [0x%x] %s` % (field.bitpos//8, field.name)
print `}`
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指標來轉
相關文章
- gdb顯示結構體結構體
- gdb golang 檢視iface 內部結構Golang
- 簡單介紹Golang列印複雜結構體的兩種方法Golang結構體
- gdb除錯總結除錯
- 基於ArcGIS ModelBuilder的GDB批量分割槽裁剪——可保留原始GDB要素集要素類結構UI
- 在列印視窗,列印檢視View的子檢視結構圖View
- 結構體中套用其他_結構體結構體
- 不用DOC/VIEW類結構進行列印 (轉)View
- Oracle體系結構:記憶體結構和程式結構(轉)Oracle記憶體
- 結構體結構體
- Oracle體系結構之-記憶體結構Oracle記憶體
- Oracle體系結構之-物理結構Oracle
- Go 結構體Go結構體
- 結構體struct結構體Struct
- 結構體與共用體結構體
- Oracle體系結構之記憶體結構(SGA、PGA)Oracle記憶體
- js列印小結JS
- web列印總結Web
- 3:Oracle體系結構(邏輯結構)Oracle
- [Virtualization]ESXi體系結構與記憶體管理(一)體系結構記憶體
- ORACLE體系結構小結Oracle
- oracle體系結構總結Oracle
- 【PG體系結構】PG體系結構簡單說明
- 已知結構體成員地址獲取結構體首地址結構體
- Golang原始碼學習:使用gdb除錯探究Golang函式呼叫棧結構Golang原始碼除錯函式
- 100 行 C 程式碼終端列印樹形結構
- 結構體問題結構體
- BeanFactory體系結構Bean
- 【JVM體系結構】JVM
- Deployer整體結構
- Servlet 體系結構Servlet
- 結構體相關結構體
- C 結構體概述結構體
- GPU硬體結構GPU
- MySQL 體系結構MySql
- 記憶體結構記憶體
- 類與結構體結構體
- JVM - 整體結構JVM