豫豫言文档API ATLAS
入口包说明.html
97 模块899 名称
← 全部模块

模块 / 74

臂降级原语。豫

臂降级原语。豫

62公开名称

臂虚拟寄存器数

公开
「整数」

文言:此层备寄存器降级所需之臂原语,寄存器号皆物理号。汉语:ARM64 原语。通用条件码零至九依次是 相等 不等 有符号小于 有符号大等 有符号大于 有符号小等 无符号小于 无符号大等 无符号大于 无符号小等,奇偶相邻互为取反。物理寄存器约定:x19 至 x24、x26、x27 保存虚拟操作数栈,由被调用者保存;x25 是全局基址,x28 是线性内存基址,x15 是线性内存当前字节数(苹果与视窗的 ARM64 保留 x18,故不用之),三者由入口设置后不再保存;x9 至 x13 是临时寄存器;x0 至 x7 传参,x0 返回。

臂虚拟寄存器

公开
化「整数」而「整数」

暂无说明。

臂条件

公开
化「整数」而「整数」

暂无说明。

臂条件类

公开
化「整数」而「整数」

暂无说明。

臂原移

公开
化「整数」而化「整数」而(「列」于「机器片」)

暂无说明。

臂原立即

公开
化「整数」而化「整数」而(「列」于「机器片」)

暂无说明。

臂原载局部

公开
化「整数」而化「整数」而(「列」于「机器片」)

暂无说明。

臂原存局部

公开
化「整数」而化「整数」而(「列」于「机器片」)

暂无说明。

臂原载全局

公开
化「整数」而化「整数」而(「列」于「机器片」)

暂无说明。

臂原存全局

公开
化「整数」而化「整数」而(「列」于「机器片」)

暂无说明。

臂原二元

公开
化「整数」而化「整数」而化「整数」而(「列」于「机器片」)

文言:二元之算,甲为被改者。汉语:操作零加、一减、二与、三或、四异或、五乘,形如 甲 = 甲 op 乙。

臂原二元立

公开
化「整数」而化「整数」而化「整数」而化「整数」而(「列」于「机器片」)

文言:立即数可入码者一令而毕,否则借备用寄存器。汉语:加减用十二位立即数(负值改用另一种运算),与或异或用逻辑立即数,乘总是借备用寄存器。

臂原移位

公开
化「整数」而化「整数」而化「整数」而化「整数」而(「列」于「机器片」)

文言:移位者,位数在寄存器或立即。汉语:操作零左移、一逻辑右移、二算术右移、三循环左移、四循环右移。寄存器形式的循环左移借备用寄存器求补。

臂原移位立

公开
化「整数」而化「整数」而化「整数」而(「列」于「机器片」)

暂无说明。

臂原除

公开
化「整数」而化「整数」而化「整数」而化「字符串」而化「字符串」而化「整数」而(「列」于「机器片」)

文言:除与余,零则陷,有符号除逢最小负数除负一亦陷。汉语:种零有符号除、一无符号除、二有符号余、三无符号余。除数为零先跳陷阱;有符号除若被除数为最小负数且除数为负一也跳陷阱;余数用商乘除数再由被除数减去求得。序标是本次展开内独一的标号。

臂原比较

公开
化「整数」而化「整数」而(「列」于「机器片」)

暂无说明。

臂原比较立

公开
化「整数」而化「整数」而化「整数」而(「列」于「机器片」)

文言:与立即数比较,可入十二位者一令,负一至负四零九五用相加比较,余借备用寄存器。汉语:cmn 与 cmp 对无符号与有符号比较的标志位结果相同,见文档。

臂原置

公开
化「整数」而化「整数」而(「列」于「机器片」)

暂无说明。

臂原跳条件

公开
化「整数」而化「字符串」而(「列」于「机器片」)

暂无说明。

臂原跳条件远

公开
化「整数」而化「字符串」而(「列」于「机器片」)

