ARM笔记
1.查看进程ps aux查看系统上的所有进程ps axjf 显示完整的进程树htop -u username(用户名) 查看特定用户创建的进程atop是交互式系统性能监控工具 安装完后直接输入atop即可启动默认每10s刷新一次数据,也可以指定时间atop 5top -H -ppid 查看程序内部线程2.动态跟踪特定进程调用了那些系统调用sudo strace -c -p 12(进程ID)3.查看当前系统使用的页面大小getconf PAGESIZE4.查看elf文件中各节的内容readelf -IW /usr/bin/cat 查看cat程序的程序头5.取消随机化在gdb调试中设置 set disable-randomiztion on/off或者修改/proc/sys/kernel/randomize_va_space的值 0不随机化 1随机化 2完全随机化sudo sh -c echo 0 /proc/sys/kernel/randomize_va_space6.ARM A64一些要点说明A64有31个64位的通用寄存器X0-X7是参数寄存器,用来传递参数并返回结果X8用于传递间接结果的地址位置X9-X15是调用者保存的临时寄存器,用于在调用另一个函数时保存数值.受影响的寄存器被保存在调用函数的栈帧中,允许子程序修改这些寄存器X16-X18是子程序内调用临时寄存器可以用作子程序调用之间的立即数的临时寄存器X19-X28是被调用者保存的寄存器,他们被保存在被调用子程序的栈帧中,允许子程序修改这些寄存器,但也要求在返回给调用者之前恢复这些寄存器X29用作栈帧指针(Frame Pointer,FP),用于跟踪栈帧X30用作连接寄存器(Link Register,LR),用于保存函数的返回地址7.A64专用寄存器寄存器 名称 寄存器宽度PC 程序计数器 64位SP 栈指针寄存器 64位WSP 栈指针寄存器 32位XZR 零寄存器 64位WZR 零寄存器 32位LR(X30) 链接寄存器 64位ELR 异常链接寄存器 64位PSTATE 程序状态寄存器 64位 标志位NZCV N操作结果为负时被设置 Z操作结果为零 C(操作产生了进位) V(操作产生了有符号溢出)SPSR_ELx 给定异常级别的保存进程状态寄存器 32位8.数据处理指令add x0,x1,x2; x0x1x2adds x0,x1,x2; x0x1x2 and set flagsA32指令允许使用以下元操作数形式寄存器形式 add r0,r0,r1常量立即数形式 add r0,r0,#100移位寄存器形式 add r0,r0,r1,LSL #1 r0r0(r11)寄存器-移位寄存器形式 add r0,r0,r1,LSL r2 r0r0(r1r2)扩展寄存器形式 支持的扩展类型UXTB, UXTH, UXTW, UXTX (零扩展), SXTB, SXTH, SXTW, SXTX (符号扩展)。lsl r0,r1,#2; r0r12A64指令集支持四种基本类型的位移操作逻辑左移(Logical Shift Left, LSL)逻辑右移(Logical Shift Right, LSR)算数右移(Arithmetic Shift Right, ASR符号位不动循环右移(ROTATE Right,ROR) 会帮移出的部分添加到移入的里面位域移动BFM Xd,Xn,#r(宽度),#s(目标位域LSB的位数SBFM UBFM指令 别名语法 实现方式8到64位符号扩展 SXTB Xd,Wn SBFM Xd,Xn,#0,#716到64位符号扩展 SXTH Xd,Wn SBFM Xd,Xn,#0,#1532到64位符号扩展 SXTW Xd,Wn SBFM Xd,Xn,#0,#318到64位零扩展 UXTB Xd,Wn UBFM Xd,Xn,#0,#716到64位零号扩展 UXTH Xd,Wn UBFM Xd,Xn,#0,#1532到64位零号扩展 UXTW Xd,Wn UBFM Xd,Xn,#0,#319.内存访问指令LDR R0,[R1] 加载寄存器 将R1内存中的值加载到R0STR R0,[R1] 存储寄存器 将R0中保存的32位值存储到从基址寄存器R1获得的地址中寻址模式基地址寄存器直接寻址模式 LDR Rt,[Rn]偏移寻址(基址加偏移量) LDR Rt,[Rn,offset] 不会更新Rn的值前索引寻址 LDR Rt,[Rn,offset] 会先更新更新Rn的值后索引寻址 LDR Rt,[Rn],offset 先加载数据 后RnRnoffset字面值寻址(PC相对寻址) LDR Rt,label加载寄存器 LDUR(未缩放,支持1字节偏移和负数,偏移范围-256-255) LDR(缩放,0-4095,偏移量在A64下必须是8的倍数,A32下必须是4的倍数)加载字节 LDURB(未缩放,,偏移范围-256-255) LDRB(缩放,0-4095)加载有符号字节 LDURSB(未缩放,,偏移范围-256-255) LDRSB(缩放,0-4095)加载有符号半字 LDURSH(未缩放,,偏移范围-256-255) LDRSB(缩放,0-4095)加载有符号字 LDURSW(未缩放,,偏移范围-256-255) LDRSB(缩放,0-4095)存储加载器 STUR STR存储字节 STURB STRB存储半字 STURH STRH多重加载 LDM Rn{!},registers LDM sp,{r1,r2,r3} 寄存器需要按顺序,要不会提示警告自动排列,导致使用时错位 将sp指向的值一次加载到r1,r2,r3里面 最多16个LDP X1,X2,[X0] 成对参数必须两个多重存储 STM Rn{!},registers LDM sp,{r1,r2,r3}STP X1,X2,[X0] 成对参数必须两个递增后寻址 LDMIA 先赋值后增加指针递增前寻址 LDMIB 先增加指针位置后赋值递减后寻址 LDMDA递减前寻址 LDADB10.条件执行A32条件码 Arm定义了16个4位条件码这些条件码允许指令基于PSTATE的NZCV标志的状态有条件地执行。值 条件码 语义(整数运算) 条件标志0000 EQ 相等 Z10001 NE 不相等 Z00010 CS/HS 进位设置 C10011 CC/LO 进位清楚 C00100 MI 负数 N10101 PL 正或零 N00110 VS 溢出 V10111 VC 无溢出 V01000 HI 无符号大于 C1 Z01001 LS 无符号小于或等于 !(C1Z0)1010 GE 有符号大于或等于 NV1011 LT 有符号小于或等于 N!V1100 GT 有符号大于 Z0NV1101 LE 有符号小于或等于 !(Z0NV)1110 AL 始终(无条件) Any1111 NV 无效 Any条件指令 编写条件指令只需要将条件码直接附加到指令的末尾 如果条件码判断结果为真,则执行指令IT指令cmp r0,r1itete EQaddeq r0,r1,r2 ;use base cond(EQ)andne r0,r0,#0xfff ; e:use negation(NE)orreq r0,r0,#0xfff ; t:use cond(EQ)addne r0,r0,#1 ; e:use negation(NE)对应的逻辑伪代码if(r0r1){ro(r1r2)|0xfff;}else{r0(r00xfff)1;}A64下条件选择指令指令名称 指令语法 满足条件时的操作 不满足条件时的操作条件选择 CSEL Xd,Xn,Xm,cond XdXn XdXm条件选择自增 CSINC Xd,Xn,Xm,cond XdXn XdXm1条件选择倒置 CSINV Xd,Xn,Xm,cond XdXn XdNOT(Xm)条件选择取负 CSNEG Xd,Xn,Xm,cond XdXn Xd-Xm条件设置 CSET Xd,cond Xd1 Xd0条件设置掩码 CSETM Xd,cond Xd(all ones) Xd0条件自增 CINC Xd,Xn,cond XdXn1 XdXn条件倒置 CINV Xd,Xn,cond XdNOT(Xn) XdXn条件取负 CNEG Xd,Xn,cond Xd-Xn XdXn例子:CMP w0,w1CSEL w0,w1,zer,EQCCMP 条件比较指令 CCMP arg1arg2,nzcv,condif(cond){PSTATE.NZCVCMP(arg1,arg2);}else{PSTATE.NZCVnzcv}{w0w1w2w3cmp w0,w1ccmp w2,w3,0,EQblt _label}{w0w1||w2w3cmp w0,w1ccmp w2,w3,8,NEblt _label}CCMN 条件比较否定指令if(cond){PSTATE.NZCVCMN(arg1,arg2);}else{PSTATE.NZCVnzcv}11.控制流直接分支指令指令 语法无条件跳转指令 B label条件跳转指令 B.cond label带连接程序的跳转指令 BL label如果给定寄存器不为零则跳转 CBNZ Wt|Xt, label如果给定寄存器为零,则跳转 CBZ Wt|Xt, label64位才有的如果给定寄存器的特定位不为零则跳转 TBNZ Wt|Xt,#imm,label如果给定寄存器的特定位位零,则跳转 TBZ Wt|Xt,#imm,label寄存器分支指令AArch64:语法 指令BR Xn 跳转到寄存器保存的地址BLR Xn 带连接程序的跳转指令跳转地址为寄存器保存的地址RET {Xn} 从子程序返回AArch32:语法 指令BX{cond} Rm 跳转到寄存器保存的地址可进行模式切换BLX(COND} Rm 带连接程序的跳转指令跳转地址为寄存器保存的地址可进行模式切换BXJ{COND} Rm 跳转到寄存器保存的地址可进行模式切换(Jazelle)TBB{cond} {Rn,Rm} 表跳转(字节偏移)TBB{cond} [Rn,Rm,LSL #1}表跳转(半字偏移)例子1:cmp r0,#4beq end AArch64是 b.eq end需要加....end:...例子2int func(int a){unsigned int score a;char grade;switch(score){case 9: gradeA;break;case 8: gradeB;break;case 7: gradeC;break;case 6: gradeD;break;default: gradeF;break;}return grade;}00000000funcsubs r0,#6cmp r0,#3bhi.n lafunc0x1atbb [pc,r0].short 0x0406.short 0x0a02movs r0,#66bx lrmovs r0,#67bx lrmovs r0,#68bx lrmovs r0,#70bx lrmovs r0,#65bx lr12.安装arm64虚拟环境使用 VNC 替代本地窗口最稳定保底方案如果本地图形界面GTK/SDL始终报错说明 Windows 下的图形后端与 QEMU 的视频设备存在兼容性问题。使用 VNC 可以将显示输出通过网络协议传输完全绕过本地显卡驱动问题。‌修改步骤‌‌移除‌ -device virtio-gpu-pci 和 -display gtk,gloff。‌添加‌ -vnc :0。‌下载‌ VNC Viewer如 TightVNC 或 RealVNC。‌连接‌ localhost:5900。‌完整修正命令VNC 模式REM---------------------------------------------------------------------------------------------------------安装----------------------------------------------------------------------------------------------echo offsetlocal enabledelayedexpansionREM REM 配置区域 (请根据实际情况修改路径)REM set ISO_FILEubuntu-22.04.5-live-server-arm64.isoset DISK_FILEubuntu-arm64.qcow2set BIOS_FILEQEMU_EFI.fdset QEMU_BINqemu-system-aarch64echo echo QEMU ARM64 Ubuntu 安装助手echo echo.REM 1. 检查 QEMU 是否已安装并在 PATH 中where %QEMU_BIN% nul 2nulif %ERRORLEVEL% neq 0 (echo [错误] 未找到 qemu-system-aarch64echo 请确认已安装 QEMU 并将其安装目录添加到系统环境变量 PATH 中。echo 推荐下载地址: https://qemu.weilnetz.de/w64/pauseexit /b 1)REM 2. 检查 ISO 文件是否存在if not exist %ISO_FILE% (echo [错误] 找不到 ISO 文件: %ISO_FILE%echo 请下载 Ubuntu Server ARM64 ISO 并放置在此脚本同一目录下。pauseexit /b 1)REM 3. 检查 BIOS/UEFI 固件文件是否存在if not exist %BIOS_FILE% (echo [错误] 找不到 BIOS 文件: %BIOS_FILE%echo 请下载 QEMU_EFI.fd Linaro UEFI 并放置在此11脚本同一目录下。pauseexit /b 1)REM 4. 检查并创建虚拟磁盘if not exist %DISK_FILE% (echo [信息] 检测到虚拟磁盘不存在正在创建 %DISK_FILE% 60GB...qemu-img create -f qcow2 %DISK_FILE% 60Gif %ERRORLEVEL% neq 0 (echo [错误] 创建磁盘失败请检查权限或磁盘空间。pauseexit /b 1)echo [成功] 虚拟磁盘创建完成。) else (echo [信息] 发现现有虚拟磁盘: %DISK_FILE%)echo.echo [提示] 即将启动虚拟机...echo 1. 首次启动可能较慢请耐心等待 UEFI 自检和内核加载。echo 2. 如果窗口黑屏请点击窗口内部并按几次回车键。echo 3. 按 CtrlAltG 可释放鼠标焦点。echo.pauseREM REM 启动命令REM 关键修改REM 1. 移除 ,glon 以避免 Windows 显卡驱动兼容性问题导致的黑屏/无响应REM 2. 使用 -display sdl 作为最通用的图形后端REM 3. 确保每行末尾的^ 后没有任何空格REM %QEMU_BIN% ^-M virt ^-cpu cortex-a72 ^-m 8G ^-smp 4 ^-bios %BIOS_FILE% ^-device virtio-gpu ^-display gtk,gloff ^-device nec-usb-xhci,idxhci ^-device usb-kbd,busxhci.0 ^-device usb-mouse,busxhci.0 ^-device virtio-net-device,netdevnet0 ^-netdev user,idnet0,hostfwdtcp::2223-:22 ^-drive file%DISK_FILE%,ifnone,idhd0,formatqcow2 ^-device virtio-blk-device,drivehd0 ^-cdrom %ISO_FILE% ^-name Ubuntu-22.04-ARM64-Installerecho.echo [信息] QEMU 进程已退出。pauseendlocalREM---------------------------------------------------------------------------------------------------------安装End-------------------------------------------------------------------------------------------REM---------------------------------------------------------------------------------------------------------启动----------------------------------------------------------------------------------------------echo offsetlocal enabledelayedexpansionREM REM 配置区域 (请根据实际情况修改路径)REM set ISO_FILEubuntu-22.04.5-live-server-arm64.isoset DISK_FILEubuntu-arm64.qcow2set BIOS_FILEQEMU_EFI.fdset QEMU_BINqemu-system-aarch64echo.echo [提示] 即将启动虚拟机...echo 1. 首次启动可能较慢请耐心等待 UEFI 自检和内核加载。echo 2. 如果窗口黑屏请点击窗口内部并按几次回车键。echo 3. 按 CtrlAltG 可释放鼠标焦点。echo.REM REM 启动命令REM 关键修改REM 1. 移除 ,glon 以避免 Windows 显卡驱动兼容性问题导致的黑屏/无响应REM 2. 使用 -display sdl 作为最通用的图形后端REM 3. 确保每行末尾的^ 后没有任何空格REM %QEMU_BIN% ^-M virt ^-cpu cortex-a72 ^-m 8G ^-smp 4 ^-bios %BIOS_FILE% ^-device virtio-gpu ^-display gtk,gloff ^-device nec-usb-xhci,idxhci ^-device usb-kbd,busxhci.0 ^-device usb-mouse,busxhci.0 ^-device virtio-net-device,netdevnet0 ^-netdev user,idnet0,hostfwdtcp::2223-:22 ^-drive file%DISK_FILE%,ifnone,idhd0,formatqcow2 ^-device virtio-blk-device,drivehd0 ^-name Ubuntu-22.04-ARM64-Installerecho.echo [信息] QEMU 进程已退出。pauseendlocalREM---------------------------------------------------------------------------------------------------------启动End----------------------------------------------------------------------------------------------

