8——man elf的翻译——Notes (Nhdr)
Notes (Nhdr)
ELF notes允许附加任意信息供系统使用。它们大部分情况是被内核文件使用(e_type of ET_CORE),
但是很多projects定义它们自己的扩展。例如,GNU tool chain使用ELF notes将信息从链接器
传递到C库。
Note sections 包含一系列的notes(请看下面的定义)。Each note is followed by the name
field(n_namesz定义长度的那个)and then by the descriptor field(n_descsz定义长度的那个)
and whose starting address has a 4 byte alignment.由于两个字段的长度都是任意的,所以在
note结构中都没有定义它们。
一个解析出两个连续的notes的例子应该能阐明它们在内存中的布局:
void *memory, *name, *desc;
Elf64_Nhdr *note, *next_note;
/* The buffer is pointing to the start of the section/segment */
note = memory;
/* If the name is defined, it follows the note */
name = note->n_namesz == 0 ? NULL : memory + sizeof(*note);
/* If the descriptor is defined, it follows the name
(with alignment) */
desc = note->n_descsz == 0 ? NULL :
memory + sizeof(*note) + ALIGN_UP(note->n_namesz, 4);
/* The next note follows both (with alignment) */
next_note = memory + sizeof(*note) +
ALIGN_UP(note->n_namesz, 4) +
ALIGN_UP(note->n_descsz, 4);
请记住,n_type的解释取决于n_namesz字段定义的namespace。如果n_namesz没有设置,也就是为0,
然后那就有两种notes的设置:一个为内核文件,另一个为其他ELF类型文件。如果namespace未知,
then tools will usually fallback to these sets of notes as well.我看了一下有道翻译,感
觉不太合适,还是原文比较好。有道是这么翻译的:然后工具通常也会回到这些笔记集。请参考
typedef struct {
Elf32_Word n_namesz;
Elf32_Word n_descsz;
Elf32_Word n_type;
} Elf32_Nhdr;
typedef struct {
Elf64_Word n_namesz;
Elf64_Word n_descsz;
Elf64_Word n_type;
} Elf64_Nhdr;
n_namesz name field的长度。在内存中内容会紧跟它之后。name为NUll的时候代表终止。
例如,如果name是“GNU”,n_namesz就是4.
n_descsz 描述符号字段的长度。在内存中内容会紧跟它之后。
n_type 由name字段的值决定,有可能是下面这些中的一个:
Core file (e_type = ET_CORE)
Notes被所有的内核文件使用。并且高度和操作系统相关或者和架构相关。
并且经常要求关闭和内核,C库,调试相关的联系。当namespace是默认值
(也就是n_namesz为0的时候)的时候是有用的。或者当namespace未知的
时候作为备份。
NT_PRSTATUS prstatus struct
NT_FPREGSET fpregset struct
NT_PRPSINFO prpsinfo struct
NT_PRXREG prxregset struct
NT_TASKSTRUCT task structure
NT_PLATFORM String from sysinfo(SI_PLATFORM)
NT_AUXV auxv array
NT_GWINDOWS gwindows struct
NT_ASRS asrset struct
NT_PSTATUS pstatus struct
NT_PSINFO psinfo struct
NT_PRCRED prcred struct
NT_UTSNAME utsname struct
NT_LWPSTATUS lwpstatus struct
NT_LWPSINFO lwpinfo struct
NT_PRFPXREG fprxregset struct
NT_SIGINFO siginfo_t (size might increase over time)
NT_FILE Contains information about mapped files
NT_PRXFPREG user_fxsr_struct
NT_PPC_VMX PowerPC Altivec/VMX registers
NT_PPC_SPE PowerPC SPE/EVR registers
NT_PPC_VSX PowerPC VSX registers
NT_386_TLS i386 TLS slots (struct user_desc)
NT_386_IOPERM x86 io permission bitmap (1=deny)
NT_X86_XSTATE x86 extended state using xsave
NT_S390_HIGH_GPRS s390 upper register halves
NT_S390_TIMER s390 timer register
NT_S390_TODCMP s390 time-of-day (TOD) clock comparator register
NT_S390_TODPREG s390 time-of-day (TOD) programmable register
NT_S390_CTRS s390 control registers
NT_S390_PREFIX s390 prefix register
NT_S390_LAST_BREAK s390 breaking event address
NT_S390_SYSTEM_CALL s390 system call restart data
NT_S390_TDB s390 transaction diagnostic block
NT_ARM_VFP ARM VFP/NEON registers
NT_ARM_TLS ARM TLS register
NT_ARM_HW_BREAK ARM hardware breakpoint registers
NT_ARM_HW_WATCH ARM hardware watchpoint registers
NT_ARM_SYSTEM_CALL ARM system call number
n_name = GNU
GNU tool chain的扩展。
NT_GNU_ABI_TAG
操作系统的ABI信息。desc field是4个words的大小:
word 0:操作系统描述(ELF_NOTE_OS_LINUX, ELF_NOTE_OS_GNU,或者其他)
word 1:ABI的major版本
word 2:ABI的minor版本
word 3:ABI的subminor版本
NT_GNU_HWCAP
Synthetic hwcap information.desc field是2个words的大小:
word 0:条目的数量
word 1:按位控制条目的使能
然后跟着变长的条目, one byte followed by a null-terminated hwcap name string.
这个字节可以按位测试是否使能,(1U << bit) & bit mask.
NT_GNU_BUILD_ID
GNU ld生成的独特的build ID --build-id选项。desc由任意非零字节的内容组成。
NT_GNU_GOLD_VERSION
The desc contains the GNU Gold linker version used.
Default/unknown namespace (e_type != ET_CORE)
当namespace是默认值
(也就是n_namesz为0的时候)的时候是有用的。或者当namespace未知的时候作为备份。
NT_VERSION 某种类型的版本字符串
NT_ARCH 架构信息
NOTES
ELF第一次是在System V中出现的。ELF的格式是被采用的标准。
扩展中的e_phnum,e_shnum和e_strndx是linux扩展的。Sun,BSD和AMD也支持它们;进一步的信息请参阅SEE ALSO.
SEE ALSO
as(1), elfedit(1), gdb(1), ld(1), nm(1), objdump(1), readelf(1), size(1), strings(1),
strip(1), execve(2), dl_iterate_phdr(3), core(5)
Hewlett-Packard, Elf-64 Object File Format.
Santa Cruz Operation, System V Application Binary Interface.
UNIX System Laboratories, "Object Files", Executable and Linking Format (ELF).
Sun Microsystems, Linker and Libraries Guide.
AMD64 ABI Draft, System V Application Binary Interface AMD64 Architecture Processor Supplement.
COLOPHON
这是Linux的4.15release版本的man-pages版本。网址是:https://www.kernel.org/doc/man-pages/
2017-09-15
到目前为止翻译结束,里面由很多不尽如人意的地方,有一些还是直接粘贴的翻译。我对ELF的研究也不是很深入,暂时也只能做到这个样子了。希望读者理解。水平一般,能力有限。翻译工作比我想象的要困难很多。
2019年4月5日 清明 公司
8——man elf的翻译——Notes (Nhdr)相关推荐
- elf文件格式实例解析
试验环境:archlinux 速龙3000+(即x86兼容32位处理器) 必须软件:gcc binutils 参考资料: System V application binary interface E ...
- java基础初步总结
2012年3月6日 第一章 由于下载视频看视频速度较慢,所以决定以疯狂JAVA讲义为主线,20天内完成,大致一个学习天一章. Python.Ruby都是非常敏捷的语言,对付中小企业开发自有一套手法.但 ...
- pstack学习笔记
################################################################################ pstack学习笔记 v0.1 201 ...
- linux的静态编译elf无法调试,[翻译]自己动手编写一个Linux调试器系列之4 ELF文件格式与DWARF调试格式 by lantie@15PB...
自己动手编写一个Linux调试器系列之4 ELF文件格式与DWARF调试格式 by lantie@15PB 在上一节中,你已经听说了DWARF调试格式,它是程序的调试信息,是一种可以更好理解源码的方式 ...
- ArduPilot Copter Release Notes 中文翻译
ArduPilot Copter Release Notes: ------------------------------------------------------------------ C ...
- Go 1.19 发行说明(翻译)
文章目录 1.Go 1.19 简介 2.语言的变化 3.内存模型 4.端口 4.1 LoongArch 64-bit 4.2 RISC-V 5.工具 5.1 文档评论 5.2 新的 unix 构建约束 ...
- 链接脚本(Linker Scripts)语法和规则解析(翻译自官方手册)
原链接:链接脚本(Linker Scripts)语法和规则解析(翻译自官方手册)_BSP-路人甲的博客-CSDN博客_链接脚本语法 为了便于与英文原文对照学习与理解(部分翻译可能不准确),本文中的每个 ...
- Notes Twenty-fourth days-渗透攻击-红队-红队自研
** Notes Twenty-fourth days-渗透攻击-红队-权限提升(dayu) ** 作者:大余 时间:2020-10-10 请注意:对于所有笔记中复现的这些终端或者服务器,都是自行搭建 ...
- Notes twenty-sixth days-渗透攻击-红队-红队案例
** Notes twenty-sixth days-渗透攻击-红队-工具优化分享(dayu) ** 作者:大余 时间:2020-10-10 请注意:对于所有笔记中复现的这些终端或者服务器,都是自行搭 ...
最新文章
- 本来调试无误的程序在真机运行时报标题错误解决方案
- 人工智能到来的时代,你曾经瞧不起的职业,可能会非常吃香!
- JavaWeb:HttpServletResponse和HttpServletRequest
- IDC预测2014年9个趋势
- org.hibernate.service.ServiceRegistryBuilder被弃用
- spring配置文件-------通配符
- 人工智能工程师需具备的技能_2020年软件测试工程师需要具备的技能--需要学什么--面试题有哪些(灵魂拷问)...
- 金融业务数字化,用户体验和安全防护双重挑战,你该怎么办?
- ANDROID PAD版本号 PHONE版本号 源代码有什么 差别?
- ajax 实时进度_三分钟搭建websocket实时在线聊天,项目经理也不敢这么写
- php数组是否存在数组,php判断数组中是否存在某值
- SQL Server数据库的查询语句
- 简单的Django项目
- 对抗神经网络(Adversarial Nets)的介绍[1]
- java 图片压缩 base64,图片的尺寸 大小压缩 和转化为base64
- 2018/9/27---高质量SCI论文撰写方法以及ESI引用经验交流 韩光洁教授(大连理工)
- 2022备赛蓝桥杯给大家的建议与提醒和资料,值得认真看一下,多拿几十分
- 安卓手机阅读器_手机屏幕太伤眼睛,墨水屏才是喜欢阅读人士的最爱
- 逗号表达式与赋值语句
- 无线路由高级设置 虚拟服务器及DMZ主机
热门文章
- 面试官:谈谈你对加班的看法?学妹是这样巧妙回答的.....
- 清软英泰plm服务器安装文档,云服务器安装模板
- 燕山大学计算机专业学科评估,第四轮学科评估,河北省122个学科上榜,燕山大学表现最佳...
- JAVA计算机毕业设计学校旧书交易网站计算机(附源码、数据库)
- 论文参考文献引用和自动更新方法
- 知名评测软件 3DMark 推送了更新,为 PC 端带来全新的 CPU 跑分工具“CPU Profile”
- NIPS2017 GNN GraphSAGE 论文解读
- 2021 开门红,中国成功发射天通一号 03 星
- 灰色个人简历自我介绍PPT模板
- python三角函数与计算器三角函数结果差异