iOS逆向进阶:iOS进程间通信方案深入探究与local socket介绍
在移动应用开发中,进程间通信(Inter-Process Communication,IPC)是一项至关重要的技术,用于不同应用之间的协作和数据共享。在iOS生态系统中,进程和线程是基本的概念,而进程间通信方案则为应用的功能拓展和性能优化提供了强大的支持。
1. 进程与线程:操作系统的核心概念
进程是指在操作系统中正在运行的一个独立程序实例。每个进程都拥有独立的内存空间,不同进程之间的数据隔离,通信需要特定的机制。在iOS中,每个应用运行在独立的进程中,这确保了应用之间的隔离性和稳定性。
线程是进程内的执行单元,一个进程可以包含多个线程。线程共享进程的内存空间,这使得它们可以更容易地共享数据。然而,多线程编程也带来了线程同步和竞态条件等复杂性问题。在iOS中,主线程通常处理UI交互,而后台线程执行耗时任务,以保持用户界面的响应性。
下面我们从代码角度讨论一下进程是如何被创建的:
1.1 Linux下进程的创建
在Linux下,可以使用C语言中的系统调用来创建新的进程。其中,fork()是一个常用的系统调用,用于创建一个新的进程,使得父进程和子进程可以并行运行。下面是一个简单的示例代码,展示了如何使用C语言在Linux下创建进程:
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>int main() {pid_t child_pid;// 创建新进程child_pid = fork();if (child_pid < 0) {fprintf(stderr, "Fork failed\n");return 1;} else if (child_pid == 0) {// 子进程执行的代码printf("This is the child process. PID: %d\n", getpid());// 子进程退出exit(0);} else {// 父进程执行的代码printf("This is the parent process. Child PID: %d\n", child_pid);// 等待子进程结束wait(NULL);printf("Child process has terminated.\n");}return 0;
}
在这个例子中,fork()会创建一个新的进程,其中子进程会从fork()返回处开始执行。在子进程中,我们打印子进程的PID,并使用exit(0)来退出子进程。在父进程中,我们打印子进程的PID,然后使用wait(NULL)来等待子进程结束。注意,父进程和子进程在内存空间中是独立的,但它们共享文件描述符等资源。
1.2 iOS中编译运行上述代码
在iOS平台上,你无法直接使用fork()来创建进程,因为iOS的应用程序在沙箱环境中运行,对于进程的管理和创建有一些限制。在iOS上,进程的创建和管理是由系统控制的,通常是由应用程序的主线程启动的。你可以正常编译运行,但尝试调用fork()函数会导致应用崩溃。
1.3 fork() 的底层原理

