2019.9.5
# 前沿

在Wine的loader/preloader.c开头注释里提示可以看linux内核代码fs/binfmt_elf.c来学习ELF格式,于是从linux kernerl achives下载了目前稳定版(5.2.11)的linux内核。

fs/binfmt_elf.c开头的注释提示我ELF格式可以查阅《UNIX SYSTEM V RELEASE 4 Programmers Guide: Ansi C and Programming Support Tool》,要收费的~~垃圾~~。还不如Wikipedia上引用的内容

Executable and Linking Format (ELF) Specification

Book I

:Book I介绍的全是通用结构的定义,至于这些结构被操作系统如何运用的,需要看Book III

这是一种叫ELF的object文件格式,ELF主要有3类,

  1. relocatable,用于链接,链接后可以生成executable或shared;
  2. executable,字面意思;
  3. shared,有2种用法,
    1. 和relocatable链接,
    2. 和executable动态链接。

1_1_object_file_format

2019.9.6
### Book III

Study of ELF loading and relocs

基本把上面那个文件Executable and Linking Format (ELF) Specification看了,还是不知道为什么helloworld在内存里的地址和elf中指定的地址不一样,但是wine64的是一样的。于是在wikipedia上找到了这篇文章。