首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
您找到你想要的搜索结果了吗?
是的
没有找到

Linux进程启动过程分析do_execve(可执行程序的加载和运行)---Linux进程的管理与调度(十一)

execve加载可执行程序的过程 内核中实际执行execv()或execve()系统调用的程序是do_execve(),这个函数先打开目标映像文件,并从目标文件的头部(第一个字节开始)读入若干(当前Linux...v=4.5#L1628 更早期实现linux-2.4 linux-3.18引入execveat之前do_execve实现 linux-3.19~至今引入execveat之后do_execve实现 do_execveat...程序的加载do_execve_common和do_execveat_common 早期linux-2.4中直接由do_execve实现程序的加载和运行 linux-3.18引入execveat之前...do_execve调用do_execve_common来完成程序的加载和运行 linux-3.19~至今引入execveat之后do_execve调用do_execveat_common来完成程序的加载和运行...do_execve则是调用do_execveat_common实现的,依次执行以下操作: 调用unshare_files()为进程复制一份文件表 调用kzalloc()分配一份struct linux_binprm

3.7K31

Hack ELF Loader:用户态execve

下的loader:用户态execve。...研究用户态execve的实现,起初是从攻击的方向去思考的,在linux主机安全中,使用shell命令进行攻击是非常常见的场景,无论是横向移动,还是种马,很难不应用shell命令。...在之前的文章中,无"命令"反弹shell-逃逸基于execve的命令监控(上) 分享过关于shell命令的各种监控方式,其中最难绕过的是内核态的execve监控。...[eauldvj8mz.png] 我的选择是抛弃execve系统调用来执行命令,而是思考自己实现用户态execve,这样就可以彻底摆脱命令监控,如果再延展一下,还会有更深层次的操作。...二.How:如何设计linux elf loader how 用户态execve 是仿照linux内核中execve syscall的原理 ,在应用层实现程序的加载和运行,如果做过windows pe

2.1K10

Why to do,What to do,Where to do 与 Lambda表达式!

Why to do: 首先需要分析问题,找到解决问题的方法,也就是“算法”,我们来推导一下(下面的推导过程采用伪代码): 目标:   List:4==Area:20;   List:8==Area:300...=[20,90,160,230,300]; What to do: 从这个推导过程可以看出,我们要做的工作有:     1,取得列表的最大、最小值;      2,求得单位刻度值;      3,循环处理列表元素...Where to do: OK ,算法我们知道了,要做什么也知道了,剩下的就是具体怎么做了,开始写代码了,写个循环取最大值,再写个循环取最小值,再写两个循环处理列表元素,看来得写N多循环啊! 。。。...可以,.NET 的 Lambda表达式就性,不要去思考“Where to do” 的问题了!

83990

Linux下进程的创建过程分析(_do_fork do_fork详解)--Linux进程的管理与调度(八)

Unix标准的复制进程的系统调用时fork(即分叉),但是Linux,BSD等操作系统并不止实现这一个,确切的说linux实现了三个,fork,vfork,clone(确切说vfork创造出来的是轻量级进程...参见 http://lists.openwall.net/linux-kernel/2015/03/13/30 linux2.5.32以后, 添加了TLS(Thread Local Storage).../* http://lxr.free-electrons.com/source/include/linux/sched.h?...*, int __user *); /* linux2.5.32以后, 添加了TLS(Thread Local Storage)机制, 在最新的linux-4.2中添加了对CLONE_SETTLS...(linux-4.2之前的内核中是do_fork),在_do_fork中通过copy_process复制进程的信息,调用wake_up_new_task将子进程加入调度器中 fork系统调用对应的kernel

2.4K20

Linux进程退出详解(do_exit)--Linux进程的管理与调度(十四)

Linux进程的退出 linux下进程退出的方式 正常退出 从main函数返回return 调用exit 调用_exit 异常退出 调用abort 由信号终止 _exit, exit和_Exit的区别和联系..._exit是linux系统调用,关闭所有文件描述符,然后退出进程。...这个信息我们已经讨论过很多次了 参见 Linux进程ID号–Linux进程的管理与调度(三) Linux进程描述符task_struct结构体详解–Linux进程的管理与调度(一)...调用do_exit()函数,把进程的终止代码传递给它。正如我们将在下面看到的,do_exit()杀死进程而且不再返回。...(exit_code); /* NOTREACHED */ } do_exit流程 进程终止所要完成的任务都是由do_exit函数来处理。

5.7K30

分析Linux系统的执行过程

分析Linux系统的执行过程 一、阅读理解task_struct数据结构 二、分析fork函数对应的内核处理过程do_fork 三、使用gdb跟踪分析一个fork系统调用内核处理函数do_fork 四、...do_execve ,验证您对Linux系统加载可执行程序所需处理过程的理解 七、特别关注新的可执行程序是从哪里开始执行的?...它定义在linux-3.18.6/include/linux/sched.h文件中。 1....六、使用gdb跟踪分析一个execve系统调用内核处理函数do_execve ,验证您对Linux系统加载可执行程序所需处理过程的理解 $ b do_execve 由跟踪结果可知,当调用新的可执行程序时...,会先进入内核态调用do_execve处理函数,并使用堆栈对原来的现场进行保护。

88120

反弹shell-逃逸基于execve的命令监控(上)

linux中,启动外部进程,是通过execve系统调用进行创建的,我们使用strace 打印一下在bash中启动ls的系统调用,第一句就是通过execve启动ls。 ?...但是我们在开发linux程序的时候,执行系统命令,并没有直接使用execve系统调用,这是因为libc/glibc库对execve系统调用封装成了函数,方便我们调用。...方法2: glibc/libc是对linux系统调用(syscall)的封装,我们使用它是为了简化对系统调用的使用,其实我们可以不用它,直接使用汇编 sysenter/int 0x80指令调用execve...四.新方法-无"命令"反弹shell 在已知的绕过方法中,通过shellcode方式绕过内核态的execve监控,算是相对优雅的方式了,我比较喜欢这种,但是这种方式又太麻烦,linux的命令我都要重写成...其实我的需求很简单: 我既想要linux命令原有的功能,又不想用execve syscall的方式启动。 想了想,怎么办呢? 暂时不写了,删了一次,有点敏感,还望见谅 ?

3K20
领券