豫言源码浏览器 / Source Browser

浏览项目文件与源码

yuyan · 227 行 · 13674 字节 · UTF-8
§
寻观「标准库」之书。
寻观「标准库」之「数据结构」之「字节串」之书。
寻观「编译器核心」之「网页汇编核心」之「二进制生成」之书。
寻观「裸机后端」之「机器编码」之书。

「:文言:链接格式者,Linux 所载之可执行文件也;此写静态之形,无动态链接,无节表。汉语:ELF64 写出器:生成 Linux 可直接执行的静态可执行文件(ET_EXEC、非位置无关、无动态链接、无节表)。每个载入段按给定虚址映射,文件内容可短于内存大小,余下部分由内核零填充。:」

「:文言:段者,虚址、内容、内存之大、权也。权以读四、写二、执行一相加。汉语:载入段:虚拟地址、文件内容、内存大小(不小于内容长度)、权限位(读 4、写 2、执行 1,与 ELF 的 p_flags 相同)。:」
「链接格式段」立「元类型」也。
  「载入段」立化「整数」而化「字节串」而化「整数」而化「整数」而「链接格式段」也。

「链接格式对齐」乃「整数」也。
「:文言:对齐取六万五千五百三十六,页大四千、一万六千、六万五千之核皆可载。汉语:段对齐取 64 KiB,使 4 KiB、16 KiB、64 KiB 页的内核都能映射。:」
「链接格式对齐」者「六五五三六」也。

「链接格式头长」乃「整数」也。
「链接格式头长」者「六四」也。

「链接格式段头长」乃「整数」也。
「链接格式段头长」者「五六」也。

「链接格式段虚址」乃化「链接格式段」而「整数」也。
「链接格式段虚址」者会「段」而
  鉴「段」而
    有「载入段」于「址」于「容」于「大」于「权」则「址」
也。

「链接格式段内容」乃化「链接格式段」而「字节串」也。
「链接格式段内容」者会「段」而
  鉴「段」而
    有「载入段」于「址」于「容」于「大」于「权」则「容」
也。

「链接格式段大小」乃化「链接格式段」而「整数」也。
「链接格式段大小」者会「段」而
  鉴「段」而
    有「载入段」于「址」于「容」于「大」于「权」则「大」
也。

「链接格式段权限」乃化「链接格式段」而「整数」也。
「链接格式段权限」者会「段」而
  鉴「段」而
    有「载入段」于「址」于「容」于「大」于「权」则「权」
也。

「向上对齐」乃化「整数」而化「整数」而「整数」也。
「向上对齐」者会「数」而会「齐」而
  「乘」于(「除以」于(「减」于(「加」于「数」于「齐」)于「一」)于「齐」)于「齐」
也。

「:文言:内容所居之偏,须与虚址同余于对齐。汉语:给内容选文件偏移:不小于游标,且与虚址对对齐取余相同(ELF 要求 p_offset ≡ p_vaddr mod p_align)。:」
「链接格式同余偏移」乃化「整数」而化「整数」而「整数」也。
「链接格式同余偏移」者会「游标」而会「址」而
  虑「余」者「整数余数」于「址」于「链接格式对齐」而
  虑「底」者
    「加」于(「乘」于(「除以」于「游标」于「链接格式对齐」)于「链接格式对齐」)于「余」而
  若「小于」于「底」于「游标」则
    「加」于「底」于「链接格式对齐」
  否则
    「底」
也。

「:文言:逐段定偏移;无内容之段不占文件,偏移取同余之最小者。汉语:依次为每段确定文件偏移,返回偏移列表与文件总长。无内容的段不占文件字节,偏移取与虚址同余的最小值。:」
「链接格式布局」乃
  化「整数」而
  化(「列」于「链接格式段」)而
  ((「列」于「整数」)合「整数」)