文言:远之条件跳:条件之分支唯及一兆字节,巨函之中或不及,则以反条件跳过一无条件之跳(及一二八兆字节)。汉语:远距离条件跳转:ARM64 条件分支(b.cond、cbz、cbnz)只能跨 ±1 MiB,很大的函数里可能够不到,改成“反条件跳过下一条(b.!cond +8 / cbnz / cbz)+ 无条件 b 目标(±128 MiB)”。

臂原零跳远

公开
化「整数」而化「字符串」而(「列」于「机器片」)

暂无说明。

臂原非零跳远

公开
化「整数」而化「字符串」而(「列」于「机器片」)

暂无说明。

臂原跳

公开
化「字符串」而(「列」于「机器片」)

暂无说明。

臂原零跳

公开
化「整数」而化「字符串」而(「列」于「机器片」)

暂无说明。

臂原非零跳

公开
化「整数」而化「字符串」而(「列」于「机器片」)

暂无说明。

臂原选择

公开
化「整数」而化「整数」而化「整数」而(「列」于「机器片」)

暂无说明。

臂原有效地址

公开
化「整数」而化「整数」而化「整数」而化「整数」而(「整数」合(「列」于「机器片」))

文言:客存之访,先验其终不逾今界,而后取之。汉语:线性内存读写。地址寄存器 址 中是零扩展的三十二位偏移;有效地址等于它加上静态偏移;访问末端不得超过 x15 中的当前字节数,越界跳转到陷标。种:载入零 i32、一 i8 有符号、二 i8 无符号、三 i16 有符号、四 i16 无符号;存储零 i32、一 i8、二 i16。

臂原边界

公开
化「整数」而化「整数」而化「字符串」而化「整数」而(「列」于「机器片」)

暂无说明。

臂原载内存

公开
化「整数」而化「整数」而化「整数」而化「整数」而化「整数」而化「字符串」而化「整数」而化「整数」而(「列」于「机器片」)

暂无说明。

臂原存内存

公开
化「整数」而化「整数」而化「整数」而化「整数」而化「整数」而化「字符串」而化「整数」而化「整数」而(「列」于「机器片」)

暂无说明。

臂原调用

公开
化「字符串」而(「列」于「机器片」)

暂无说明。

臂原陷阱

公开
化「有」而(「列」于「机器片」)

暂无说明。

臂参数寄数

公开
「整数」

文言:传参逾八者,置于共用之暂存。汉语:前八个参数用 x0 至 x7,其余放在 0x40380000 起的四字节槽,调用者写、被调用者在入口立即取走。

臂装址

公开
化「址式」而化「整数」而化「整数」而(「列」于「机器片」)

文言:装址:绝对者径置常数;相对者置偏移而加全局基址 x25。汉语:把名义地址装入寄存器:绝对模式直接装常数;相对模式装“地址 − 锚”,再加上全局基址 x25(六十四位加法)。

臂原存参

公开
化「址式」而化「整数」而化「整数」而化「整数」而(「列」于「机器片」)

暂无说明。

臂原页数

公开
化「整数」而(「列」于「机器片」)

暂无说明。

臂向上取整

公开
化「整数」而化「整数」而「整数」

暂无说明。

臂局部基

公开
「整数」

文言:帧者,链寄、保存、局部与溢出之区。汉语:帧布局自 sp 向上依次是:x30(占十六字节)、被调用者保存寄存器对(固定预留六十四字节,使局部偏移不随所用寄存器数而变)、局部槽(每个四字节)、操作数栈溢出槽;总大小对齐十六字节。

臂帧大小

公开
化「整数」而化「整数」而「整数」

暂无说明。

臂原调整栈

公开
化「爻」而化「整数」而(「列」于「机器片」)

暂无说明。

臂原保存

公开
化「爻」而化(「列」于「整数」)而化「整数」而(「列」于「机器片」)

暂无说明。

臂原清零局部

