首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Windows中如何在父子进程传递SOCKET句柄

0x00 背景 Linux由于一切皆文件,不管是文件、管道,还是socket,都可以轻易在父子进程传递;而Windows上会复杂很多。...最近有个需求,需要进行父子进程通信,常见的方案是在创建子进程时通过stdin、stdout、stderr这三个句柄来传递管道句柄,从而达到父子进程通信的目的。...然后,考虑将SOCKET句柄传递给子进程,进而进行通信。 0x01 复制句柄 Windows中有一个复制句柄的API:DuplicateHandle。...hSourceHandle —— 源句柄 hTargetProcessHandle —— 目标进程句柄 lpTargetHandle —— 新句柄指针 dwDesiredAccess...—— 新句柄访问权限 bInheritHandle —— 句柄是否可继承 dwOptions —— 可选行为,取值:DUPLICATE_CLOSE_SOURCE或DUPLICATE_SAME_ACCESS

11610

终于有人将进程通信讲明白了

虽然实际的系统中会有各种不同的实现,但是它们大部分可以被归两类——直接通信和间接通信。直接通信是指通信进程一方需要显式地标识另一方。...当一个进程企图和某其他进程通信时,内核会检查该进程是否拥有一个Capability,是否有足够的权限访问一个连接对象并且对象是指向目标进程的。...这也是为什么控制流切换和数据传输会成为主要的瓶颈。...如果换一个角度,将另一个进程处理数据的代码拉到当前进程,那么我们是不是可以避免控制流的切换(仍然是当前进程处理)以及数据传输(数据已经准备在当前进程中)呢?迁移线程就是围绕这个新的视角进行设计的。...如果使用迁移线程模型,在进程通信过程中,内核不会阻塞调用者线程,但是会让调用者线程执行被调用者的代码。整个过程没有被调用者线程被唤醒,相反,被调用者端更像是一个“代码提供者”。

1.7K20
您找到你想要的搜索结果了吗?
是的
没有找到

System V IPC 共享内存详解

,来操作共享内存 如果某个进程不想通信了,那么就将该进程与共享内存的映射取消掉(去关联),如果需要的话再将共享内存释放掉(看是否其他进程还在通信) ​ 那么就会有人问,调用 malloc 函数不也能在内存中开辟一段空间并且和进程之间映射起来吗...下面我们提出几个概念,为了后面我们引出共享内存申请、调用等等的内容做铺垫: ---- 进程通信,是程序员们专门设计来实现 IPC 的,这和 malloc 虽然理论和思想上差不多,但是却有完全不一样的作用...,进程通信主要是为了解决进程共享的内存问题。...除此之外,共享内存段的生命周期是随操作系统的,而不是进程的(System V版本的通信生命周期都是随操作系统的),也就是说就算没有进程指向该共享内存段,这个内存段也是会存在的,那么如果我们不手动对其释放...那么如果我们将其大小设为 4099 个字节而不是 4096 个字节会发生什么呢 ❓❓❓ ​ 内核在分配大小的时候会进行 4KB 单位向上取整,也就是 8192 字节即 8KB,但是我们会发现创建出来的共享内存打印大小的时候还是

81220

彻底理解 Android Binder 通信架构

为什么Android非要用Binder来进行进程通信呢. 从我个人的理解角度, 曾尝试着在知乎回答同样一个问题 为什么Android要采用Binder作为IPC机制?....但依然还是没有将Binder IPC(进程通信)的过程彻底说透. Binder系统如此庞大, 那么这里需要寻求一个出发点来穿针引线, 一窥视Binder全貌....那么本文将从全新的视角,startService流程分析例子来说说Binder所其作用....ServiceManager是整个Binder通信机制的大管家,是Android进程通信机制Binder的守护进程,Client端和Server端通信时都需要先获取Service Manager接口,...如果你希望家人回信, 那便是非oneway的过程,在上述步骤2后并不是直接返回,而是继续等待着收到家人的回信, 经历前3个步骤之后继续执行: 家人收到信后, 立马写了个回信交给邮递员BC_REPLY;

5.9K41

Android开发艺术探究Note

一旦被调用,其参数bundle一定是有值的,不需要额外的判断是否空。...一个activity中可以有多个intent-filter,一个intent只要能匹配任何一组intent-filter即可成功启动对应的activity 第二章:IPC机制 IPC含义进程通信或跨进程通信...,是指俩个进程进行数据交换的过程。...IPC不是android中独有的,任何一个操作系统都需要有相应的IPC机制。 在android中使用多进程只有一种方法,那就是给四大组件在清单文件中指定process属性,除此之外没有其他方法 ?...,现在有10个不同的业务模块都需要使用aidl来进行进程通信,不需要创建10个、100个服务,可以将所有的aidl放在同一个服务里去管理,用binder连接池,具体看书 ?