相关新闻

各向异性可见性建模:让机器人真正理解‘看得见’的物理含义

各向异性可见性建模:让机器人真正理解‘看得见’的物理含义

1. 为什么“主动建图”不能只靠“看得见”——GAVIS提出的根本矛盾在机器人导航、自动驾驶感知、AR空间锚定这些实际场景里,我们常默认一个朴素逻辑:只要传感器能“看到”某个区域,这个区域就天然具备建图资格。激光雷达扫过墙面,…

2026/7/8 4:46:48阅读更多 →
苏州多品种小批量 CNC 零件加工:研发样机阶段如何兼顾速度、精度和成本

苏州多品种小批量 CNC 零件加工:研发样机阶段如何兼顾速度、精度和成本

【本文摘要】多品种小批量 CNC 零件加工常见于研发样机、设备改造、夹具验证和半导体设备配套场景,订单数量不大,但对沟通效率、图纸理解、材料选择和检测稳定性要求很高。莱图加、东莞劲胜精密、深圳银宝山新、宁波海天精工以及云工厂等不同类型服务方&…

2026/7/8 4:41:48阅读更多 →
BF7612CM QFN20 触摸芯片

BF7612CM QFN20 触摸芯片

在智能家居、IoT终端、电池供电设备大爆发的时代,功耗和交互体验成为工程师选型的核心考量。然而近期BF7612系列部分封装市场缺货严重、价格持续走高,让不少项目陷入被动。我们作为代理商,现持有BF7612CM QFN20充足现货——它不仅继承了该系列…