也。
「链接格式布局」者会「游标」而会「段们」而
  鉴「段们」而
    有「罄」则(「罄」授以「整数」)与「游标」
    或有「缀」于「段」于「余」则(
      虑「长」者「字节串长度」于(「链接格式段内容」于「段」)而
      若「等于」于「长」于「零」则(
        虑「后」者「链接格式布局」于「游标」于「余」而
        (「缀」授以「整数」于(「整数余数」于(「链接格式段虚址」于「段」)于「链接格式对齐」)于(「后」中「零」))
          与(「后」中「一」)
      )
      否则
        (
          虑「偏」者
            「链接格式同余偏移」于「游标」于(「链接格式段虚址」于「段」)
          而
          虑「后」者「链接格式布局」于(「加」于「偏」于「长」)于「余」而
          (「缀」授以「整数」于「偏」于(「后」中「零」))与(「后」中「一」)
        )
    )
也。

「:文言:段头五十六字节:类、权、偏、虚址、实址、文件长、内存长、对齐。汉语:生成一个 PT_LOAD 程序头(56 字节)。:」
「链接格式载入头」乃化「链接格式段」而化「整数」而「字节串」也。
「链接格式载入头」者会「段」而会「偏」而
  虑「址」者「链接格式段虚址」于「段」而
  虑「长」者「字节串长度」于(「链接格式段内容」于「段」)而
  虑「大」者「链接格式段大小」于「段」而
  虑「检」者
    若「小于」于「大」于「长」则「发生事故」授以「有」
    于『载入段的内存大小小于内容长度』
    否则
      「元」
  而
  「网页拼字节」于(「列」【
    「小端字节」于「四」于「一」,
    「小端字节」于「四」于(「链接格式段权限」于「段」),
    「小端字节」于「八」于「偏」,
    「小端字节」于「八」于「址」,
    「小端字节」于「八」于「址」,
    「小端字节」于「八」于「长」,
    「小端字节」于「八」于「大」,
    「小端字节」于「八」于「链接格式对齐」
  】)
也。

「:文言:栈不可执行之标,其类为 GNU 栈。汉语:PT_GNU_STACK 程序头:声明进程栈可读写、不可执行。:」
「链接格式栈头」乃化「有」而「字节串」也。
「链接格式栈头」者会「无」而
  「网页拼字节」于(「列」【
    「小端字节」于「四」于「一六八五三八二四八一」,
    「小端字节」于「四」于「六」,
    「零字节」于「四零」,
    「小端字节」于「八」于「一六」
  】)
也。

「:文言:文件之首六十四字节:魔数、六十四位、小端、版本,可执行之类,机器号,入口,段头之偏与数。汉语:ELF 文件头(64 字节)。臂为 EM_AARCH64(183),否则 EM_X86_64(62)。:」
「链接格式文件头」乃化「爻」而化「整数」而化「整数」而「字节串」也。
「链接格式文件头」者会「臂」而会「入口」而会「段头数」而
  「网页拼字节」于(「列」【
    「网页拼字节」于(「态射」授以「整数」授以「字节串」
      于(「列」【「一二七」,「六九」,「七六」,「七零」,「二」,「一」,「一」,「零」】)于「单字节串」),
      「零字节」于「八」,
      「小端字节」于「二」于「二」,
      「小端字节」于「二」于(若「臂」则「一八三」否则「六二」),
      「小端字节」于「四」于「一」,
      「小端字节」于「八」于「入口」,
      「小端字节」于「八」于「链接格式头长」,
      「小端字节」于「八」于「零」,
      「小端字节」于「四」于「零」,
      「小端字节」于「二」于「链接格式头长」,
      「小端字节」于「二」于「链接格式段头长」,
      「小端字节」于「二」于「段头数」,
      「小端字节」于「二」于「六四」,
      「小端字节」于「二」于「零」,
      「小端字节」于「二」于「零」
  】)
也。

「:文言:诸段须依虚址升序,前段之末不逾后段之始;首段之下须留六万五千五百三十六以置头段。汉语:检查各段按虚址升序且互不重叠,最低段虚址不低于 128 KiB(其下 64 KiB 放头段)。:」
「链接格式检段」乃化「整数」而化(「列」于「链接格式段」)而「有」也。
「链接格式检段」者会「下界」而会「段们」而
  鉴「段们」而
    有「罄」则「元」
    或有「缀」于「段」于「余」则(
      若「小于」于(「链接格式段虚址」于「段」)于「下界」则
        「发生事故」授以「有」于『载入段须按虚址升序排列且互不重叠』
      否则
        「链接格式检段」于(「加」于(「链接格式段虚址」于「段」)于(「链接格式段大小」于「段」))于「余」
    )
