汇编语言转换成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下的系统调用的实现

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 对于思考小端和大端字节顺序

    对于思考小端和大端字节顺序

  • integer constant is too large_unsigned int最大值

    integer constant is too large_unsigned int最大值用Integer存储sina的10位数字的uid,然后出现了input错,我以为Integer存10位数字没问题啊,确实能存10位,但最大值是2147483647,超过就不行了….

  • spssχ2检验_案例实践:SPSS分层卡方检验[通俗易懂]

    spssχ2检验_案例实践:SPSS分层卡方检验[通俗易懂]两个分类变量卡方检验用着爽,但有一点需要强调一下,要不要控制混杂因素的影响,也许在混杂的影响下,卡方检验的结果并不是原先的那个样子,而我们陷入自我欺骗陷阱还不自知。分层卡方检验,则是在普通卡方检验(一般是2×2)基础上增加一个控制混杂的分层变量,让我们的研究更加现实,考虑到多方面的因素,实际上已经算是一种多因素的分析手段了。案例介绍文彤老师SPSS基础教程上有一个不错的案例。某研究调查了口服避孕药…

  • JDBC_5 DBUtils[通俗易懂]

    JDBC_5 DBUtils[通俗易懂]DBUtilscommons-dbutils是Apache组织提供的一个开源JDBC工具类库,封装了针对于数据库的增删改查操作APIQueryRunnerResulSetHandlerDbutils插入举例Connection conn = null; try { QueryRunner runner = new QueryRunner(); conn = JBBCUtils.getConnections3();

  • Android经典完美退出方法

    Android经典完美退出方法,使用单例模式创建一个Activity管理对象,该对象中有一个Activity容器(具体实现自己处理,使用LinkedList等)专门负责存储新开启的每一个Activit

    2021年12月25日
  • 项目管理办法_企业项目管理

    项目管理办法_企业项目管理本文档的目的是为公司各个项目的项目管理工作提供指导,帮助项目组其他成员了解项目管理的要素,明确项目管理活动中的角色职责、协作流程、作业表单格式要求。本文档将规定项目管理中各角色的职责和权利,在进行协作

发表回复

您的电子邮箱地址不会被公开。

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