59970

进程和线程的概念、区别及进程线程通信

进程与线程的概念,以及为什么要有进程线程,其中有什么区别,他们各自又是怎么同步的? 1....进程通信IPC,线程可以直接读写进程数据段(如全局变量)来进行通信——需要进程同步和互斥手段的辅助,保证数据的一致性。...进程不会相互影响 ;线程一个线程挂掉将导致整个进程挂掉 进程适应于多核、多机分布;线程适用于多核 进程通信的方式: 进程通信主要包括管道、系统IPC(包括消息队列、信号量、信号、共享内存等...但是它不是普通的文件,并不属于其他任何文件系统,并且只存在于内存中。...信号量用于实现进程的互斥与同步,而不是用于存储进程通信数据。 特点: 信号量用于进程同步,若要在进程传递数据需要结合共享内存。

33.1K77

Linux系统内核笔记

UNIX/Linux下几乎任何对象都可以当作特殊类型的文件,可以文件的形式访问 目标文件 里面记录的是一些文件信息,相关条目 设备文件 在系统的/dev目录下存储了所有的设备文件 stderr...):指两个或多个进程之间交换数据的过程叫进程通信 进程之间为什么需要通信?...进程通信方式: 1、简单进程通信:命令行参数,环境变量表、信号、文件 2、传统进程通信:管道 3、XSI进程通信:共享内存、消息队列、信号量 4、网络进程通信:socket 二、传统的进程通信...,管道创建者读,对方写 练习2:使用无名管道进程通信,父进程读,子进程写 三、XSI进程通信 X/open组织UNIX系统设计一套进程通信机制,有共享内存、消息队列、信号量 1、IPC标识...键值依靠的是路径而不是字符串 3、IPC对象的创建用到的宏 IPC_PRIVATE 创建IPC对象时永远创建成功 IPC_CREAT 对象存在则获取,不存在则创建 IPC_EXCL 如果对象已经创建

1.5K20

进程通信(27000字超详解)

所以,在进程之间就需要一个交换数据的空间,并且该 空间(内存)不能由通信双方任何一个提供。   由此可知,进程通信的本质是 先让不同的进程看到同一份资源(通常操作系统提供)。...为什么字节数和我上面给出的并不一致呢?不是说好4kb单位的吗?其实虽然在这里写的是4097但是内核会给我们开辟8kb的空间,并且我们仅仅使用4097字节。...其实,这就是共享内存的一个 缺点:共享内存不提供进程通信协同的任何机制,导致数据不一致!但是它也有自己的 优点:共享内存是所有进程通信最快的!   ...为什么说共享内存是进程通信最快的一种通信方式呢?...而这就是进程通信的前提。   只不过我们并不是通过信号量来传递消息,而是 使用信号量来实现不同进程之间的协同操作!

21010

连 Binder 都不知道?来看看 Android 插件化开发技术分享

Binder的主要工作就是淡化了进程边界,淡化了进程通信的过程。要是想更好的理解Binder就必须从Linux进程谈起。...他们之间既然是隔离的,在需要通信、协作的时候就需要使用进程通信技术(即IPC,也称跨进程通信),我们都知道Android框架是建立在Linux之上的,当然也会面对进程通讯的问题。...为什么使用Binder 在Linux系统中为了达到进程通讯的目的,我们可以选用诸如管道、Socket等技术手段,那么为什么Android选用了Binder这种新型的IPC技术,放弃了原有成熟的技术呢?...任何service在被使用之前,均要向SM(Service Manager)注册,同时客户端需要访问某个service时,应该首先向SM查询是否存在该服务。...,BpBinder会将当前通信中server的handle记录下来,当有数据发送时,会通知BD数据的发送目标

49010

Frida Internal - Part 2: 核心组件 frida-core

