在Linux内核中,我需要find所使用的结构的成员variables的偏移量。 例如,对于types为task_struct的init_task,我想要它的pid和任务的偏移量。
我只有这个vmlinux。 我可以参考开源内核代码,但是它可能与我有的版本不同。
是否有可能得到没有源头的偏移量?
编辑:vmlinux是为ARM,我可能不总是能够在目标设备上运行C代码。
ELF文件的哪一部分必须加载到内存中?
如何加载共享库而不加载它的依赖关系?
在ELF文件中find全局偏移表
Linux用户空间ELF加载器
我怎样才能find不符合ELF的依赖?
执行ELF IFUNC调度function时读取环境
结构的大小和布局显示在编译目标文件的调试信息中(如果使用-g编译并且不strip )。
在Gentoo中, pahole (又名“poke-a-hole”,作为dev-util/dwarves包装)读取对象的DWARF调试信息,输出关于结构中“洞”的信息 – 这可能是一个很好的起点。
6.47抵消
GCC为C和C ++实现了一个语法扩展来实现offsetof宏。
primary: "__builtin_offsetof" "(" typename "," offsetof_member_designator ")" offsetof_member_designator: identifier | offsetof_member_designator "." identifier | offsetof_member_designator "[" expr "]"
这个扩展就足够了
#define offsetof(type,member) __builtin_offsetof (type,member)
是宏的偏移的一个合适的定义。 在C ++中,类型可能是依赖的。 无论哪种情况,成员都可以由一个标识符组成,也可以由一系列成员访问和数组引用组成。
用arm-eabi-gdb找到另一个解决方案 – 我可以做print&init_task和print&init_task.pid,区别在于offset。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。