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)相关推荐

  1. elf文件格式实例解析

    试验环境:archlinux 速龙3000+(即x86兼容32位处理器) 必须软件:gcc binutils 参考资料: System V application binary interface E ...

  2. java基础初步总结

    2012年3月6日 第一章 由于下载视频看视频速度较慢,所以决定以疯狂JAVA讲义为主线,20天内完成,大致一个学习天一章. Python.Ruby都是非常敏捷的语言,对付中小企业开发自有一套手法.但 ...

  3. pstack学习笔记

    ################################################################################ pstack学习笔记 v0.1 201 ...

  4. linux的静态编译elf无法调试,[翻译]自己动手编写一个Linux调试器系列之4 ELF文件格式与DWARF调试格式 by lantie@15PB...

    自己动手编写一个Linux调试器系列之4 ELF文件格式与DWARF调试格式 by lantie@15PB 在上一节中,你已经听说了DWARF调试格式,它是程序的调试信息,是一种可以更好理解源码的方式 ...

  5. ArduPilot Copter Release Notes 中文翻译

    ArduPilot Copter Release Notes: ------------------------------------------------------------------ C ...

  6. 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 构建约束 ...

  7. 链接脚本(Linker Scripts)语法和规则解析(翻译自官方手册)

    原链接:链接脚本(Linker Scripts)语法和规则解析(翻译自官方手册)_BSP-路人甲的博客-CSDN博客_链接脚本语法 为了便于与英文原文对照学习与理解(部分翻译可能不准确),本文中的每个 ...

  8. Notes Twenty-fourth days-渗透攻击-红队-红队自研

    ** Notes Twenty-fourth days-渗透攻击-红队-权限提升(dayu) ** 作者:大余 时间:2020-10-10 请注意:对于所有笔记中复现的这些终端或者服务器,都是自行搭建 ...

  9. Notes twenty-sixth days-渗透攻击-红队-红队案例

    ** Notes twenty-sixth days-渗透攻击-红队-工具优化分享(dayu) ** 作者:大余 时间:2020-10-10 请注意:对于所有笔记中复现的这些终端或者服务器,都是自行搭 ...

最新文章

  1. 本来调试无误的程序在真机运行时报标题错误解决方案
  2. 人工智能到来的时代,你曾经瞧不起的职业,可能会非常吃香!
  3. JavaWeb:HttpServletResponse和HttpServletRequest
  4. IDC预测2014年9个趋势
  5. org.hibernate.service.ServiceRegistryBuilder被弃用
  6. spring配置文件-------通配符
  7. 人工智能工程师需具备的技能_2020年软件测试工程师需要具备的技能--需要学什么--面试题有哪些(灵魂拷问)...
  8. 金融业务数字化,用户体验和安全防护双重挑战,你该怎么办?
  9. ANDROID PAD版本号 PHONE版本号 源代码有什么 差别?
  10. ajax 实时进度_三分钟搭建websocket实时在线聊天,项目经理也不敢这么写
  11. php数组是否存在数组,php判断数组中是否存在某值
  12. SQL Server数据库的查询语句
  13. 简单的Django项目
  14. 对抗神经网络(Adversarial Nets)的介绍[1]
  15. java 图片压缩 base64,图片的尺寸 大小压缩 和转化为base64
  16. 2018/9/27---高质量SCI论文撰写方法以及ESI引用经验交流 韩光洁教授(大连理工)
  17. 2022备赛蓝桥杯给大家的建议与提醒和资料,值得认真看一下,多拿几十分
  18. 安卓手机阅读器_手机屏幕太伤眼睛,墨水屏才是喜欢阅读人士的最爱
  19. 逗号表达式与赋值语句
  20. 无线路由高级设置 虚拟服务器及DMZ主机

热门文章

  1. 面试官:谈谈你对加班的看法?学妹是这样巧妙回答的.....
  2. 清软英泰plm服务器安装文档,云服务器安装模板
  3. 燕山大学计算机专业学科评估,第四轮学科评估,河北省122个学科上榜,燕山大学表现最佳...
  4. JAVA计算机毕业设计学校旧书交易网站计算机(附源码、数据库)
  5. 论文参考文献引用和自动更新方法
  6. 知名评测软件 3DMark 推送了更新,为 PC 端带来全新的 CPU 跑分工具“CPU Profile”
  7. NIPS2017 GNN GraphSAGE 论文解读
  8. 2021 开门红,中国成功发射天通一号 03 星
  9. 灰色个人简历自我介绍PPT模板
  10. python三角函数与计算器三角函数结果差异