比如进程注入、进程通信、会话管理、脚本生命周期管理等功能,屏蔽部分底层的实现细节并给最终用户提供开箱即用的操作接口。...ptrace 实现的,注入之后会在远端进程分配一段内存将 agent 拷贝过去并在目标进程执行代码,执行完成后会 detach 目标进程。...这也是为什么在 frida 先连接上目标进程后还可以用 gdb 等调试器连接,而先 gdb 连接进程后 frida 就无法再次连上的原因。...frida-agent 注入到目标进程并启动后会启动一个新进程与 host 进行通信,从而 host 可以给目标进行发送命令,比如执行代码,激活/关闭 hook,同时也能接收到目标进程执行返回以及异步事件信息等...IPC 通信 在 frida-core 中有许多需要进程通信的行为,比如 frida-server 需要与注入到目标进程中的 agent 进行通信,通知目标进程开启或者关闭 Interceptor;agent

2.5K40

【Linux】SystemV IPC

进程通信 一、SystemV 共享内存 1. 共享内存原理 那么我们知道,进程通信的本质就是先让不同的进程看到同一份资源。我们以前学的管道都是基于文件的,那么我们还有其它方案进行进程通信吗?...那么上面的操作,都不是进程直接做的,因为如果进程去申请空间,那么这个空间就属于这个进程了!就不是共享内存了!所以这些操作都是由操作系统来做的!所以操作系统就必须需要给我们提供一系列的系统调用!...那么这个 key 为什么要我们用户自己形成呢?因为如果是操作系统帮我们形成,我们就无法将这个 key 交给另一个和我们通信进程了,它也不知道我们需要和哪一个进程通信,只有我们用户才清楚!...三、IPC在内核中的数据结构设计 在介绍 IPC 在内核中的数据结构设计前,我们再先认识一个进程通信的方式,就是信号量,信号量也和上面学的两个进程通信方式一样,都是 SystemV 标准的,所以它们都有共同的标准...最后,那么信号量为什么进程通信的一种呢?共享内存和消息队列都可以传数据,所以叫通信,那么信号量没有传数据为什么进程通信的一种呢?

12610

一文搞懂Electron的四种视图容器和它们之间的IPC通信机制

,监听其它进程发来的事件,这是Electron内建ipc通信的基础。...如果请求次数少,每次都由主进程转发也问题不大。但如果请求次数多,考虑到多窗口应用的性能问题,最好能够建立窗口对窗口的直接通信。...这里采用Tag嵌入的业务窗口和主进程通信例(其他的容器对象原理类似),封装的原则主要有两个:1....隔离底层细节业务侧通常不关心通道建立的细节,只希望能够获取数据,执行命令,我们希望把ipc通信封装得尽可能简单简便,方便业务侧理解和使用。...接下来我们实现一个通用的注册事件,在app启动之后就执行绑定,后续任何子业务被创建,都会触发注册流程。

8.1K75

计算机基础知识整理汇总(一)

进程通信IPC,线程可以直接读写进程数据段(如全局变量)来进行通信——需要进程同步和互斥手段的辅助,保证数据的一致性。...进程通信的方式: 进程通信主要包括管道、系统IPC(包括消息队列、信号量、信号、共享内存等)、以及套接字socket。...但是它不是普通的文件,并不属于其他任何文件系统,并且只存在于内存中。...信号量用于实现进程的互斥与同步,而不是用于存储进程通信数据。 特点: 1)信号量用于进程同步,若要在进程传递数据需要结合共享内存。...Client收到确认后,检查ack是否J+1,ACK是否1,如果正确则将标志位ACK置1,ack=K+1,并将该数据包发送给Server,Server检查ack是否K+1,ACK是否1,如果正确则连接建立成功

44620

线程通信(ITC)

为什么通信 通信是人的基本需求。而进程作为人的发明,自然脱离不了人的习性,也有通信需求。如果进程之间不进行任何通信,那么进程所能完成的任务就要大打折扣。...虫洞的一端是开放的,它在宇宙内或宇宙漂移着,另外一端处于一个不同的宇宙,监听是否任何东西从虫洞来。而欲使用虫洞者需要找到虫洞的开口端(发送连接请求),然后穿越虫洞即可。...例如按照传输媒介是否本地,套接字可以分为本地(UNIX域)套接字和网域套接字。...乍一看,这不是管道吗?一头儿读、一头儿写?没错。这的确看上去像管道。但它不是管道。首先它无需固定的读写进程任何进程都可以读写(当然是有权限的讲程)。...如果需要了解具体操作系统的IPC机制的实现。

67620

【Linux】进程通信「建议收藏」

