Linux代码基址
公开化「爻」而「整数」文言:Linux 之可执行:以 Linux 目标降其模块为用户之载,映于与裸机同址之域,入口即用户代码之始。载之后至栈顶,余静态线性区、传参暂存与栈,皆由内核以零填之。汉语:生成 Linux 静态可执行文件(ELF64,无动态链接):以 Linux 目标把整数 Wasm 状态模块降级为用户载荷(与裸机相同的布局:代码、元数据、页数、初始线性内存),作为一个可读写执行的载入段映射到用户区起址,入口就是用户代码起址。载荷之后到用户栈顶的部分(其余静态线性区、传参暂存与栈)由内核零填充;超过八页的线性内存由入口代码另行 mmap。臂为真生成 ARM64,否则 x86-64。 文言:代码大(如预编之程序)而逾用户区者,代码别为一段:臂居 0x10000000,兼容居 0x50000000;数据仍居名义之址。代码唯以相对之跳互达,与数据以绝对之名义址相通,故易其所居而码不变。汉语:代码太大(例如预编后的程序,放不进用户区里数据段之前的空间)时,代码单独放一个可读可执行的载入段:ARM64 在 0x10000000,x86-64 在 0x50000000(避开 x86-64 的动态区 0x8000000 起的 1 GiB);数据(元数据、页数、线性内存直到栈顶)仍在原名义地址,单独一个可读写段。代码之间只有相对跳转,访问数据用绝对名义地址,所以挪动代码位置不改变代码字节。