IPC(进程间通信),Remote Call(远程调用),IDL(接口描述语言)架构及其在BMP(BREW移动平台),Android中的应用浅析

SOC-IPC核间通讯 IPC通讯是AUTOSAR体系结构中的核心组成部分,它使得不同的软件组件可以相互通信、协同工作,从而实现整车系统的功能。IPC可以理解为核间通讯在多核处理器系统中,不同的处理器核之间可以通过共享内存、消息传递等方式进行IPC核间通讯。共享内存是指多个处理器核共享同一块物理内存,通过在内存中设置标志位或锁等机制来控制对共享数据的访问。消息传递是指不同处理器核之间通过发送和接收消息来进行通信,其中消息可以是数据、信号等。 阅读详情

由于本人才初识BMP和Android,所以仅仅是自己的一些肤浅认识,难免有错误,欢迎指正。

 

首先我们看IPC,现代操作系统都是多进程,多线程的。进程间存在地址边界,无法直接跨越。所以,两个进程间无法进行直接的请求,传递和调用。IPC是操作系统内核提供的一种跨进程的机制,允许两个进程间使用IPC来传递数据。 虽然某些情况下我们可以将Service直接加载到自己的进程中调用服务,此时可以进行简单的本地调用(Local Call),但是,从安全,性能和共享的角度出发,更多的情况下,Service都是运行在自己独立的进程中,此时Client使用其服务时,就必须跨越进程,那么就涉及到了IPC。 所以,在现代操作系统或者移动平台上,IPC是无处不在的。

 

 

IPC是操作系统层面提供的一种很底层的机制。你可以把它看做基础设施,传输媒介甚至底层协议。它只负责进程间传递数据,究竟数据是什么含义,发送,接收方如何处理这些数据等等都不是它的处理范围。 而这些,恰恰是上层需要为特定场景制定特殊的解决方案,框架,制定一致的规约,协议, 就像TCP/IP一致化了底层传输机制,但是面对不同应用场景的数据传输,必须由不同的应用层协议来协调C/S,以便能理解对应的语义,从而正常收发。 在非本地(同一进程内称之为本地)的复杂数据传递,调用中,尤其需要制定这样一套规则,来一致的解决问题。比如,远程对象调用。 Remote Call就是为此而生, 虽然初期其只应用在真正的两台主机间的远程调用,但目前,其思想已经应用在了任何非本地的服务调用中,比如,同一机器的两个不同进程间,同一机器的两个CPU间,两个机器的两个进程间。这是由于,其一致的解决框架可以屏蔽底层媒介(Inter Process, Inter Processor, Inter Machine)的差异性。 目前最典型的远程对象调用机制主要有 序列化对象(比如RMI) 和  基于远程代理的对象请求(如CORBA)

 

序列化对象方式

这种方式主要能够完成简单的单次对象远程传递。 将待传递的对象内存空间进行序列化,然后将序列化数据经过底层传输机制(IPC或者网络等)传递到目标进程内,然后在目标进程内进行反序列化,在内存中生成对象。 

 

基于代理的对象调用方式

这种方式主要基于远程代理设计模式,适合长时间的面向连接的直接对象方法调用。基本思想是在Client端和Server端都增加一个代理(客户端称之为Stud,Server端称之为skeleton),调用请求由Stub封装并基于底层传输机制(IPC或者网络等)传送到skeleton,skeleton解封装后,调用Server的方法,然后再反方向返回。 这种方式,可以使得Client对于远程对象的范围,就如同本地对象一样。

 

 

IDL

 

IDL的伟大之处不是发明了一种新的描述语言,而是解决了异构系统间的远程通信,同时也给出了一个参考的模型(基于远程代理的模型)。一般的平台,当对于远程对象调用的方式基于代理模型实现时,一般都允许开发者为Server写一个IDL的描述,描述Server支持的接口服务,同时,平台会提供一个特殊的xidl工具,如微软的midl,高通的qidl,java的jidl,android的aidl等,主要的作用是,将通用的idl描述语言,翻译成特定的编程语言的接口定义(如C,Java,C++等),同时,自动生成相应的Stub,skeleton的参考代码,该代码的实现与具体的平台绑定,以利用特定的底层传输机制来实现远程访问。 比如,jidl生成的Stub,skeleton中,应该就是使用基于网络的远程对象访问。 而aidl生成的Stub,skeleton中,就是利用Android的IPC机制来完成Stub与skeleton间的通信。

 

 

