原生开读
公开化「整数」而「整数」
文言:原生宿主之装载:执行器未嵌客体者,以首参为模块之径,读之于动态区之首,如大程序然;程序名易为此径,首参去之。于是同一执行器,或嵌客体而为独立之可执行文件,或受 .wasm 之径而为原生之宿主。汉语:原生宿主形态的装载:执行器里没有嵌入客体模块(状态_模块长 为 0)时,把第一个命令行参数当作 .wasm 模块路径,读进动态区开头(与运行磁盘上的大程序相同:置 状态_主程序大,解析模块把模块址设为 区域起),程序名改为这个路径,并从参数中去掉它。这样同一份执行器既可以嵌入客体成为独立可执行文件,也可以作为原生宿主运行任意 .wasm:`yy原生宿主 程序.wasm 参数…`。打不开或太大时打印原因并以 127 退出。
原生文件长
公开化「整数」而化「整数」而「整数」
文言:文件之长:苹果以 fstat(st_size 在九十六),Linux 以 statx(stx_size 在四十)。汉语:已打开文件的长度(低 32 位):macOS 用 fstat(st_size 在 96),Linux 用 statx 加 AT_EMPTY_PATH(stx_size 在 40);出错返回 -1。
原生读满
公开化「整数」而化「整数」而化「整数」而化「整数」而「整数」
暂无说明。
原生装载失败
公开化「整数」而「有」
暂无说明。
原生定读
公开化「整数」而化「整数」而化「整数」而化「整数」而「整数」
文言:定位之读:苹果以 pread,Linux 以 pread64。汉语:按偏移读(macOS pread,Linux pread64),偏移只用低 32 位。
原生定读满
公开化「整数」而化「整数」而化「整数」而化「整数」而化「整数」而「整数」
暂无说明。
原生苹尾偏
公开化「整数」而化「整数」而化「整数」而「整数」
文言:苹果之尾标所在:解 Mach-O 之首,寻 LC_CODE_SIGNATURE(二十九),尾标终于其 dataoff。汉语:macOS 可执行文件里尾标的位置:读文件开头 4 KiB,逐条看加载命令(第 16 字节起是命令数,命令从第 32 字节开始),找到 LC_CODE_SIGNATURE(29)后,尾标结束于它的 dataoff;找不到返回 -1。
原生装载内嵌
公开化「整数」而「爻」
文言:可执行文件自带之模块:尾标为“YUYANMOD”加八字节之长,模块居其前。Linux 之尾标在文件之末,苹果之尾标终于签名之始。得之则读入动态区之首如大程序。汉语:读取可执行文件自带的模块(预编的大程序用,见 马赫格式写出 与 Linux可执行 的尾块):尾标是 16 字节(“YUYANMOD”加 8 字节长度),模块紧挨在尾标之前;Linux 的尾标在文件末尾,macOS 的尾标结束于代码签名的起点。找到就像磁盘上的大程序一样读进动态区开头并置 状态_主程序大,返回阳;没有尾标返回阴。
原生自身路径
公开化「有」而「整数」
文言:自身之径:程序名区之径,补零于送程序名区。汉语:可执行文件自身的路径:程序名区里的路径(Linux 是 /proc/self/exe 的目标,macOS 是 exec 时的路径)拷到送程序名区并补结尾零。
原生装载程序
公开化「有」而「有」
暂无说明。