2026/7/8 4:41:48阅读更多 →
鸿蒙新特性:Select 与 TextArea —— 构建用户反馈表单

鸿蒙新特性:Select 与 TextArea —— 构建用户反馈表单

移动应用中,"提交表单"是最常见的用户交互模式之一。用户选择分类、填写内容、留下联系方式——三个步骤完成了从"想法"到"反馈"的信息流转。HarmonyOS NEXT ArkUI 提供了 Select(下拉选择器)和 TextArea&…

2026/7/8 7:07:03阅读更多 →
如何快速解锁加密音乐:Unlock-Music新手完全指南

如何快速解锁加密音乐:Unlock-Music新手完全指南

如何快速解锁加密音乐:Unlock-Music新手完全指南 【免费下载链接】unlock-music 在浏览器中解锁加密的音乐文件。原仓库: 1. https://github.com/unlock-music/unlock-music ;2. https://git.unlock-music.dev/um/web 项目地址: https://gi…

2026/7/8 7:07:03阅读更多 →
主动学习算法:如何用10%标注数据训练出90%效果?

主动学习算法:如何用10%标注数据训练出90%效果?

在计算机视觉项目落地过程中,数据标注往往是模型训练周期中最容易被低估的一环。以无人零售商品检测项目为例,某客户计划上线一套自动识别货架商品的视觉系统,需要覆盖数万个SKU类别。项目初期,客户准备采集约50万张真实门店图片作…

