起因是这样的,c++程序开发后 功能号和指令,校验需要人工去看对照二进制代码,量大还费力, 于是打算利用python 去调用 c++程序去校验指令, 首先要做的就是用python 获取c++程序的...printf() 或cout 的输出; 环境linux python 3.8.x 以下代码实现,获取子程序输出 command='....linux shell指令,如果要用shell 指令如ls 要将false 变成true, 通过指定stderr=subprocess.STDOUT,将子程序的标准错误输出重定向到了标准输出,以使我们可以直接从标准输出中同时获取标准输出和标准错误的信息...p.poll() 返回子进程的返回值,如果为None 表示 c++子进程还未结束. p.stdout.readline() 从 c++的标准输出里获取一行....参考文章1 python中的subprocess.Popen()使用 参考文章 2 python 从subprocess运行的子进程中实时获取输出
文章目录 一、Android 命令行中获取要调试的应用进程的 PID 二、进程注入调试进程内存的 so 库 一、Android 命令行中获取要调试的应用进程的 PID ---- 前置博客 【Android...逆向】修改运行中的 Android 进程的内存数据 ( 运行环境搭建 Android 模拟器安装 | 拷贝 Android 平台可执行文件和动态库到 /data/system ) 先安装 Android...模拟器 , 雷电模拟器 3.75 版本 ; 在模拟器中安装要调试的应用后 , 直接运行 ; 执行 dumpsys activity top|grep pid 命令 , 查看当前正在运行的应用的进程号...PID 为 2328 ; 二、进程注入调试进程内存的 so 库 ---- 在 【Android 逆向】修改运行中的 Android 进程的内存数据 ( 运行环境搭建 Android 模拟器安装 | 拷贝.../tool 2328 命令 , 即可完成 进程 注入操作 ; 如果命令行输出的 hook_entry_addr = 0xa36044e0 不为空 , 是一个实际的地址 , 说明调试动态库注入成功 ; 完整命令行输出
(3)进程是程序在一个数据集合上运行的过程,它是系统进行资源分配和调度的一个独立单位。...PCB:为使程序(含数据)能独立运行,应为之配置一个专门的数据结构即进程控制块(PCB);由程序段、相关的数据段和PCB三部分构成了进程实体。...2.3.2 进程控制块的作用 进程控制块的作用是使一个在多道程序环境下不能独立运行的程序(含数据),成为一个能独立运行的基本单位—进程。...(2) 进程之间的关系 ▪ 子进程可以继承父进程所拥有的资源。 ▪ 当子进程被撤消时,应将其从父进程那里获得的资源归还给父进程。 ▪ 在撤消父进程时,也必须同时撤消其所有的子进程。...重点 进程的概念和状态变换; 进程就是在计算机上运行的可执行文件针对特定的输入数据的一个实例。通过状态机为学生重点讲述进程的就绪、挂起、运行、终止等状态变换。
修改为 0x58 ; 在程序运行时 , 会将上述动态库加载到内存中 , 0x354A8 是在静态文件中 该字节的地址 , 如果加载到内存中 , 该字节的地址就需要进行查找 ; 上图中 , 0x59...0x28 0xB3 0x07 0x00 0x06 0x02 0x7B 0x41 0x08 二、根据内存特征搜索修改点 ---- 这里需要使用到 【Android 逆向】修改运行中的 Android 进程的内存数据...0xB3 0x07 0x00 0x06 0x02 0x7B 0x41 0x08 10 个字节的内存特征 , 主要是查询首字节 0x59 在该进程内存中的地址 ; 三、修改进程内存 查询到要修改的字节在内存中的地址为...0x96A2C355 , 修改该地址的数据 ; 执行 ..../cmd 2328 modify 96A2C355 0x58 0x28 0xB3 0x07 4 命令 , 修改 0x96A2C355 处的进程内存值 , 将从上述地址开始的 4 字节数据修改为 0x58
文章目录 一、Android 系统中调试器进程内存流程 二、编译内存调试动态库以及调试程序 三、博客资源 一、Android 系统中调试器进程内存流程 ---- 修改游戏运行中的内存 , 游戏运行之后..., 游戏进程肯定有对应的内存空间 ; 使用 注入工具 将 一个 libnative.so 动态库 , 注入到游戏运行进程对应的内存中 , 注入成功后 , 在运行内存中就存在了该 libnative.so...动态库 ; libnative.so 动态库的作用是 跨进程接收 外部 另外一个进程 cmd 的指令 , cmd 会告知 libnative.so 动态库 , 要搜索以及修改内存的细节 , 如要搜索什么特征的内存..., 以及修改指定内存地址的指定数据 ; 具体的工作流程 : 通过 IDA 内存分析工具找到要修改的代码特征 ; 使用 cmd 工具远程通知 注入到 被调试进程中的 libnative.so 动态库 ;...libnative.so 动态库 搜索 代码特征 , 并返回内存地址 ; 使用 cmd 工具向 libnative.so 动态库 发送修改 指定内存 的指定 n 字节数据 ; 二、编译内存调试动态库以及调试程序
但是Popen函数有一个缺陷,就是它是一个阻塞的方法。如果运行cmd时产生的内容非常多,函数非常容易阻塞住。解决办法是不使用wait()方法,但是也不能获得执行的返回值了。...他们可以是PIPE,文件描述符或文件对象,也可以设置为None,表示从父进程继承。...参数preexec_fn只在Unix平台下有效,用于指定一个可执行对象(callable object),它将在子进程运行之前被调用。...参数cwd用于设置子进程的当前目录。 参数env是字典类型,用于指定子进程的环境变量。如果env = None,子进程的环境变量将从父进程中继承。...Popen.communicate(input=None) 与子进程进行交互。向stdin发送数据,或从stdout和stderr中读取数据。可选参数input指定发送到子进程的参数。
我们不能将close_fds设置为True同一时候重定向子进程的标准输入、输出与错误(stdin, stdout, stderr)。 假设參数shell设为true,程序将通过shell来运行。...參数cwd用于设置子进程的当前文件夹。 參数env是字典类型,用于指定子进程的环境变量。假设env = None,子进程的环境变量将从父进程中继承。...Popen.communicate(input=None) 与子进程进行交互。向stdin发送数据,或从stdout和stderr中读取数据。可选參数input指定发送到子进程的參数。...注意:假设希望通过进程的stdin向其发送数据,在创建Popen对象的时候,參数stdin必须被设置为PIPE。...在异常对象中,包 括进程的returncode信息。 subprocess模块的内容就这么多。在Python手冊中,还介绍了怎样使用 subprocess来替换一些老的模块,老的函数的样例。
setsid 在新的会话中运行程序 补充说明 setsid 命令子进程从父进程继承了:SessionID、进程组ID和打开的终端。子进程如果要脱离这些,代码中可通过调用 setsid 来实现。...而命令行或脚本中可以通过使用命令 setsid 来运行程序实现。setsid 帮助一个进程脱离从父进程继承而来的已打开的终端、隶属进程组和隶属的会话。...语法 squid [选项] 选项 -d:将指定调试等级的信息发送到标准错误设备 -f:使用指定的配置文件。...而不使用默认配置文件 -k:向 squid 服务器发送指令 -s:启用 syslog 日志 -z:创建缓存目录 -C:不捕获致命信号 -D:不进行 DNS 参数测试 -N:以非守护进程模式运行 -X:强制进入完全调试模式...squidclient squid服务器的客户端管理工具 补充说明 squidclient 命令使用 squid 服务器的客户端管理工具,它可以查看 squid 服务器的详细运行信息和管理 squid
他们可以是PIPE(数据管道),文件描述符或文件对象,也可以设置为None,表示从父进程继承。如果参数shell设为true,程序将通过shell来执行。...参数env是字典类型,用于指定子进程的环境变量。如果env = None,子进程的环境变量将从父进程中继承。...Popen.communicate(input=None) 与子进程进行交互。向stdin发送数据,或从stdout和stderr中读取数据。可选参数input指定发送到子进程的参数。...注意:如果希望通过进程的stdin向其发送数据,在创建Popen对象的时候,参数stdin必须被设置为PIPE。...Popen.pid 获取子进程的进程ID。 Popen.returncode 获取进程的返回值。如果进程还没有结束,返回None。
在前面的例子中,executor提交(submit)任务后都会返回一个Future对象,它表示一个结果的坑,在任务刚刚提交时,这个坑是空的,一旦子线程运行任务结束,就会将运行的结果塞到这个坑里,主线程就可以通过...线程池内部结构 主线程和子线程交互分为两部分,第一部分是主线程如何将任务传递给子线程,第二部分是子线程如何将结果传递给主线程。第二部分已经讲过了是通过Future对象来完成的。...CallQueue是单生产者多消费者,ResultQueue是多生产者单消费者。 CallQueue是个有界队列,它的上限在代码里写死了为「子进程数+1」。...如果子进程们处理不过来,CallQueue就会变满,管理线程就会停止往里面塞数据。...multiprocessing.Queue是支持双工通信,数据流向可以是父到子,也可以是子到父,只不过在concurrent的进程池实现中只用到了单工通信。
2、脱离控制终端,登录会话和进程组 登录会话可以包含多个进程组,这些进程组共享一个控制终端,这个控制终端通常是创建进程的登录终端。控制终端,登录会话和进程组通常是从父进程继承下来的。...一般来说, 必要的是关闭0、1、2三个文件描述符,即标准输入、标准输出、标准错误。因为我们一般希望守护进程自己有一套信息输出、输入的体系,而不是把所有的东西 都发送到终端屏幕上。...如果父进程不等待子进程结束,子进程将成为僵尸进程(zombie)而仍占用系统资源。如 果父进程等待子进程结束,将增加父进程的负担,影响服务器进程的并发性能。...); signal(SIGTSTP,SIG_IGN); signal(SIGHUP,SIG_IGN); //由于子进程会继承父进程的某些特性,如控制终端、登录会话、进程组等,而守护进程最终要脱离控制终端到后台去运行...umask(0); //如果父进程不等待子进程结束,子进程将成为僵尸进程(zombie)从而占用系统资源,如果父进程等待子进程结束,将增加父进程的负担,影响服务器进程的并发性能。
目录 shell环境 什么是子shell 子shell的分类 shell环境 每个shell进程有一个自己的运行环境,不同的Shell进程有不同的Shell环境。...子Shell的本质可以理解为Shell的子进程,子进程的概念是由父进程的概念引申而来的,在Linux系统中,系统运行的应用程序几乎都是从init(pid为1的进程)进程派生而来的,所有这些应用程序都可以视为...对于Shell的子进程来说,它是一个从父级Shell进程派生而来的新的Shell进程,我们将这种新的Shell进程称为这个父级Shell的子Shell。...可以使用$BASH_SUBSHELL变量来查看从当前进程开始的子shell层数,$BASHPID查看当前所处BASH的PID,这不同于特殊变量$$值,因为$$在大多数情况下都会从父shell中继承。...注释:使用 fork() 函数可以创建一个子进程;除了 PID(进程ID)等极少的参数不同外,子进程的一切都来自父进程,包括代码、数据、堆栈、打开的文件等,就连代码的执行位置(状态)都是一样的。
守护进程的概念 守护进程(Daemon)一般是为了保护我们的程序/服务的正常运行,当程序被关闭、异常退出等时再次启动程序/恢复服务。...fork 守护进程的父进程是 init 进程,在创建时先从父进程 fork 出来一个子进程,退出父进程,这时子进程变成孤儿,就成了 init 的子进程。...此时它可能会再申请一个控制终端,所以我们再 fork 一下,并只保留新的子进程,这样就不是会话组长了,就不能申请控制终端了。 close(fd) 之后再关闭从父进程继承的文件描述符。...也不一定要根目录(这种情况,运行需要超级权限),可以选择一个不需要卸载的路径。 void daemon() { // fork 出一个子进程。...// 该子进程会成为新的会话和进程组的组长。
所以,对于我们刚开始的现象很好解释了: 父进程和子进程都有自己的独立的进程地址空间,且都有自己的页表结构,子进程由父进程创建,所以子进程的地址空间是从父进程拷贝而来,刚开始的g_val经过映射指向同一个物理内存...,所以刚开始看到的都是100 后来子进程修改了自己地址空间的g_val的值,当操作系统通过页表映射发现g_val的值是共享的,但是我们知道进程具有独立性,所以操作系统为了保证进程的独立性,当子进程或者父进程任何一方尝试对共享数据进行写入...,保证了进程的独立性,而对于上面我们所说的父进程和子进程而言,子进程的地址空间从父进程拷贝,页表都指向同一块物理内存,但是即使此时的数据是共享的,在修改数据的时候也会发生我们所说的写时拷贝,保证了进程的独立性...也就是在整个CPU运行过程中,CPU并没有见到物理地址,用的都是虚拟地址。 另外,对于磁盘内可执行程序编译好,这个可执行程序的地址不叫虚拟地址,是逻辑地址。...说了这么多,mm_struct是什么样子的,打开VScode,我们可以来看一看mm_struct的源代码: 每个进程都有对应的task_struct,在其属性中有mm_struct,可以找到进程的地址空间
大家好,又见面了,我是你们的朋友全栈君。 如例子中: #!...定义为环境变量没有用的,环境变量只是在子进程创建的时候可以从父进程复制到子进程,它无法实现从子进程往父进程传递,也不能在子进程运行期间从父进程获得新值。 解决办法是不要产生子进程 如下: #!
但是Popen函数有一个缺陷,就是它是一个阻塞的方法。如果运行cmd时产生的内容非常多,函数非常容易阻塞住。解决办法是不使用wait()方法,但是也不能获得执行的返回值了。...参数preexec_fn只在Unix平台下有效,用于指定一个可执行对象(callable object),它将在子进程运行之前被调用。...参数cwd用于设置子进程的当前目录。 参数env是字典类型,用于指定子进程的环境变量。如果env = None,子进程的环境变量将从父进程中继承。...Popen.communicate(input=None) 与子进程进行交互。向stdin发送数据,或从stdout和stderr中读取数据。可选参数input指定发送到子进程的参数。...注意:如果希望通过进程的stdin向其发送数据,在创建Popen对象的时候,参数stdin必须被设置为PIPE。
参考《Linux/Unix 系统编程手册》 变成daemon,一个程序需要完成以下步骤: 1、执行一个fork(),父进程退出,子进程继续执行。...(daemon成为了init进程的子进程) --假设daemon是从命令行启动,父进程的终止会被shell发现,之后shell会显示出另一个shell提示符并让子进程在后台运行; -...-子进程被确保不会成为一个进程组的首进程(它从父进程继承了进程组ID,并拥有了自己唯一的进程ID,该进程ID与继承来的进程组ID是不同的,这样才能成功执行下面一个步骤) 2、子进程调用setsid...(),再次让父进程退出并让孙子进程继续执行,(这样确保了子进程不会成为会话组长,进程永远不会重新请求一个控制终端--根据SystemV中获取终端规则) 4、清除进程的umask(确保daemon...关闭daemon从父进程继承而来的所有打开着的文件描述符(由于daemon失去了控制终端,对0,1,2描述符完全可以关闭;无法卸载长时间运行的daemon打开的文件所在的文件系统----文件描述符是一种有限资源
文章目录 一、运行环境搭建 Android 模拟器安装 二、拷贝 Android 平台可执行文件和动态库到 /data/system 目录下 一、运行环境搭建 Android 模拟器安装 ---- 使用低版本的雷电模拟器调试应用...log=3 下载能下载的最老的版本 , 这个版本是 5.0 的 Android 系统 ; 雷电模拟器 3.75 版本下载地址 : https://d6a051ab2d3dbdc5cb99b5b1cd147de7...该模拟器进入后 , 直接有 root 权限 , 方便调试 ; 二、拷贝 Android 平台可执行文件和动态库到 /data/system 目录下 ---- 将上一篇博客 【Android 逆向】修改运行中的...Android 进程的内存数据 ( Android 系统中调试器进程内存流程 | 编译内存调试动态库以及调试程序 ) 编译的进程调试相关工具 , 拷贝到 Android 模拟器中 ; 在 雷电模拟器...中 , 创建 /data/system/debug 目录 , 用于存放进程调试相关目录 ; 2|root@aosp:/data/system # mkdir debug root@aosp:/data/
进程 进程 Process是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础,进程是线程的容器(来自百科)。进程是资源分配的最小单位。...出来的每个进程都拥有自己的独立空间地址、数据栈,一个进程无法访问另外一个进程里定义的变量、数据结构,只有建立了 IPC 通信,进程之间才可数据共享。...由于底层细节不被应用层感知,所以子进程中,开发者会有一种服务器对象就是从父进程中直接传递过来的错觉。 Node进程之间只有消息传递,不会真正的传递对象,这种错觉是抽象封装的结果。...多进程 vs 多线程 对比一下多线程与多进程: 属性 多进程 多线程 比较 数据 数据共享复杂,需要用IPC;数据是分开的,同步简单 因为共享进程数据,数据共享简单,同步复杂 各有千秋 CPU、内存...编码、调试复杂 编码、调试复杂 可靠性 进程独立运行,不会相互影响 线程同呼吸共命运 多进程更好 分布式 可用于多机多核分布式,易于扩展 只能用于多核分布式 多进程更好 在看点这里 ?
进程 进程 Process是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础,进程是线程的容器(来自百科)。进程是资源分配的最小单位。...出来的每个进程都拥有自己的独立空间地址、数据栈,一个进程无法访问另外一个进程里定义的变量、数据结构,只有建立了 IPC 通信,进程之间才可数据共享。...由于底层细节不被应用层感知,所以子进程中,开发者会有一种服务器对象就是从父进程中直接传递过来的错觉。 Node进程之间只有消息传递,不会真正的传递对象,这种错觉是抽象封装的结果。...多进程 vs 多线程 对比一下多线程与多进程: 属性 多进程 多线程 比较 数据 数据共享复杂,需要用IPC;数据是分开的,同步简单 因为共享进程数据,数据共享简单,同步复杂 各有千秋 CPU、内存...编码、调试复杂 编码、调试复杂 可靠性 进程独立运行,不会相互影响 线程同呼吸共命运 多进程更好 分布式 可用于多机多核分布式,易于扩展 只能用于多核分布式 多进程更好
领取专属 10元无门槛券
手把手带您无忧上云