首页 > 编程语言 >20230813 arm64 汇编学习 helloworld.s

20230813 arm64 汇编学习 helloworld.s

时间:2023-08-14 22:45:03浏览次数:42  
标签:mov helloworld start x8 20230813 64 arm64 linux

Programming with 64-Bit ARM Assembly Language Single Board Computer Development for Raspberry Pi and Mobile Devices —Stephen Smith   32 bits ARM64指令:

//
//Assembly program to print "helloworld" to stdout
//
//x0-x2 parameters to linux function services
//x8    linux function number

.global _start  // program starting address
_start:
        mov x0,1        //1 is linux stdout
        ldr x1,=helloworld      //string to print
        mov x2,13       //length to write to stdout
        mov x8,64       //64 is linux write system call
        svc 0   //call linux to output the string

//setup the parameters to exit the program then call linux to do it
        mov x0,0        //return num
        mov x8,93       //service code 93 terminates
        svc 0

.data
helloworld:     .ascii "Hello World!\n------\n"

echo $?  //获取上个程序的返回值或退出代码

 _start 是程序的入口点,程序可以由很多文件链接,但是只能有一个 _start ;

svc 0 执行软中断0,linux内核中断处理程序寄存器器中的相应内容执行相应处理;

.data 表示后面的内容放在程序的数据段

标签 helloworld: 后面的 .ascii 是编码方式,后面的""内是具体内容;ldr 里面的 =helloworld 就是引用标签 获取内容;

#64 是linux的write 命令,系统调用num放在x8;

逆向,  objdump -s -d helloworld.o

 第一行表示 文件是arm64 小端 elf格式

.text里面是8行汇编代码转化成的8条指令;每个指令是32bit,4byte,一行4个指令,16byte

.data 保存的string

 

 https://github.com/Apress/Programming-with-64-Bit-ARM-Assembly-Language  获取书中源码

 git clone https://github.com/Apress/programming-with-64-bit-ARM-assembly-language.git

 

 

标签:mov,helloworld,start,x8,20230813,64,arm64,linux
From: https://www.cnblogs.com/yangdinshan/p/17629170.html

相关文章

  • 跨平台xamarin.Android 开发之 :适配各架构(X86_64 、 X86、arm64-v8a、 armeabi-v7a )
    此代码的编写花费了脑细胞:在每次编码开启编码器到只需要一次编码器的开启优化前提:编译好FFMpeg的各平台的动态库基本上Android X86_64、X86、arm64-v8a、armeabi-v7a采用FFmpeg编码的方式基本一直。差异是内存分配和取指有所不同,如果分配不对,直接闪退。先看看通用的编码......
  • 跨平台xamarin.Android 开发之 :适配各架构(X86_64 、 X86、arm64-v8a、 armeabi-v7a )
    此代码的编写花费了脑细胞:在每次解码开启解码器到只需要一次解码器的开启优化前提:编译好FFMpeg的各平台的动态库Windows、Android(X86_64、X86、arm64-v8a、armeabi-v7a)解码相对编码要简单一些,因为不涉及到AVFrame取指转换解码包括:创建解码器、解码、释放解码器us......
  • 跨平台xamarin.Android 开发之 :适配各架构(X86_64 、 X86、arm64-v8a、 armeabi-v7a
    从事Windows,项目探索预研跨平台开发,对Android只知道有X86_64、X86、arm64-v8a、  armeabi-v7a这么个东西其他空白。编译入手采用Xamarin.Android开发。通过摸索。在Xamarin.Android中使用FFmpeg编解码,需要获取源码编译成对应Android架构的so动态库,如何编译不在此处讨论,稍......
  • x64架构运行arm64程序
    如题最开始是想要在x64平台构建arm64的docker镜像,最后发现安装完qemu后,可以直接运行arm64程序。安装qemusudoaptinstallqemu-user-static测试dockerrun-it--namebuntu_arm64arm64v8/ubuntu查看github的releases,发现还有qemu-x86_64-static,估计其他架构安装qemu后......
  • Zynq7020 SDK 初学篇(1) - HelloWorld
    一、开发环境 Zynq7020+Vivado2017.4二、开发背景:会使用Vivado开发工具,不熟悉的可以参考正点原子开发文档二、功能实现,串口输出HelloWorld三、实现步骤:1、配置PS端BlockDesign串口0 2、导出到SDK,编写代码,编译输出即可#include<stdio.h>......
  • go语言入门1---环境搭建以及helloworld
    go语言入门11环境搭建1.1安装go首先,在go官网下载,下面两个都行go版本-windows-amd64.msi,一直next就行,安装目录写成C:\Go\就行go版本-windows-amd64.zip压缩包直接压缩,将go文件直接移到C盘下新建的Go文件夹下。1.2添加环境变量将C:\Go\bin添加到环境变量path中1.3测试go......
  • Linux Ubuntu Helloworld 模块 的编译 插入 删除
    总述:编写.c文件和Makefile文件->make->生成点.ko文件->insmode->lsmode->rmmode. 一、编写Hello.c与Makefile ubuntu@ubuntu-VirtualBox:/$cd~/Desktop/ubuntu@ubuntu-VirtualBox:~/Desktop$cdMooc/ubuntu@ubuntu-VirtualBox:~/Desktop/Mooc$vimhelloworld.cubuntu......
  • OpenGL之HelloWorld
    1#include<iostream>//C++的标准输入输出头文件2usingnamespacestd;34#defineGLEW_......
  • 【汇编】汇编的helloWorld
    过程汇编源代码->编译->链接->执行exe。编译:将源码翻译成机器代码,生成目标(obj)文件。有x个源码文件就会生成x个目标文件。链接:将目标文件进行链接,生成exe文件。在dos中,shell是一直运行的进程,当执行汇编exe时,shell会将exe加载进内存,shell中断暂停运行,并设置CPU的CS:IP......
  • Windows 11 22H2 中文版、英文版 (x64、ARM64) 下载 (updated Jul 2023)
    Windows1122H2中文版、英文版(x64、ARM64)下载(updatedJul2023)Windows11,version22H2,2023年7月更新请访问原文链接:https://sysin.org/blog/windows-11/,查看最新版。原创作品,转载请保留出处。作者主页:sysin.org全新推出Windows11全新Windows体验,让您与热......