2026/7/8 7:07:03阅读更多 →
品牌知识库构建方法论

品牌知识库构建方法论

品牌知识库构建方法论 出品:阜阳山君网络科技有限公司 | 版本:v2 | 2026-07-07 版本:v2 | 2026-07-07背景:为什么"等 AI 自己抓"不够 生成式 AI 对品牌的认知,来自它能稳定…

2026/7/8 7:07:03阅读更多 →
VESC Tool完全指南:从新手到专家的无刷电机控制器配置利器

VESC Tool完全指南:从新手到专家的无刷电机控制器配置利器

VESC Tool完全指南:从新手到专家的无刷电机控制器配置利器 【免费下载链接】vesc_tool The source code for VESC Tool. See vesc-project.com 项目地址: https://gitcode.com/gh_mirrors/ve/vesc_tool VESC Tool是VESC无刷电机控制器的官方配置工具&#xf…

2026/7/8 7:07:03阅读更多 →
2026免费人物抠图电脑、手机工具实操指南

2026免费人物抠图电脑、手机工具实操指南

2026 年日常修图、自媒体素材、证件照制作都经常需要分离人物主体、去除图片背景,市面上有大量适配电脑、手机的免费人物抠图工具,覆盖 APP、在线网页、微信小程序、电脑专业软件四种使用渠道。不同工具适配的使用场景、操作门槛、免费权限各不相同&…