公开
化「整数」而化「整数」而(「列」于「机器片」)

暂无说明。

臂原取参

公开
化「址式」而化「整数」而化「整数」而化「整数」而(「列」于「机器片」)

暂无说明。

臂原序言

公开
化「址式」而化「整数」而化「整数」而化「整数」而化(「列」于「整数」)而化「字符串」而(「列」于「机器片」)

文言:序言者,减栈、验界、存链寄与被保存之寄、收参而清余局。汉语:函数入口:sp 减去帧大小;把 sp 与 0x403D0000 比较,低于则陷阱;保存 x30 与被调用者保存寄存器(自 sp+16 起);把参数寄存器和暂存槽中的参数写入局部槽;其余局部清零。守标是本函数内独一的标号。

臂原尾声不返

公开
化「整数」而化(「列」于「整数」)而(「列」于「机器片」)

暂无说明。

臂原尾声

公开
化「整数」而化(「列」于「整数」)而(「列」于「机器片」)

暂无说明。

臂原入口

公开
化「整数」而化「爻」而化「字符串」而化「字符串」而(「列」于「机器片」)

文言:入口者,立诸基寄,呼其始函,毕而报完成。汉语:程序入口:设置线性内存基址 x28、全局基址 x25、当前内存字节数 x15;调用启动函数;探测模式下再读一处内核私有地址(必然缺页,以证隔离);然后以退出码零请求完成服务并自旋。入口标是启动函数的标号。

臂原导入桩

公开
化「整数」而(「列」于「机器片」)

暂无说明。

臂助手们

公开
化「址式」而化「整数」而化「整数」而化「整数」而化「机器片」而(「列」于「机器片」)

文言:线性内存之整批诸术,聚于助手,以共用之码行之;增长逾八页则迁入内核所颁之动态块。汉语:助手函数从 w0、w1、w2(以及 w3)接收参数,只使用 x0 至 x13(增长助手另改线性内存基址 x28 与字节数 x15),不动被调用者保存寄存器。越界一律跳到本助手的陷阱。标号:助手复制、助手填充、助手初始化、助手增长。增长助手:新页数不超过八页仍在静态线性区内增长;超过时请求内核服务二二保证足够的两兆字节块,首次越界时把旧内容复制到动态基址 0x60000000 并改 x28,之后在动态区继续增长;失败返回负一。

臂原助手们

公开
化「整数」而化「整数」而(「列」于「机器片」)

文言:裸机之助手:动态之块求诸内核服务二二。汉语:裸机助手:动态内存块由内核服务二二(内存块)保证。

臂Linux助手们

公开
化「整数」而化「整数」而(「列」于「机器片」)

文言:Linux 之助手:动态之区于入口已映射,故求块恒成,置 w0 为零。汉语:Linux 助手:动态区已在入口用 mmap 映射,求块一律成功,以 movz w0, #0 代替服务调用。

臂Linux入口

公开
化「整数」而化「整数」而化「整数」而化「整数」而化「整数」而化「整数」而化「字符串」而(「列」于「机器片」)

文言:Linux 之入口:栈移于用户之域之顶;线性内存逾八页者,先以 mmap 映动态之区,不成则以码一二五退;次立诸基寄,呼启动之函,毕以 exit_group 零退。汉语:Linux 程序入口:把 sp 设为用户区栈顶(0x40400000,函数序言的栈界检查照旧有效);若线性内存容量超过八页,先用 mmap(MAP_PRIVATE|MAP_ANONYMOUS|MAP_FIXED|MAP_NORESERVE,可读写)映射动态区,返回地址不符则以退出码 125 结束;然后设置 x28、x25、x15,调用启动函数,最后 exit_group(0)。

臂Linux导入桩

公开
化「整数」而化(「列」于「整数」)而(「列」于「机器片」)

