iOS Hacker Xcode使用和内联汇编

iOS安全防护系列之ptrace反调试与汇编调用系统方法详解 主要给大家介绍了关于iOS安全防护系列之ptrace反调试与汇编调用系统方法的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧 立即下载
1.在C/C++/Objective C调用汇编函数

在iOS工程里新建Assemble文件,编写代码
.text
.align 4
.globl _funcAdd_arm

_funcAdd_arm:
    add w0,w0,w1
    add w0,w0,w2
    add w0,w0,w3
    add w0,w0,w4
    add w0,w0,w5
    ret

然后在main函数里导出,就可以直接用了。
extern int funcAdd_arm(int a, int b, int c, int d, int e,int f);

int main(int argc, char * argv[])
 {
    int num1 = funcAdd_arm(1,2,3,4,5,6);
    NSLog(@"%d\n",num);
}

2.内联汇编

VC的内联汇编非常简单,几乎和直接写汇编差不多,但是Xcode内联汇编比较复杂,格式如下:

asm ( 汇编语句  
    : 输出操作数     // 非必需  
    : 输入操作数     // 非必需  
    : 其他被污染的寄存器 // 非必需  
    );  

第1行是汇编语句,如果有多句需要用\t\n来分隔
第2行是输出操作数,都是 "=r"(var) 的形式,var可以是任意内存变量(输出结果会存到这个变量中),除了r之外,一般还有下面这些标识符:
r 上面的寄存器的任意一个(谁闲着就用谁)
m 内存
i 立即数(常量,只用于输入操作数)
g 寄存器、内存、立即数 都行(gcc你看着办)
第3行是输入操作数,也是和输出操作数一样的格式。
第4行是的作用可以在汇编代码一运行之前,将指定的寄存器保存起来,当汇编代码结束后再恢复。

实例代码如下:

#import <UIKit/UIKit.h>
#import "AppDelegate.h"

extern int funcAdd_arm(int a, int b, int c, int d, int e,int f);

int funcAdd(a,b,c,d,e,f)
{
    int g=a+b+c+d+e+f;
    return g;
}

int main(int argc, char * argv[]) {
    
    int num = funcAdd(1, 2, 3, 4, 5, 6);
    
    int num2 = funcAdd_arm(1,2,3,4,5,6);
    
    NSLog(@"%d\n",num);
    
    int f_address = (int)&funcAdd_arm;
    
    NSLog(@"%x\n",f_address);
    
    num = 0;
    num2 = 0;
    
    asm(
        "mov x0,1\t\n"
        "mov x1,2\t\n"
        "mov x2,3\t\n"
        "mov x3,4\t\n"
        "mov x4,5\t\n"
        "mov x5,6\t\n"
        "bl _funcAdd_arm\t\n"
        "mov %0,x0\t\n"
        "mov %1,#2\t\n"
        :"=r"(num),"=r"(num2)
        :
        :
        );
    
lable1:
    NSLog(@"lable1");
    
    @autoreleasepool {
        return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
    }
}

真机运行的汇编代码