BMP,android中的应用

 

BMP中的远程对象调用仅使用了基于Stub,skeleton的代理模型,并没有利用序列化对象的方式。 BMP提供QIDL工具,允许开发者为支持远程调用的Service组件写一个IDL的接口描述文件,然后利用QIDL自动生成特定于BMP平台的Stub,skeleton代码。 此后,Client使用远程对象时是完全透明的,完全和使用本地对象的方式一致。

 

Android中使用了远程代理的方式。 Activity,Service间的Intent传递,Service的远程调用,都使用了远程代理的方式,允许开发者为支持远程调用的Service组件写一个IDL的接口描述文件,然后利用AIDL自动生成特定于Android平台的Stub,skeleton代码(内部其实利用了IPC)。 此后,Client使用远程对象时是完全透明的,完全和使用本地对象的方式一致。

内核上项目【远程call】 本次项目代码量过多,但思路相对简单,主要功能为挂起目标主线程,将主线程TrapFrame的rip进行修改跳转到指定的shellcode位置,该ShellCode我写的是弹出MessageBox,然后再恢复线程,最后创建一个工作队列,让系统将我们的ShellCode等痕迹进行清除,因为我只写了关于64位的进程操作,如果是操作32位进程,要在定位到Context结构,进而修改eip。 阅读详情

相关推荐

远程调用内核接口(remote call kernel)

RCK(remote call kernel 缩写)为远程调用内核, 其通讯协议为自定义数据流协议。 RCK 负责远程调用过程中的数据组织, 并不关心实际物理通讯协议, 实则属于逻辑层通讯 协议。 RCK 通讯槽接口(RCKSlot)负责数据接收和发送, 属于通讯的适配层, 由第三方来实现 实际的数据传输接口。

Kyee编程之道 3703

IPC进程间通信 D-Bus(Desktop Bus)快速入门(以libdbus-glib库为例)

文章目录一、D-Bus简介1、D-Bus简介2、不同IPC通信方式比较3、D-Bus特性二、D-Bus架构2、D-Bus接口层3、D-Bus总线层测试demo4、D-Bus封装层三、D-Bus术语1、D-Bus术语简介2、总线(Bus)3、地址(Address)4、连接名(Bus Name) 一、D-Bus简介 1、D-Bus简介 D-Bus是Desktop Bus的缩写,是针对桌面环境优化的IPC(InterProcess Communication)机制,用于进程间的通信或进程与内核的通信。 D-Bus

Dontla的博客 4265

2.1 IPC机制简介与基础概念

1. 简介IPC:进程间通信(Inter Process Communication),指两个进程之间进行数据交换 进程与线程 进程:一个执行单元,移动设备上的一个应用或程序。一个进程可以包含多个线程。Android中最有特色的进程间通信方式是Binder 线程:CPU调度的最小单元 多进程是进程间通信的前提,IPC应用场景: 一个应用采取多进程模式实现,应用自身需要传递数据 两个应用需要传递

jieqiong1的博客 2483

TCP、UDP和IPC

TCP是位于传输层的协议,它是面向链接的,提供全双工的服务,数据流可以双向传输。TCP是一种可靠的传输,它拥有三次握手机制保证数据传输的可靠性,如果对方没有接收到数据则会一直尝试重新传输。像FTP文件传输,远程登陆,HTTP,SMTP,HTTPS等等需要保证传输完整性的都是基于TCP协议。UDP也是位于传输层的协议,它是无连接的,面向报文的协议。UDP只能使用尽最大努力交付,并不能保证数据100%的可靠传输,即便有丢包依然会继续传输。

fanzhengba的博客 1072

手把手教你用内核远程call实现64位进程注入(附完整ShellCode示例)

