Linux可执行。豫
yuyan · 57 行 · 4861 字节 · UTF-8
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57
寻观「标准库」之书。
寻观「标准库」之「数据结构」之「字节串」之书。
寻观「编译器核心」之「网页汇编核心」之「状态模块」之书。
寻观「裸机后端」之「降级目标」之书。
寻观「裸机后端」之「存储镜像」之书。
寻观「裸机后端」之「链接格式写出」之书。
寻观「裸机后端」之「机器编码」之书。
寻观「编译器核心」之「网页汇编核心」之「二进制生成」之书。
寻观「裸机后端」之「降级公用」之书。
「:文言:Linux 之可执行:以 Linux 目标降其模块为用户之载,映于与裸机同址之域,入口即用户代码之始。载之后至栈顶,余静态线性区、传参暂存与栈,皆由内核以零填之。汉语:生成 Linux 静态可执行文件(ELF64,无动态链接):以 Linux 目标把整数 Wasm 状态模块降级为用户载荷(与裸机相同的布局:代码、元数据、页数、初始线性内存),作为一个可读写执行的载入段映射到用户区起址,入口就是用户代码起址。载荷之后到用户栈顶的部分(其余静态线性区、传参暂存与栈)由内核零填充;超过八页的线性内存由入口代码另行 mmap。臂为真生成 ARM64,否则 x86-64。:」
「:文言:代码大(如预编之程序)而逾用户区者,代码别为一段:臂居 0x10000000,兼容居 0x50000000;数据仍居名义之址。代码唯以相对之跳互达,与数据以绝对之名义址相通,故易其所居而码不变。汉语:代码太大(例如预编后的程序,放不进用户区里数据段之前的空间)时,代码单独放一个可读可执行的载入段:ARM64 在 0x10000000,x86-64 在 0x50000000(避开 x86-64 的动态区 0x8000000 起的 1 GiB);数据(元数据、页数、线性内存直到栈顶)仍在原名义地址,单独一个可读写段。代码之间只有相对跳转,访问数据用绝对名义地址,所以挪动代码位置不改变代码字节。:」
「Linux代码基址」乃化「爻」而「整数」也。
「Linux代码基址」者会「臂」而
若「臂」则「二六八四三五四五六」否则「一三四二一七七二八零」
也。
「生成Linux可执行」乃化「爻」而化「网页状态模块」而「字节串」也。
「生成Linux可执行」者会「臂」而会「状态」而
虑「标」者「Linux目标」于「臂」而
虑「部」者「目标用户载荷部件」于「标」于「状态」于「阴」而
虑「基」者「目标用户基址」于「标」而
虑「代码」者「部」中「零」而
虑「段偏移」者「部」中「一」而
若「不大于」于(「字节串长度」于「代码」)于「段偏移」则
虑「用户」者「定位拼合」于「零」于(「列」【「零」与「代码」,「段偏移」与(「部」中「二」)】)而
「生成链接格式可执行」
于「臂」
于「基」
于(「列」【「载入段」于「基」于「用户」于(「减」于(「目标栈顶」于「标」)于「基」)于「七」】)
否则
虑「代码基」者「Linux代码基址」于「臂」而
虑「数据基」者「加」于「基」于「段偏移」而
虑「代码段」者「载入段」于「代码基」于「代码」于(「字节串长度」于「代码」)于「五」而
虑「数据段」者
「载入段」于「数据基」于(「部」中「二」)于(「减」于(「目标栈顶」于「标」)于「数据基」)于「六」
而
「生成链接格式可执行」
于「臂」
于「代码基」
于(若「臂」则「列」【「代码段」,「数据段」】否则「列」【「数据段」,「代码段」】)
也。
「:文言:带尾块之 Linux 可执行:块附文件之末,后随十六字节之尾标(“YUYANMOD”与八字节之长)。汉语:带尾块的 Linux 可执行文件:块直接附在文件末尾,最后 16 字节是尾标(“YUYANMOD”加 8 字节长度);执行器读自己文件的最后 16 字节找到它。块不属于任何载入段。:」
「生成Linux可执行带块」乃化「爻」而化「网页状态模块」而化「字节串」而「字节串」也。
「生成Linux可执行带块」者会「臂」而会「状态」而会「块」而
虑「本」者「生成Linux可执行」于「臂」于「状态」而
若「等于」于(「字节串长度」于「块」)于「零」则
「本」
否则
「网页拼字节」于(「列」【
「本」,
「块」,
「字符串转字节串」于『YUYANMOD』,
「小端字节」于「八」于(「字节串长度」于「块」)
】)
也。