armasm`main:
    0x100020970 <+0>:   stp    x29, x30, [sp, #-16]!
    0x100020974 <+4>:   mov    x29, sp
    0x100020978 <+8>:   sub    sp, sp, #80
    0x10002097c <+12>:  orr    w8, wzr, #0x1
    0x100020980 <+16>:  orr    w9, wzr, #0x2
    0x100020984 <+20>:  orr    w2, wzr, #0x3
    0x100020988 <+24>:  orr    w3, wzr, #0x4
    0x10002098c <+28>:  movz   w4, #0x5
    0x100020990 <+32>:  orr    w5, wzr, #0x6
    0x100020994 <+36>:  stur   wzr, [x29, #-4]
    0x100020998 <+40>:  stur   w0, [x29, #-8]
    0x10002099c <+44>:  stur   x1, [x29, #-16]
    0x1000209a0 <+48>:  mov    x0, x8
    0x1000209a4 <+52>:  mov    x1, x9
    0x1000209a8 <+56>:  bl     0x100020918               ; funcAdd at main.m:15
    0x1000209ac <+60>:  orr    w8, wzr, #0x1
    0x1000209b0 <+64>:  orr    w1, wzr, #0x2
    0x1000209b4 <+68>:  orr    w2, wzr, #0x3
    0x1000209b8 <+72>:  orr    w3, wzr, #0x4
    0x1000209bc <+76>:  movz   w4, #0x5
    0x1000209c0 <+80>:  orr    w5, wzr, #0x6
    0x1000209c4 <+84>:  stur   w0, [x29, #-20]
    0x1000209c8 <+88>:  mov    x0, x8
    0x1000209cc <+92>:  bl     0x100020900               ; funcAdd_arm
    0x1000209d0 <+96>:  stur   w0, [x29, #-24]
    0x1000209d4 <+100>: ldur   w8, [x29, #-20]
    0x1000209d8 <+104>: mov    x6, x8
    0x1000209dc <+108>: mov    x10, sp
    0x1000209e0 <+112>: str    x6, [x10]
    0x1000209e4 <+116>: adrp   x0, 4
    0x1000209e8 <+120>: add    x0, x0, #520
    0x1000209ec <+124>: bl     0x10002246c               ; symbol stub for: NSLog
    0x1000209f0 <+128>: adrp   x10, 0
    0x1000209f4 <+132>: add    x10, x10, #2304
    0x1000209f8 <+136>: mov    x8, x10
    0x1000209fc <+140>: stur   w8, [x29, #-28]
    0x100020a00 <+144>: ldur   w8, [x29, #-28]
    0x100020a04 <+148>: mov    x0, x8
    0x100020a08 <+152>: mov    x10, sp
    0x100020a0c <+156>: str    x0, [x10]
    0x100020a10 <+160>: adrp   x0, 4
    0x100020a14 <+164>: add    x0, x0, #552
    0x100020a18 <+168>: bl     0x10002246c               ; symbol stub for: NSLog
    0x100020a1c <+172>: stur   wzr, [x29, #-20]
    0x100020a20 <+176>: stur   wzr, [x29, #-24]
    0x100020a24 <+180>: movz   x0, #0x1
    0x100020a28 <+184>: movz   x1, #0x2
    0x100020a2c <+188>: movz   x2, #0x3
    0x100020a30 <+192>: movz   x3, #0x4
    0x100020a34 <+196>: movz   x4, #0x5
    0x100020a38 <+200>: movz   x5, #0x6
    0x100020a3c <+204>: bl     0x100020900               ; funcAdd_arm
    0x100020a40 <+208>: mov    x8, x0
    0x100020a44 <+212>: movz   x9, #0x2
    0x100020a48 <+216>: stur   w8, [x29, #-20]
->  0x100020a4c <+220>: stur   w9, [x29, #-24]


芒果YOLOv8改进52:主干Backbone篇之GhostNetV2:提出原创GhostNetV2 架构升级版:引入长距离注意力机制增强廉价操作,构建更强端侧轻量型骨干,打造高效轻量级检测器 长距离注意力机制增强廉价操作,打造轻量级检测器 阅读详情

相关推荐

iTunes登录协议逆向与自动化实现

本文详细解析了iTunes登录协议的逆向工程与自动化实现方法,涵盖请求体构造、签名生成和会话管理等关键技术。通过XML结构解析、X-Apple-ActionSignature生成原理及完整登录流程实现,帮助开发者高效完成iTunes自动化登录,提升工作效率。

weixin_26938645的博客 940

XCODE(IOS)下内嵌ARM汇编(ARM嵌入式开发中的GCC内联汇编)

有时候再更新,先看看国内大神们的讲解,基本上看完就懂的了。首先要搞清楚的是XCODE用的汇编是ARM汇编,而虚拟机的指令是X86的,而不是ARM的指令。所以必须真机才可以。1.XCODE环境下,直接嵌入ARM汇编。2.XCODE环境下,C中嵌入ARM汇编。这两个方面都会涉及到。这三篇文章都非常好,看懂,对于XCODE下汇编就有个全面了解了,能做出简单的ARM汇编混编。 1.在iOS中如何使用汇编

air1120的专栏 5810

kaggle-NeurIPS - Open Polymer Prediction 2025-0.069

本文摘要: 本研究基于多任务学习框架,开发了聚合物物理化学性质预测模型,能够根据SMILES字符串同步预测玻璃化转变温度(Tg)、分数游离体积(FFV)等5种关键性质。针对数据缺失率高、样本不均衡等挑战,采用"先补充后扩充"策略整合多源数据,并融合RDKit分子描述符、ChemBERTa语义特征和自编码器特征构建多维度表征。模型采用硬参数共享架构,结合动态加权损失函数和早停机制,在验证集上表现出色,其中密度预测R²达0.92。研究为聚合物性能的高通量预测提供了有效解决方案,对材料智能设计具有重要参考价值。

2302_78976920的博客 785

iOS 中的内嵌汇编

????????关注后回复“进群”,拉你进程序员交流群????????转自:sindrilin的小巢-sindrilinhttp://sindrilin.com/2019/10/23...

iOS_开发 617

从零搭建A股量化交易系统:开源框架选型与实战部署指南

本文详细介绍了从零搭建A股量化交易系统的完整流程,重点分析了开源框架VNPY和QMT的选型与实战部署。内容涵盖系统架构设计、策略开发、性能优化及实盘过渡方案,为开发者提供了一套完整的A股实盘量化交易解决方案,助力高效构建稳定可靠的量化交易系统。

sugar的博客 1277

ZEMAX知识点:坐标间断面(coordinate break)

zemax知识点:坐标间断面

weixin_47638568的博客 1万+

arm汇编储存指令str stur和读取指令 ldr ldur的使用,对应xcode c++中的代码反汇编教程

目录str 和 stur 存储指令ldr 和 ldur 读取指令 经常会看到xcode 返回变里面出现 stur 和 ldur之类的指令,网上资料不太多,今天做一下总结: str 和 stur 存储指令 这是一对 存储指令,作用是把寄存器里的内容存储到右边地址中:用法格式如下: str 寄存器,[内存地址] stur 寄存器,[内存地址] 例如下面汇编代码 str w11, [x10, #0xa0] stur w12, [x29, #-0x18] 从功能出发,这2条指令一般对应,存储数值,例如给变

小手琴师的博客 9434

OpenStack 之 Epoxy版本 部署实战

OpenStack Epoxy 是 OpenStack 的第 31 个版本,其版本号为 2025.1,于 2025 年 4 月 2 日正式发布。

求知若渴,虚心若愚。 236

iOS中的内嵌汇编

Python实战社群Java实战社群长按识别下方二维码,按需求添加扫码关注添加客服进Python社群▲扫码关注添加客服进Java社群▲作者 | sindrilin来源 | sindri...

iOS_开发 579

YOLO26涨点改进 | 全网独家创新、检测头Head改进篇 | AAAI 2026 | 使用StripConvHead改进YOLO26的检测头,处理小目标、遮挡小目标检测有效涨点,助力高效发论文

🔥本文给大家介绍使用StripConv条形卷积改进 YOLO26的检测头,可以显著提高模型在高纵横比物体检测、目标定位和多尺度物体检测方面的表现。StripConv条形卷积能够更有效地捕捉细长物体的特征,提升定位精度,并通过简化卷积核设计减少计算冗余,优化计算效率。此外,该改进增强了 YOLO26对复杂场景和实时任务的适应能力,特别适用于遥感图像目标检测、小目标检测等领域。具体怎么使用请看全文。摘要:随着遥感物体检测的快速发展,检测高纵横比物体仍然是一个挑战性问题。

Ai缝合怪、助力小伙伴高效发论文 269

黑猫带你学eMMC协议第11篇:eMMC擦除详解(erase/trim/discard/sanitize/secure erase/secure trim...)

erase命令单位是擦除组,那么一个擦出组包含多个写块,不同写块有不同信息,主机擦除之前,必须进行确定好这些写块中的信息没有用了。所以通常erase用来擦除整个设备或分区。erase完成后,将erase的区域都要么是全0,要么是全1。那么到底是0还是1呢,根据不同的工艺有所不同,但是别担心,在ecsd[181]中会有说明到底是1还是0。erase命令的作用就是简单的将映射地址范围移动到未映射的地址范围。

黑猫奥利奥的博客 7797

汇编基础(1)变量及数组的定义声明

<br /> <br />汇编中变量及数组的定义声明<br />没有变量的程序设计语言是不可思议的,它几乎什么都做不了(除了经典的‘hello the world!’程序),毕竟有一些数值是在程序运行时随环境的变化而变化的(在程序设计时你不可能确定它)。即使是像汇编这样可以直接读写内存的程序也需要用到变量。但它不像其它高级语言那样把变量分成许多类型,它是按照变量的长度来区分的,所以定义(define)变量时就用5个不同的关键字:DB,DW,DD,DQ,DT(事实上常用的只有DB,DW)<br />DB(DE

liufei_learning--脚踏实地,戒骄戒躁! 1万+

使用 MATLAB/Simulink 搭建一个 无人机群间数据交换与协同控制仿真系统

本文提供了一份详细的Simulink无人机群协同控制仿真教程。主要内容包括:无人机群系统架构设计(去中心化网络、通信分层)、三维运动建模、空-空通信链路实现(距离判断、无线信道)、分布式Consensus控制算法开发,以及性能评估指标设定。教程采用模块化设计思路,通过ModelReference构建多无人机并行模型,并给出了MATLAB函数实现关键算法。最后展示了预期仿真结果(收敛时间<15s、位置偏差<2m)和进阶应用方向(编队飞行、AI协同等),帮助读者掌握群体智能系统的建模与仿真方法。

amy_mhd的博客 159

汇编定义数组_汇编语言(8)--变量

NASM提供了各种定义指令来为变量保留存储空间。 define assembler指令用于分配存储空间。 它可以用于保留以及初始化一个或多个字节。为初始化数据分配存储空间初始化数据的存储分配语句的语法为[variable-name] define-directive initial-value [,initial-value]... 其中,变量名是每个存储空间的标识符。 汇编器为数...

weixin_39875760的博客 3664

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

汇编学习--数组

数组是相同数据类型的元素的集合,它们的内存中按顺序连续存放在一起。在汇编状态下访问数组一般是通过基址加变址寻址实现的。 0x01 先找一个数组访问的C语言代码 #include<stdio.h> int main() { static int a[3]={0x11,0x22,0x33}; int i...

gclome的博客 1万+

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

汇编创建二维数组

汇编如何创建二维数组呢? 这里以emu8086为例: 首先呢,是在数据块中定义,例如上面的自定义了两个一维数组,array1是数组名字(实际上是首地址,把它当作一个地址整数看就好了),后面db是声明为字节类型(字类型用dw声明),然后后面是它的数据,想要多少个空间就定义多少个数据,就是这样。 然后怎样访问呢?这样访问:例如访问第一个数组的第二个元素: mov al, array1[1]...

qq_40058642的博客 6025

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

iOS汇编入门教程(二)在Xcode工程中嵌入汇编代码

简介 在上一篇文章 iOS汇编入门教程 中介绍了汇编在iOS开发中的应用以及ARM汇编基础知识,本文将介绍在C或Objective-C构成的工程中如何嵌入汇编代码。 注意 在调试ARM汇编时,Xcode的Build对象必须为真机,如果对象为模拟器则是x86汇编。 内联汇编 汇编与C间接通信 在函数中可以直接插入汇编代码来影响函数的运行逻辑,使用的语法为编译指令__asm__,注意插入汇编有可能会被...

weixin_33816300的博客 1350

xcode + nasm 汇编混编

xcode + nasm 汇编混编

技术之路 1958

使用xcode在ios项目中手写汇编代码函数并且调用汇编函数的方法

文章目录在项目中新建空白文件empty重命名为.s文件新建.h头文件声明方法给别的文件使用在oc代码中调用方法通过lldb 断点调试验证寄存器结果 在项目中新建空白文件empty重命名为.s文件 如下图在ios app项目中新建文件->other->empty->名字改成test.s 下面是2个方法: text和 add,text方法不带入参只简单测试几条mov指令 add带入参,测试带2个入参的加法 .text的意思是把西面代码放进代码段.因为macho文件,里面的text段就是代码

小手琴师的博客 1868

观察Xcode下系统调用函数生成汇编指令

一、简单介绍 原本之前用简单的汇编指令写了一个函数,不过发现进入死循环了,这是为什么呢?首先先看看之前写的汇编代码吧,下面的.text的意思就是告诉编译器,我这个在内存中是一个代码段,.global的意思就是全局函数的意思 .text .global _C,_D _C: mov x0, #0xaaaa0000 bl _D mov x0,#0xcccc0000 ...

rv0p111 1577

Win32汇编数组学习2

汇编语言数组一般定义在.data段;

bcbobo21cn的专栏 740

iOS Xcode 的汇编模式切换

 联系人:石虎 QQ:1224614774  昵称: 嗡嘛呢叭咪哄                       QQ群:807236138  群称: iOS 技术交流学习群   一、概念  1.汇编指令 : 模拟器上运行的是Intel指令,而真机上运行的是arm指令,  2.每条汇编指令的格式总是由: 操作码, 操作数1,操作数2,操作数3组成。 操作数要么就是常数,要么就是寄存储...

石虎 2546
上一篇: iOS Hacker Xcode玩转arm64汇编基础
下一篇: Mac下使用svn命令
sysprogram
博客等级 码龄17年 298粉丝 442原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值