gdb打印结构体member offset

简介: linux的crash有个好处就是可以方便打印结构体成员变量的offset, 有时候对汇编的时候, 需要偏移, 可惜crash需要一个活体才行, 不能单纯的vmlinux, 因为它就是这么设计的 gdb天生没有这个功能, 不过python可以实现 cat offset.py import gdb class Offsets(gdb.Command): def __in

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指针来转

从这里来
https://stackoverflow.com/questions/9788679/how-to-get-the-relative-address-of-a-field-in-a-structure-dump-c

相关实践学习
阿里云图数据库GDB入门与应用
图数据库(Graph Database,简称GDB)是一种支持Property Graph图模型、用于处理高度连接数据查询与存储的实时、可靠的在线数据库服务。它支持Apache TinkerPop Gremlin查询语言,可以帮您快速构建基于高度连接的数据集的应用程序。GDB非常适合社交网络、欺诈检测、推荐引擎、实时图谱、网络/IT运营这类高度互连数据集的场景。 GDB由阿里云自主研发,具备如下优势: 标准图查询语言:支持属性图,高度兼容Gremlin图查询语言。 高度优化的自研引擎:高度优化的自研图计算层和存储层,云盘多副本保障数据超高可靠,支持ACID事务。 服务高可用:支持高可用实例,节点故障迅速转移,保障业务连续性。 易运维:提供备份恢复、自动升级、监控告警、故障切换等丰富的运维功能,大幅降低运维成本。 产品主页:https://www.aliyun.com/product/gdb
目录
相关文章
|
1月前
【bug记录】旋转链表与力扣报错:member access within null pointer of type ‘struct ListNode‘
【bug记录】旋转链表与力扣报错:member access within null pointer of type ‘struct ListNode‘
container_of(ptr,type,member)宏
详细解释了container_of(ptr,type,member)宏的用途
|
4月前
|
NoSQL C++
c++中包含string成员的结构体拷贝导致的double free问题
c++中包含string成员的结构体拷贝导致的double free问题
73 0
|
存储 Go
Go空结构体struct {}
struct {}介绍、使用场景、和struct {}{}比较
86 0
|
4月前
|
编译器 C++
offsetof宏的使用、模拟实现及 (size_t)&(((struct_type*)0)->mem_name)的解释
offsetof宏的使用、模拟实现及 (size_t)&(((struct_type*)0)->mem_name)的解释
|
Go
go打印结构体数据
go打印结构体数据
113 0
成功解决 cl: 命令行 error D8021 :无效的数值参数“/Wno-cpp” 和 cl: 命令行 error D8021 :无效的数值参数“/Wno-unused-function”
成功解决 cl: 命令行 error D8021 :无效的数值参数“/Wno-cpp” 和 cl: 命令行 error D8021 :无效的数值参数“/Wno-unused-function”
成功解决 cl: 命令行 error D8021 :无效的数值参数“/Wno-cpp” 和 cl: 命令行 error D8021 :无效的数值参数“/Wno-unused-function”
|
NoSQL C语言
printf段错误(core dump): 一个格式化输出引起的问题
printf段错误(core dump): 一个格式化输出引起的问题
497 0
|
编译器 Linux C语言
报错storage size of ‘sa’ isn’t known,当使用std=c99编译struct sigaction
报错storage size of ‘sa’ isn’t known,当使用std=c99编译struct sigaction
694 0
报错storage size of ‘sa’ isn’t known,当使用std=c99编译struct sigaction
|
前端开发 rax Linux
nasm示例一:调用syscall打印Hello World
NASM是基于英特尔 x86 架构的汇编与反汇编工具 syscall是x86_64架构中专门做系统调用的指令
4877 0