文言:Linux 之导入桩:诸参先零扩为六十四位,址类者加线性基址;x8 置调用之号,svc 零,返。汉语:Linux 导入桩:每个参数先零扩展(mov wN, wN),地址类参数再加上线性内存基址 x28;x8 设为系统调用号,svc #0,返回。系统调用的返回值在 x0,其低三十二位即导入的结果。

臂原存零

公开
化「址式」而化「整数」而化「整数」而(「列」于「机器片」)

暂无说明。

臂苹果助手们

公开
化「址式」而化「整数」而化「整数」而化「整数」而(「列」于「机器片」)

文言:苹果之助手:动态之区在数据段内,已随映像而映,求块恒成;诸址皆以全局基址为锚。汉语:macOS 助手:动态区是数据段里预留的零填充区,随映像一起映射,求块一律成功(movz w0, #0);页数地址与动态基址都按相对址式以全局基址 x25 为锚。

臂苹果入口

公开
化「址式」而化「整数」而化「整数」而化「整数」而化「整数」而化「字符串」而(「列」于「机器片」)

文言:苹果之入口:dyld 以常法呼之,故先存被保存之寄与链寄于原栈;以 adr 取代码之始,加锚距得全局基址;移栈于数据段内之用户栈,立诸基寄,呼启动之函;毕则复原栈与诸寄,返零于 dyld。汉语:macOS 程序入口(LC_MAIN,由 dyld 按标准调用约定调用):第一条指令 adr x9, #0 取得代码起址;先在原栈保存 x19 至 x30(x19 另记原栈指针);x25 = 代码起址 + 锚距(锚距由目标描述算出,映像滑动不影响它);sp 移到数据段里的用户栈顶,x28、x15 按相对址式装入;调用启动函数;返回后恢复原栈与各寄存器,返回 0,由 dyld 调用 exit。

臂苹果参准备

公开
化「整数」而化「整数」而(「列」于「机器片」)

文言:苹果之参:零整数、一线性之址、二有符号之整数、三可变之整数、四可变之址。可变者依苹果 ARM64 之约置于栈,每参八字节。汉语:macOS 导入参数的类别:0 整数(零扩展)、1 线性内存地址(加 x28)、2 有符号整数(sxtw)、3 可变参数中的整数、4 可变参数中的地址。按 Apple ARM64 的约定,可变参数不走寄存器而放在调用时的栈顶,每个占 8 字节(如 openat 与 fcntl 的第三参、ioctl 的地址参数)。

臂苹果可变序们

公开
化(「列」于「整数」)而(「列」于「整数」)

暂无说明。

臂苹果可变区

公开
化(「列」于「整数」)而「整数」

暂无说明。

臂苹果可变入栈

公开
化(「列」于「整数」)而(「列」于「机器片」)

文言:可变之参入栈:减栈而逐一存之。汉语:可变参数入栈:sp 减去对齐到 16 的区域,再把第 j 个可变参数存到 [sp + 8j];没有可变参数时不生成指令。

臂苹果可变出栈

公开
化(「列」于「整数」)而(「列」于「机器片」)

暂无说明。

臂苹果导入桩

公开
化「址式」而化「整数」而化(「列」于「整数」)而化「整数」而化「字符串」而(「列」于「机器片」)

文言:苹果之导入桩:先存 x15 与链寄;诸参零扩,址类者加线性基址;自导入槽取 libSystem 函数之址而呼之;返负一者,呼 ___error 取 errno,返其负;毕复 x15 与链寄。汉语:macOS 导入桩:先保存 x15(线性内存字节数,libSystem 函数可能改写)与 x30;每个参数零扩展,地址类再加线性内存基址 x28;从导入槽(dyld 按绑定信息写入的指针,地址按相对址式求得)取函数地址,blr 调用;若需转错且返回 -1,再经 ___error 的槽取 errno 并返回其相反数(与 Linux 的 -errno 一致);最后恢复 x15 与 x30 并返回。毕标是本桩内独一的标号。