汇编语言转换成C语言软件_archlinux

汇编语言转换成C语言软件_archlinux从ARMv8-A开始出现了64位的ARM指令集:Aarch64。

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

从ARMv8-A开始出现了64位的ARM指令集, ARM官方将64位的ARM指令集叫做Aarch64

Aarch64汇编中寄存器

Aarch64微处理器中,程序员可以使用31个64位的通用寄存器x0 ~ x30,堆栈指针寄存器sp,指令指针寄存器pc。也可以只使用这些通用寄存器中的低32位,即w0~w30,wsp。ARM遵循ATPCS规则,Aarch64汇编语言函数前8个参数使用x0-x7寄存器(或w0-w7寄存器)传递,多于8个的参数均通过堆栈传递,并且返回值通过x0寄存器(或w0寄存器)返回
在使用软中断进行系统调时,系统调用号通过x8寄存器传递,用svc指令产生软中断,实现从用户模式到管理模式的切换。例如:

mov x0, 123 // exit code
mov x8, 93  // sys_exit() is at index 93 in kernel functions table
svc #0      // generate kernel call sys_exit(123);

关于系统调用syscall的系统调用号索引可以查看这里

https://elixir.bootlin.com/linux/latest/source/arch/sh/include/uapi/asm/unistd_64.h

Aarch64汇编语言

Aarch64汇编指令集所有指令的长度固定,每条指令是4字节(32位宽度),并且没有Thumb指令集。

访存指令

ARM32中的LDM、STM、PUSH、POP指令,在Aarch64中并不存在。取而代之的是LDP、STP指令,如一般在函数开头用来代替PUSH.
例如,用IDA Pro逆向的某个Aarch64SO库函数的开头和结尾:

STP      X24, X23, [SP,#var_40]!
STP      X22, X21, [SP,#0x40+var_30]
STP      X20, X19, [SP,#0x40+var_20]
STP      X29, X30, [SP,#0x40+var_10]
ADD      X29, SP, #0x40+var_10
....
SUB      SP, X29, #0x30
LDP      X29, X30, [SP,#0x150+var_120]
LDP      X20, X19, [SP,#0x150+var_130]
LDP      X22, X21, [SP,#0x150+var_140]
LDP      X24, X23, [SP+0x150+var_150],#0x40
RET

参考文献

arm64汇编语言
Wiki ARM Architecture
Aarch64 Register and Instruction Quick Start
ARM The Architecture for the Digital World
浅析基于ARM的Linux下的系统调用的实现

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/181229.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • javascript 数组复制「建议收藏」

    javascript 数组复制「建议收藏」javascript数组复制数组不能直接等于一个数组例如vararr=arr1数组是内置对象,存储的是数组的地址,这样复制就等于复制了地址,更改一个数组的值,另一个也会更改复制方法slice()数组截取vararr=[1,2,3]vararr2=arr.splice();…

    2022年7月14日
    17
  • CAP 定理

    CAP 定理CAP定理(CAPtheorem)又被称作布鲁尔定理(Brewer'stheorem),是加州大学伯克利分校的计算机科学家埃里克·布鲁尔(EricBrewer)在2000

    2022年7月4日
    23
  • 卓越性能 の 军火库「建议收藏」

    卓越性能 の 军火库「建议收藏」在介绍性能优化的军火库之前,先来扯几句题外话。希望这些题外话,能打消你追求卓越性能的理想,来甘心当一枚圆滑的钉子。我是非常不推荐程序员,对公司的业务,进行性能优化的。说这话,纯粹是基于个人自身安全考虑。因为性能优化,在大多数公司,属于费力不讨好的工作项。追求极简的代码,性能卓越的代码,是有追求的程序员的目标。但随着经历了大大小小的公司,我发现很多优秀的程序员,在经受着这种追求的反嗜,以至于痛不欲生。下有下面几点原因,虽然我们知道它肯定是错的,但我们无能无力:公司按照完成的功能,对程序员…

    2022年9月30日
    4
  • ESET NOD32

    ESET NOD32ESET NOD32是由ESET发明设计的杀毒防毒软件。ESET,于1992年建立,是一个全球性的安全防范软件公司,主要为企业和个人消费者提供服务。其得奖之旗舰产品 NOD32 能针对已知及未知的病毒,间谍软件(SPYWARE)及其它对用户系统带来威胁的程式进行实时的保护。  For Home   ESETNOD32Antivirus11https://download….

    2022年6月22日
    47
  • RTSP协议解析_RTP协议

    RTSP协议解析_RTP协议RTSP被用于建立的控制媒体流的传输,它为多媒体服务扮演“网络远程控制”的角色。尽管有时可以把RTSP控制信息和媒体数据流交织在一起传送,但一般情况RTSP本身并不用于转送媒体流数据。媒体数据的传送可通过RTP/RTCP等协议来完成。一次基本的RTSP操作过程是:首先,客户端连接到流服务器并发送一个RTSP描述命令(DESCRIBE)。流服务器通过一个SDP描述来进行反馈,反馈信息包括流数

    2025年6月12日
    4
  • 一个汉字占多少个字节?_字符和字节的关系

    一个汉字占多少个字节?_字符和字节的关系一个汉字占多少个字节不同编码方式1个英文字母占的字节是不同的:1,ASCII码:一个英文字母(不分大小写)占一个字节的空间,一个中文汉字占两个字节的空间。2,UTF-8编码:一个英文字符等于一个字节,一个中文(含繁体)等于三个字节。中文标点占三个字节,英文标点占一个字节3,Unicode编码:一个英文等于两个字节,一个中文(含繁体)等于两个字节。中文标点占两个字节,英文标点占两个字节…

    2025年5月27日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号