2026/7/8 7:02:02阅读更多 →
从GitHub安全案例解析常见漏洞与防护实践

从GitHub安全案例解析常见漏洞与防护实践

1. 项目概述:从GitHub Trending看安全实战 最近在GitHub Trending上看到一个项目,叫 skills4/skills ,它因为一些安全漏洞案例被大家讨论。这其实是一个挺典型的场景:一个旨在展示或教授某种技能的仓库,本身却成了安…

2026/7/8 5:12:14阅读更多 →
MLT 2026启示:因果推理与概率建模驱动下一代LLM应用

MLT 2026启示:因果推理与概率建模驱动下一代LLM应用

# MLT 2026启示:因果推理与概率建模驱动下一代LLM应用## 一、背景与挑战:从“黑箱预测”到“可信推理”2026年6月,第7届机器学习与趋势国际会议(MLT 2026)将在悉尼召开。会议议程中,“因果与可解释机器学习…

2026/7/8 7:00:12阅读更多 →
通达OA SQL注入漏洞深度剖析:从手工注入到自动化利用与防御

通达OA SQL注入漏洞深度剖析:从手工注入到自动化利用与防御

1. 项目概述与漏洞背景最近在梳理一些历史OA系统的安全风险时,通达OA v11.6版本中的一个老漏洞又进入了我的视线。这个漏洞位于/general/bi_design/appcenter/report_bi.func.php文件中,是一个典型的SQL注入点。虽然这个漏洞的利用方式看起来并不复杂&am…