也。

「:文言:成可执行之文件:头、头段、诸段头、栈头,然后依偏移置诸段之内容。头段者,映文件之首于最低段之下六万五千五百三十六处,只读;诸装载器多求首个载入段起于文件偏移零。汉语:生成完整的静态可执行文件:文件头、一个头段(把文件开头的文件头与程序头只读映射到最低段之下 64 KiB 处;不少装载器要求第一个 PT_LOAD 的文件偏移为零)、每段一个 PT_LOAD 程序头、一个 PT_GNU_STACK 程序头,再把各段内容放到布局算出的偏移处。各段须按虚址升序且互不重叠,内容与内存大小由调用方给定。:」
「生成链接格式可执行」乃
  化「爻」而
  化「整数」而
  化(「列」于「链接格式段」)而
  「字节串」
也。
「生成链接格式可执行」者会「臂」而会「入口」而会「段们」而
  虑「段数」者「长度」授以「链接格式段」于「段们」而
  虑「首址」者
    (
      鉴「段们」而
        有「罄」则「发生事故」授以「整数」
        于『可执行文件至少要有一个载入段』
        或有「缀」于「段」于「余」则
          「链接格式段虚址」于「段」
    )
  而
  虑「界」者「链接格式检段」于「一三一零七二」于「段们」而
  虑「头长」者
    「加」于「链接格式头长」于(「乘」于「链接格式段头长」于(「加」于「段数」于「二」))而
  「:文言:头段居首段所在对齐块之前一块:首段之址未必对齐(如 x86 预编之数据段),头段以文件偏移零映之,其虚址必对齐,否则映射不合(EINVAL)。汉语:头段放在首段所在的 64 KiB 对齐块的前一块:首段地址不一定对齐(例如 x86-64 预编程序的数据段),而头段从文件偏移 0 映射,虚址必须对齐,否则 mmap 返回 EINVAL(Rosetta 报 failed to mmap segment: 22)。首段地址对齐时与原来相同。:」
  虑「头段」者
    「载入段」
      于(「减」于(「乘」于(「除以」于「首址」于「链接格式对齐」)于「链接格式对齐」)于「链接格式对齐」)
      于(「空字节串」于「元」)于「头长」于「四」
  而
  虑「布」者「链接格式布局」于「头长」于「段们」而
  虑「偏们」者「布」中「零」而
  虑「头们」者
    「网页拼字节」于(「态射」授以「整数」授以「字节串」
      于(「整数范围」于「零」于「段数」)
      于(会「号」而
        「链接格式载入头」
          于(「第N个」授以「链接格式段」于「号」于「段们」)
          于(「第N个」授以「整数」于「号」于「偏们」)))
  而
  虑「头段头」者
    「网页拼字节」于(「列」【
      「小端字节」于「四」于「一」,
      「小端字节」于「四」于「四」,
      「小端字节」于「八」于「零」,
      「小端字节」于「八」于(「链接格式段虚址」于「头段」),
      「小端字节」于「八」于(「链接格式段虚址」于「头段」),
      「小端字节」于「八」于「头长」,
      「小端字节」于「八」于「头长」,
      「小端字节」于「八」于「链接格式对齐」
    】)
  而
  虑「首」者
    「网页拼字节」于(「列」【
      「链接格式文件头」于「臂」于「入口」于(「加」于「段数」于「二」),
      「头段头」,
      「头们」,
      「链接格式栈头」于「元」
    】)而
    虑「片们」者
      「滤」授以(「整数」合「字节串」)
      于(会「项」而「大于」于(「字节串长度」于(「项」中「一」))于「零」)
      于(「态射」授以「整数」授以(「整数」合「字节串」)
      于(「整数范围」于「零」于「段数」)
      于(会「号」而
        (「第N个」授以「整数」于「号」于「偏们」)
          与(「链接格式段内容」于(「第N个」授以「链接格式段」于「号」于「段们」))))
    而
    「定位拼合」于「零」于(「缀」授以(「整数」合「字节串」)于(「零」与「首」)于「片们」)
也。