为了更好理解进程间通信,我们来介绍一下调用fork()时,操作系统的底层发生了哪些变化:
复制进程: 当一个进程调用fork()时,操作系统会创建一个新的进程,称为子进程。子进程是父进程的副本,包括了父进程的所有内存、文件描述符和其他资源。
复制内存空间: 子进程的地址空间会与父进程一样,但是子进程会获得一个独立的副本。这是通过"写时复制"(Copy-On-Write)机制实现的,意味着一开始父子进程共享内存,但如果任何一个进程修改了内存内容,操作系统会为修改的部分创建一个新的副本。
分配进程ID: 操作系统为子进程分配一个唯一的进程标识符(PID)。子进程的PID与父进程不同,但其它属性(如UID、GID等)可能会保持一致。
文件描述符的处理: 子进程会继承父进程的文件描述符。文件描述符是用于访问文件、套接字等I/O资源的句柄。子进程在继承文件描述符后,可以共享相同的文件或网络连接。
返回值: 在父进程中,fork()函数返回子进程的PID(正整数)。在子进程中,fork()函数返回0。如果fork()失败,返回值为负数,表示创建子进程失败。
继续执行: 父进程和子进程都从fork()调用之后的地方继续执行。由于子进程是父进程的副本,它们都从相同的代码位置开始运行。
其中可以特别注意一下"写时复制"的概念,这往往也是大厂面试重点考察的内容,如果感兴趣我们后续会展开介绍,可以关注本专栏以获取最新的文章。
2. iOS中的进程间通信方案
在iOS中,不同应用之间的数据共享和通信需要使用特定的进程间通信方案。以下是一些常见的iOS进程间通信方法:
**URL Scheme:**应用可以通过注册自定义的URL Scheme,在其他应用中通过URL调起目标应用,并传递数据。这通常用于简单的应用跳转和数据分享。
App Groups: App Groups 允许不同应用共享同一组容器目录,用于存储共享数据,如偏好设置和文件等。
Keychain Sharing: Keychain 是用于存储敏感数据的安全容器,应用可以在开发者账号下共享Keychain数据,实现跨应用的数据共享。
Notification: 应用可以使用通知中心发送和接收通知,实现应用间的消息传递。这适用于一对多的通信场景。
Local Socket: iOS进程间也可以通过本地socket方式进行通信,这是一个较为通用的方法,下面我们来详细介绍。
3. 使用Local Socket进行进程间通信
Local Socket 是一种基于网络套接字的进程间通信方法,适用于在同一台设备上的不同进程之间建立通信连接。下面是使用Local Socket进行进程间通信的简要示例代码:
进程1 - 发送数据
import Foundationlet serverURL = URL(fileURLWithPath: "/path/to/socket")
let socket = try! Socket.create(family: .unix, type: .stream, proto: .unix)
try! socket.connect(to: serverURL)let dataToSend = "Hello, Process 2!".data(using: .utf8)!
try! socket.write(from: dataToSend)
socket.close()
进程2 - 接收数据
import Foundationlet serverURL = URL(fileURLWithPath: "/path/to/socket")
let socket = try! Socket.create(family: .unix, type: .stream, proto: .unix)
try! socket.bind(to: serverURL)
try! socket.listen(maxBacklogSize: 1)let clientSocket = try! socket.acceptClientConnection()var receivedData = Data()
_ = try! clientSocket.read(into: &receivedData)
let receivedString = String(data: receivedData, encoding: .utf8)
print("Received data: \(receivedString ?? "")")
clientSocket.close()
iOS进程间通信方案在不同场景下具有不同的优势和用途。我们应根据实际需求选择适合的通信方法,以实现应用之间的数据共享和协作,为用户提供更优质的体验。
相关文章:
iOS逆向进阶:iOS进程间通信方案深入探究与local socket介绍
在移动应用开发中,进程间通信(Inter-Process Communication,IPC)是一项至关重要的技术,用于不同应用之间的协作和数据共享。在iOS生态系统中,进程和线程是基本的概念,而进程间通信方案则为应用的…...
qt day 1
this->setWindowIcon(QIcon("D:\\zhuomian\\wodepeizhenshi.png"));//設置窗口的iconthis->setWindowTitle("鵬哥快聊");//更改名字this->setFixedSize(500,400);//設置尺寸QLabel *qlnew QLabel(this);//創建一個標簽ql->resize(QSize(500,20…...
针对java中list.parallelStream()的多线程数据安全问题我们采用什么方法最好呢?
当使用List.parallelStream()方法进行多线程处理时,可能会涉及到数据安全问题。下面是一些常见的方法来处理parallelStream()的多线程数据安全问题: 1. 使用线程安全的集合:Java中提供了线程安全的集合类,如CopyOnWriteArrayList…...
校园用电安全管理系统可以识别违规电器吗
校园用电安全管理系统是处理恶意用电问题有效手段之一,系统具有实时监测、异常预警、监测设备运行状态、远程控制用电等功能,可以从根本上管理学校用电量,制定合理的用电计划,限制用电成本,避免各种恶意用电行为&#…...
前端(十五)——开源一个用react封装的图片预览组件
👵博主:小猫娃来啦 👵文章核心:开源一个react封装的图片预览组件 文章目录 组件开源代码下载地址运行效果展示实现思路使用思路和api实现的功能数据和入口部分代码展示 组件开源代码下载地址 Gitee:点此跳转下载 CSDN…...
idea新建Java-maven项目时,出现Dependency ‘ xxx(jar包名)‘ not found的解决方案
项目场景: 项目场景:使用idea创建maven项目时,导入简单依赖时(本文以mysql-connector-java为例)。 问题描述 问题: 首先,在创建新的maven项目中,出现下列两种情况: &am…...
C# 获取Windows系统版本注意事项
首先通过微软官方文档:https://learn.microsoft.com/zh-cn/windows/win32/sysinfo/operating-system-version了解各个操作系统对应的版本号 下面介绍3种获取版本号的方式及弊端 1. Environment.OSVersion.Version OperatingSystem os Environment.OSVersion;// 判断…...
STM32设计的宠物投喂器(正点原子mini开发板+2.8寸屏)
一、设计需求 【1】 项目背景 在竞争日益激烈的今天,各行各业为提高竞争力,纷纷推出了各种新、奇的事物来吸引消费者。经过长时间的市场调查,发现广大市民及民营企业家大多还采用传统的人工喂养方式,这种方式不但耗费了大量的人力资源,而且由于现在的人力成本的不断增加…...
Python编程——深入了解不可变的元组
作者:Insist-- 个人主页:insist--个人主页 本文专栏:Python专栏 专栏介绍:本专栏为免费专栏,并且会持续更新python基础知识,欢迎各位订阅关注。 目录 一、元组是什么 二、元组的定义 1、相同类型组成元组…...
JVM——类加载与字节码技术—类加载器+运行期优化
5.类加载器 jdk的类加载器具有层级关系。 启动类加载器》扩展类加载器》应用程序类加载器》自定义类加载器 对应类加载器只会负责加载对应目录的类。 双亲委派上级机制 应用程序类加载器加载一个类之前会先查询上级加载器是否已经加载过了该类。然后再让上级询问上上级。都…...
[linux实战] 华为云耀云服务器L实例 Java、node环境配置
系列文章目录 第一章 [linux实战] 华为云耀云服务器L实例 Java、node环境配置 文章目录 系列文章目录前言一、任务拆解二、修改密码三、配置安全规则四、远程登录并更新apt五、安装、配置JDK环境5.1、安装openjdk,选择8版本5.2、检查jdk配置 六、安装、配置git6.1、安装git6.2…...
python面试:使用cProfile剖析程序性能
我们需要安装tuna:pip install tuna 程序执行完毕后,我们会得到一个results.prof,在CMD中输入指令:“tuna results.prof”。 import time import cProfile import pstatsdef add(x, y):resulting_sum 0resulting_sum xresulti…...
leetcode-188-买卖股票的最佳时机 IV
1. 问题描述 https://leetcode.cn/problems/best-time-to-buy-and-sell-stock-iv/description/ 2. 解题代码 public class Solution {public int MaxProfit(int k, int[] prices) {if(prices.Length<2){return 0;}if(k0){return 0;}List<int> listValuenew List<…...
Grounded Language-Image Pre-training论文笔记
Title:Grounded Language-Image Pre-training Code 文章目录 1. 背景2. 方法(1)Unified Formulation传统目标检测grounding目标检测 (2)Language-Aware Deep Fusion(3)Pre-training with Scala…...
成集云 | 钉钉财务费用单同步至畅捷通 | 解决方案
源系统成集云目标系统 方案介绍 财务管理作为企业管理中重要的组成部分,在企业的发展和成长中扮演着重要角色,成集云以钉钉费用单OA审批与畅捷通TCloud系统为例,与钉钉连接器深度融合,通过数据处理和字段匹配实现了费用…...
Redis——》死锁
推荐链接: 总结——》【Java】 总结——》【Mysql】 总结——》【Redis】 总结——》【Kafka】 总结——》【Spring】 总结——》【SpringBoot】 总结——》【MyBatis、MyBatis-Plus】 总结——》【Linux】 总结——》【MongoD…...
URL重定向漏洞
URL重定向漏洞 1. URL重定向1.1. 漏洞位置 2. URL重定向基础演示2.1. 查找漏洞2.1.1. 测试漏洞2.1.2. 加载完情况2.1.3. 验证漏洞2.1.4. 成功验证 2.2. 代码修改2.2.1. 用户端代码修改2.2.2. 攻击端代码修改 2.3. 利用思路2.3.1. 用户端2.3.1.1. 验证跳转 2.3.2. 攻击端2.3.2.1…...
JavaScript(函数,作用域和闭包)
目录 一,什么是函数1.1,常用系统函数1.2,函数声明 1.3,函数表达式二,预解析2.1,函数自调用 2.2,回调函数三,变量的作用域3.1,隐式全局变量 四,作用域与块级作…...
C# 实现 国密SM4/ECB/PKCS7Padding对称加密解密
C# 实现 国密SM4/ECB/PKCS7Padding对称加密解密,为了演示方便本问使用的是Visual Studio 2022 来构建代码的 1、新建项目,之后选择 项目 鼠标右键选择 管理NuGet程序包管理,输入 BouncyCastle 回车 添加BouncyCastle程序包 2、代码如下&am…...
【docker-compose】【nginx】动态配置
需求:部署前端镜像时需要动态修改nginx反向代理的后端服务的ip地址 原.conf配置调整,改为嵌入变量的文件模版Dockerfile 修改,通过envsubst将换将变量注入模版后再运行nginxdocker-compose配置,通过environment动态修改变量 defau…...
FPGA新手入门:用Verilog手搓一个交通灯控制器(附完整代码与仿真)
FPGA实战:从零构建智能交通灯控制系统的Verilog全流程指南 引言 第一次接触FPGA开发时,我被硬件描述语言的独特思维方式所吸引。与软件编程不同,Verilog让我们能够直接描述硬件电路的行为。交通灯控制系统作为数字电路设计的经典案例…...
PasteMD免配置环境:Docker镜像封装,3条命令完成私有化AI格式化服务部署
PasteMD免配置环境:Docker镜像封装,3条命令完成私有化AI格式化服务部署 1. 项目简介:剪贴板智能美化工具 PasteMD是一个完全私有化的AI文本格式化工具,它基于Ollama本地大模型运行框架和强大的llama3:8b模型构建。这个工具的核心…...
5大核心功能深度解析:Umi-OCR开源离线文字识别工具的技术实现与应用指南
5大核心功能深度解析:Umi-OCR开源离线文字识别工具的技术实现与应用指南 【免费下载链接】Umi-OCR OCR software, free and offline. 开源、免费的离线OCR软件。支持截屏/批量导入图片,PDF文档识别,排除水印/页眉页脚,扫描/生成二…...
静态图编译加速失效?分布式梯度同步卡顿?PyTorch 3.0面试官最想听的3层归因逻辑,现在不看明年校招就晚了
第一章:PyTorch 3.0 静态图分布式训练面试概览PyTorch 3.0 并非官方发布的正式版本(截至2024年,PyTorch最新稳定版为2.3),但“PyTorch 3.0”在技术面试语境中常作为考察候选人对**静态图编译、分布式训练前沿演进与系统…...
5个简单步骤掌握LiteDB.Studio:免费开源的LiteDB数据库终极GUI管理工具
5个简单步骤掌握LiteDB.Studio:免费开源的LiteDB数据库终极GUI管理工具 【免费下载链接】LiteDB.Studio A GUI tool for viewing and editing documents for LiteDB v5 项目地址: https://gitcode.com/gh_mirrors/li/LiteDB.Studio 在当今数据驱动的软件开发…...
千问3.5-2B在VSCode中的集成应用:基于CodeX的智能编程助手搭建
千问3.5-2B在VSCode中的集成应用:基于CodeX的智能编程助手搭建 1. 引言 作为一名开发者,你是否经常在编码过程中遇到这些问题:记不清某个API的具体用法?需要快速生成重复性代码片段?遇到报错信息却找不到清晰的解释&…...
Qwen3.5-4B-Claude-Opus保姆级教程:Web端UI功能分区与高级参数联动说明
Qwen3.5-4B-Claude-Opus保姆级教程:Web端UI功能分区与高级参数联动说明 1. 模型与平台介绍 Qwen3.5-4B-Claude-4.6-Opus-Reasoning-Distilled-GGUF 是一个基于 Qwen3.5-4B 的推理蒸馏模型,重点强化了结构化分析、分步骤回答、代码与逻辑类问题的处理能…...
高级CMB2技巧:可重复字段组和动态条件显示
高级CMB2技巧:可重复字段组和动态条件显示 【免费下载链接】CMB2 CMB2 is a developers toolkit for building metaboxes, custom fields, and forms for WordPress that will blow your mind. 项目地址: https://gitcode.com/gh_mirrors/cm/CMB2 CMB2是Word…...
如何快速配置TranslucentTB:Windows任务栏美化终极教程
如何快速配置TranslucentTB:Windows任务栏美化终极教程 【免费下载链接】TranslucentTB A lightweight utility that makes the Windows taskbar translucent/transparent. 项目地址: https://gitcode.com/gh_mirrors/tr/TranslucentTB 想要让Windows任务栏变…...
3个步骤,让猫抓帮你轻松捕获网页视频资源
3个步骤,让猫抓帮你轻松捕获网页视频资源 【免费下载链接】cat-catch 猫抓 浏览器资源嗅探扩展 / cat-catch Browser Resource Sniffing Extension 项目地址: https://gitcode.com/GitHub_Trending/ca/cat-catch 你是否曾经遇到过这样的情况?在网…...