进程通信 1.1. 进程通信的目的 1.2. 如何实现进程通信 2. 管道通信 2.1. 匿名管道 2.1.1 创建匿名管道 2.1.2 . 深入理解匿名管道 2.2. 命名管道 2.2.1....进程通信 1.1. 进程通信的目的 进程之间可能会存在特定的协同工作的场景,而协同就必须要进行进程通信,协同工作可能有以下场景。...,父进程读出数据,这样就实现了简单的父子进程通信: 问题分析:为什么上面的代码中,需保证读端比写端快?...3. system V 标准进程通信 system V:同一主机内的进程通信方案,在OS层面专门进程通信设计的方案 进程通信的本质:让不同的进程看到同一份资源 system V标准下的三种通信方式...共享内存是所有进程通信中速度最快的。 共享内存不提供任何同步或互斥机制,需要程序员自行保证数据安全。

1.3K20

IPC之binder

一、进程空间分配 1、一个进程空间分为 用户空间 & 内核空间(Kernel),即把进程内 用户 & 内核 隔离开来 2、二者区别: a、进程,用户空间的数据不可共享,即用户空间 = 不可共享空间...,即Android的进程是相互独立、隔离的 三、跨进程通信IPC) 1、跨进程通信的原理 a、先通过 进程 的内核空间进行 数据交互 b、再通过 进程 的用户空间 & 内核空间进行 数据交互...AIDL例 代码: package my.itgungnir.ipc.binder; public interface IBookManager extends android.os.IInterface...服务端通过code获取客户端想要访问的目标方法;通过data来获取目标方法所需的参数;执行目标方法后,将返回值写入到reply中。...另外,如果这个方法返回false,则客户端请求失败,我们可以通过这一点来判断客户 端是否有权访问我们的服务; Proxy#getBook():这个方法运行在客户端,其内部实现是这样的:首先创建三个对象

77010

一种解决启动进程传递参数过长的方法

,首先肯定先想到,使用管道(Pipe)或者Socket这类进程通信手段。...我想到了另一个进程通信的方法——内存映射文件。         内存映射文件分为两种,一种是“命名”文件,一种是“匿名”内存映射文件。...“命名”文件一般用于安全性要求不高的进程通信,而“匿名”内存映射文件一般是用于安全性较高的进程通信。我们肯定优先考虑安全性更高的“匿名”内存映射文件。...于是我在创建内存映射文件时判断了下当前创建的“名字”是否在系统中已经存在。如果存在,我会重新随机生成名字并创建该名字的内存映射文件。...我们再看下子进程的数据接收过程。         子进程接收一个“FM”Key的参数,该参数中保存了“命名”内存映射文件的名字,通过该名字,我们可以获取父进程传送过来的数据内容。

98810

面经总结——腾讯面试题汇总(一)

(3)第三次握手:Client收到确认后,检查ack是否x+1,ACK是否1,如果正确则将标志位ACK置1,ack=y+1,并将该数据包发送给Server,Server检查ack是否y+1,ACK...是否1,如果正确则连接建立成功,Client和Server进入ESTABLISHED状态,完成三次握手,随后Client与Server之间可以开始传输数据了。...线程和进程有什么区别? 进程是程序的一次执行。线程可以理解进程执行的一段程序片段。 进程式独立的,这表现在内存空间,上下文环境;线程运行在进程空间内。...线程是属于进程的,当进程退出时该所产生的线程都会被强制退出并清除。线程占用的资源要少于进程所占的资源。进程和线程都可以有优先级。 进程可以通过IPC通信,但线程不可以。...共享内存是最快的ipc通信方式,它是针对其他进程通信方式运行效率低而专门设计的。它往往和其他通信方式如信号量,配合使用来实现进程的同步和通信

1.4K30

IPC远程入侵

一、什么是IPC 进程通信IPC,Inter-Process Communication),指至少两个进程或线程传送数据或信号的一些技术或方法。...进程是计算机系统分配资源的最小单位(严格说来是线程)。每个进程都有自己的一部分独立的系统资源,彼此是隔离的。为了能使不同的进程互相访问资源并进行协调工作,才有了进程通信。...举一个典型的例子,使用进程通信的两个应用可以被分类客户端和服务器,客户端进程请求数据,服务端回复客户端的数据请求。有一些应用本身既是服务器又是客户端,这在分布式计算中,时常可以见到。...这些进程可以运行在同一计算机上或网络连接的不同计算机上。进程通信技术包括消息传递、同步、共享内存和远程过程调用。IPC是一种标准的Unix通信机制。...远控木马(远控木马生成大家看我的相关资料2) 操作步骤: 我们首先来扫描目标主机是否存在IPC弱口令(PS:废话,靶机肯定存在了) 这里我们需要用到Metasploit的smb_login模块,

1.2K30
领券