本文深入探讨了在Windows 64位环境下,通过内核态直接操作线程TrapFrame结构实现进程注入的高级技术。文章提供了从驱动框架设计、用户态-内核态通信,到定位修改TrapFrame、编写Shellcode及执行环境恢复的完整实战指南,并附有详细的代码示例,为安全研究人员和开发者提供了绕过用户态检测、实现底层远程代码执行的新思路。

weixin_28396629的博客 342

深度学习与神经网络有什么区别

人工神经网络(ArtificialNeuralNetwork,即ANN)是从信息处理角度对人脑神经元网络进行抽象,是20世纪80年代以来人工智能领域兴起的研究热点,其本质是一种运算模型,由大量的节点(或称神经元)之间相互联接构成,在模式识别、智能机器人、自动控制、生物、医学、经济等领域已成功地解决了许多现代计算机难以解决的实际问题,表现出了良好的智能特性。...

super67269的博客 8487

进程间通信(IPC)介绍

进程间通信(IPC)介绍

胖猫的博客 975

手把手教你用FFmpeg实操:H.264转码、AVS2编码与H.265/HEVC参数调优避坑指南

本文详细解析了使用FFmpeg进行H.264转码、AVS2编码与H.265/HEVC参数调优的实战技巧。通过具体命令示例和参数详解,帮助开发者避开常见编码陷阱,提升视频处理效率和质量,特别适合音视频开发者和内容创作者参考。

weixin_30889885的博客 482

CreateRemoteThread_远程CALL调用代码实现原理。

各位亲爱的朋友: 我们又在第11款VIP课程相会了,那么,这节课,我将与您分享远程CALL调用代码实现原理。 编程思路:编程的话您只需要编写一次,了解到编写的效果,以后想要这种功能效果都是这么编写。对编写的代码越熟悉,就越容易延伸它与修改它。 具体编写技巧: 源码借箭:13.赞!VC++如何调试出代码异常错误地方。 CreateRemoteThread 创建一个在其它进程地址空间中运行的线程 HA

2877

用C#和MQTTnet在WinForm里做个简易物联网监控后台(附完整源码)

本文详细介绍了如何使用C#和MQTTnet库在WinForm中构建一个简易物联网监控后台。通过实战案例,包括环境配置、MQTT服务端实现、客户端监控功能及高级优化技巧,帮助开发者快速搭建高效的物联网监控系统,适用于工业自动化和智能家居场景。

weixin_29540599的博客 392

KV260-从开箱到人脸识别(小白入门)

波特率选择115200,数据为8位,停止位1位,无奇偶校验,点击链接即可完成通讯。空白的盘格式化之后及进行挂载,这时会被我们的操作系统接手管理,这时就具有了操作系统的属性,复制文件就是在操作系统下的文件系统基础上进行的操作,这个过程是相对的地址进行操作,因此,复制文件是在操作系统环境下完成的更高级的操作模式。空白的盘相当于一整块空白的存储单元,因为没有格式化也不具有文件系统的属性,只有当外部的硬件或者软件写进空白的区域,这种方式是对绝对物理地址进行的操作,因此,烧录文件是独立于操作系统的更低级的写入方式。

qq_53252845的博客 3814

驱动远程call-调用ACE保护剑灵游戏盾地传送技能

用驱动内核级编程技术,执行汇编代码。

hzw320的博客 241

别再凭感觉估算!用ADS的EBOND库精确仿真Bonding线寄生电感(附完整参数设置指南)

本文详细介绍了在ADS中使用EBOND库精确仿真Bonding线寄生电感的方法,帮助射频工程师在毫米波频段实现高精度建模。通过三维物理参数和电磁场求解算法,EBOND模型能将误差控制在5%以内,显著提升电路性能。文章还提供了完整的参数设置指南和实战操作步骤,适用于5G毫米波前端模块等高频应用场景。

weixin_28730131的博客 504

C++远程调用Call步骤

MyGame:指定窗口标题 address:远程调用地址 //查找窗口句柄 HWND h=::FindWindow(NULL,"MyGame"); //进程ID DWORD id; LPDWORD pid=&id; //取得指定窗口的进进程ID,存放到变量ID里 ::GetWindowThreadProcessId(h,pid); //获取访问进程的权限,存放至h...