2026/7/8 2:26:06阅读更多 →
作为一个给团队打绩效的人,我想说几句

作为一个给团队打绩效的人,我想说几句

我每半年都会给团队成员打绩效,也会参与和 CTO 的绩效校准,所以从管理者的视角,说说这件事 首先,我先把结论告诉你:接受结果,但一定要把原因问清楚。 因为当绩效公布到你这里的时候,结果基本已…

2026/7/8 0:01:17阅读更多 →
A股股指期货:全维度解析(多表格结构化完整版)

A股股指期货:全维度解析(多表格结构化完整版)

一、基础定义与核心本质股指期货全称股票价格指数期货,是中国金融期货交易所(中金所)上市的标准化金融期货合约,交易标的为 A 股大盘指数,约定未来特定时间按约定价格现金交割指数涨跌差价,不交割一篮子股票…

2026/7/8 0:01:17阅读更多 →
iOS越狱新手指南:从困惑到掌控,3天解锁iPhone无限潜能的真实故事

iOS越狱新手指南:从困惑到掌控,3天解锁iPhone无限潜能的真实故事

iOS越狱新手指南:从困惑到掌控,3天解锁iPhone无限潜能的真实故事 【免费下载链接】Jailbreak iOS 26.4 - 26, 17 - 17.7.5 & iOS 18 - 18.7.3 Jailbreak Tools, Cydia/Sileo/Zebra Tweaks & Jailbreak News Updates || AI Jailbreak Finder &…

2026/7/8 0:01:17阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/8 6:59:54阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/7 5:11:21阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/7 5:11:21阅读更多 →