weixin_30436101的博客 2014

Claude Code、Codex、Gemini CLI、OpenCode 和 OpenClaw 配置管理太麻烦?试试这个统一管理工具

还在为 Claude Code、Codex、Gemini CLI 等 AI CLI 配置烦恼?🤯 这款桌面工具支持五大助手统一管理,一键切换 50+ 服务商,MCP 和 Skills 集中管理 🛠️,跨平台支持,让你的 AI 编程更高效 ⚡

XiaoqiangClub的博客 912

Universal Robot——在Gazebo中模拟UR5机器人

今天的目标是在Gazebo安装我们的ur5机器人。Gazebo是一个流行的模拟工具,它不仅可以让你像在Rviz中一样可视化你的机器人,而且还内置了一个物理引擎。这样你就可以在更真实的环境中测试你的机器人应用程序。我们将查看我们需要的属性 添加对我们的机器人——我们的order的描述,以模拟它以及如何在Gazebo中生成我们的机器人。

如果想成为中心,那么就到中心去吧。 1969

逆向(二):CALL

逆向分析之CALL

八块吮指原味鸡的博客 2168

华为od 面试八股文_前端_01_含答案

华为od 面试八股文_前端_01_含答案

MISAYAONE的博客 2744

使用易语言实现远程CALL调用

Windows基础

qq_50749602的博客 6576

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

远程注入代码,远程调用Call

1、远程注入代码,调用打坐CALL      HANDLE CreateRemoteThread(  HANDLE hProcess,        // 在指定的进程句柄里创建线程  LPSECURITY_ATTRIBUTES lpThreadAttributes,  //安全结构指针 nil  DWORD dwStackSize,      // 初始创建线程堆栈大小0  LPT

crkres9527 9056

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

赞!VC++编程创建远程线程式调用CALL_VirtualAllocEx_WriteProcessMemory_CreateRemoteThread_WaitForSingleObject

16赞!VC++编程创建远程线程式调用CALL。 借箭源码:14.解密!远程CALL调用代码实现原理。 VirtualAllocEx 在指定进程里 申请一块内存 LPVOID WINAPI VirtualAllocEx(   __in      HANDLE hProcess, //进程句柄   __in_opt  LPVOID lpAddress, //指定分配的内存地址 N

2405

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

访外.挂之无参数Call的远程调用...

本文章中的示例程序下载地址: CallTest.zip http://download.youkuaiyun.com/download/friendan/4367002 RemoteCall.zip http://download.youkuaiyun.com/download/friendan/4367006 本程序完整源码下载地址: http://download.youkuaiyun.com/down...

weixin_34284188的博客 408

C++ 线程注入 调用CALL 启动其他功能

主要函数开启线程 CreateThread 需要时时获取或步骤繁琐的建议开启线程 CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)调用写好的函数或者CALL, 这个可以是自定义的参数, 0, NULL); 封装调用call函数。就可以直接使用这个SendTextMessage函数 //****************************...

qq_42095701的博客 2648

驱动调用栈

[ 14.873268] [<ffffff800808c078>] dump_backtrace+0x0/0x4b0 [ 14.881364] [<ffffff800808c53c>] show_stack+0x14/0x1c [ 14.888952] [<ffffff80087579d8>] dump_stack+0x78/0x98 [ 14....

星空探索 736

IPC机制(一)---基础知识

IPC机制(一)---基础知识

weixin_51065489的博客 3110

remote call

pdl_handle = dlopen(lib_file_path, RTLD_LAZY); pfFunval = dlsym(pdl_handle, call_info->func_name); gcc -fPIC -shared libdemo.c -o libdemo.so gcc -rdynamic -o app fei_agent_func.c -ldl 转...

anjuenz87013的博客 570
上一篇: BREW你问我答
下一篇: 爱之深,期之切, 历数BREW几宗“罪”
nicefuture
博客等级 码龄23年 75粉丝 60原创
评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值