- 博客(13)
- 收藏
- 关注
原创 2023-2024-1 20232829《Linux内核原理与分析》第十三周作业
缓冲区溢出是指程序试图向缓冲区写入超出预分配固定长度数据的情况。这一漏洞可以被恶意用户利用来改变程序的流控制,甚至执行代码的任意片段。这一漏洞的出现是由于数据缓冲器和返回地址的暂时关闭,溢出会引起返回地址被重写。我们计算 shellcode 的地址为 0xffffcfb0 + 0x64 = 0xffffd014。修改 exploit.c 文件,将 \x?修改为计算的结果 \x14\xd0\xff\xff,注意顺序是反的。最后获得的这个 0xffffcfb0 就是 str 的地址。
2023-12-17 22:06:08
57
1
原创 2023-2024-1 20232829《Linux内核原理与分析》第十二周作业
通过Linux能力,进程可以被授予超级用户权限的子集,允许它们执行特定的特权操作,而无需完全特权。setuid是类unix系统提供的一个标志位, 其实际意义是set一个process的euid为这个可执行文件或程序的拥有者(比如root)的uid, 也就是说当setuid位被设置之后, 当文件或程序(统称executable)被执行时, 操作系统会赋予文件所有者的权限, 因为其euid是文件所有者的uid。/bin/bash 有某种内在的保护机制可以阻止 Set-UID 机制的滥用。
2023-12-10 17:51:11
53
原创 2023-2024-1 20232829《Linux内核原理与分析》第十一周作业
通过对用户进行身份认证,再根据不同用户授予不同权限,访问控制实现了两个目标:防止非法用户进入系统、阻止合法用户对系统资源的非法使用。操作系统安全是指保护计算机系统中的软件、硬件和数据免受未经授权的访问、破坏、损坏或泄露的一系列措施。用户名和密码: 这是最常见的身份验证方式,用户需要提供一个唯一的用户名和相应的密码。访问控制的主要目标是确保系统资源只能被授权用户或系统实体访问,以维护系统的机密性、完整性和可用性。(1)按系统安全策略对用户的操作进行访问控制,防止用户对计算机资源的非法访问。
2023-12-03 15:35:07
65
1
原创 2023-2024-1 20232829《Linux内核原理与分析》第十周作业
虚拟机技术是通过硬件虚拟化扩展、虚拟化层(Hypervisor)、虚拟设备和虚拟化管理实现的。硬件虚拟化扩展允许虚拟机在物理硬件上直接运行,而Hypervisor是虚拟机的核心,分为Type 1和Type 2两种类型。虚拟化管理工具简化虚拟机的创建、启动和管理任务。虚拟设备和I/O虚拟化模拟对物理设备的访问,内存虚拟化管理虚拟机的内存分配和访问。CPU虚拟化通过硬件扩展将虚拟机指令集映射到物理CPU。调度和资源管理确保虚拟机有效地共享物理资源,提高性能和资源利用率。
2023-11-26 17:57:24
54
1
原创 2023-2024-1 20232829《Linux内核原理与设计》第九周作业
实验八:理解进程调度时机跟踪分析进程调度与进程切换的过程实验要求:理解 Linux 系统中进程调度的时机,可以在内核代码中搜索 schedule()函数,看都是哪里调用了 schedule(),判断我们课程内容中的总结是否准确;使用 gdb 跟踪分析一个 schedule()函数 ,验证您对 Linux 系统进程调度与进程切换过程的理解;推荐在实验楼 Linux 虚拟机环境下完成实验。特别关注并仔细分析 switch_to 中的汇编代码,理解进程上下文的切换机制,以及与中断上下文切换的关系。
2023-11-19 22:01:40
37
原创 2023-2024-1 20232829《Linux内核原理与分析》第八周作业
最终生成一个完整的可执行程序文件。常见的节区有代码段(.text)、数据段(.data)、只读数据段(.rodata)、符号表(.symtab)等。程序头表描述了ELF文件在内存中的布局,包括加载和执行所需的段(段是ELF中的逻辑组织单位)信息。ELF文件头位于文件的开头,包含了描述整个文件的基本信息,如文件类型、目标体系结构、入口点地址、程序头表和节头表的偏移等。除了上述主要组成部分,ELF文件还包含其他一些辅助信息,如动态链接信息、重定位表、调试信息等,用于支持动态链接、程序调试和代码重定位等功能。
2023-11-12 17:04:11
24
原创 2023-2024-1 20232829《Linux内核原理与分析》第七周作业
创建一个新进程在内核中的执行过程大致如下:使用系统调用Sys_clone(或fork,vfork)系统调用创建一个新进程。这些系统调用会通过调用do_fork函数来实现进程的创建。Linux通过复制父进程的进程控制块(PCB)中的task_struct结构来创建一个新进程,并为新进程分配一个新的内核堆栈。需要修改复制过来的进程数据,例如进程ID(pid)、进程链表等。这一步通过执行copy_process和copy_thread函数来完成。
2023-11-04 09:53:28
37
1
原创 2023-2024-1 20232829《Linux内核原理与分析》第六周作业
系统调用命令的具体格式因系统而异,但由用户程序进入系统调用的步骤及执行过程大体相同。其执行过程如下:1 .保护用户程序的现场信息,同时把系统调用命令的编号等参数放入指定的存储单元;2 .根据系统调用命令的编号查找系统调用入口表,找到相应系统功能调用子程序的入口地址;3 .转到该子程序执行,当系统调用命令执行完毕,相应的结果通常返回给参数,这些参数放在指定的存储单元里;
2023-10-29 21:03:49
69
原创 2023-2024-1 20232829《Linux内核原理与分析》第五周作业
实验内容:本次实验选择了2号调用fork调用来做实验:fork函数执行完毕后,如果创建新进程成功,则出现两个进程,一个是子进程,一个是父进程。在高执行级别下,代码可以执行特权指令,访问任意的物理地址,这种CPU执行级别就对应着内核态。一般来说在Linux中,地址空间是一个显著地标志:0xc0000000以上的地址空间只能在内核态下访问,都可以访问0x00000000-0xbfffffff的地址空间在两种状态下。如:用户态栈顶地址、当时的状态字、当时的cs:eip的值。必须要保存用户态的寄存器上下文。
2023-10-22 15:38:36
61
1
原创 2023-2024-1 20232829《Linux内核原理与分析》第四周作业
总结: init task() (PID为0)在创建了init 进程后,调用cpu idle() 演变成了idle 进程,执行一 次调度后,init进程运行。1号内核线程负责执行内核的部分初始化工作及进行系统配置,最后调用do_ execve加载init程序,演变成init进程(用户态1号进程),init进程是内核启动的第一个用户态进程。kthreadd (PID为2)进程由0号进程创建,始终运行在内核空间,负责所有内核线程的调度和管理。
2023-10-15 19:04:51
69
1
原创 2023-2024-1 20232829《Linux内核原理与分析》第三周作业
patch -p1 < …/mykernel_for_linux3.9.4sc.patch:在当前目录下的文件系统中应用名为mykernel_for_linux3.9.4sc.patch的补丁,该补丁文件将修改源代码文件。编辑mypcb.h mymain.c myinterrupt.c三个文件。操作系统工作的核心概念是进程,操作系统实现进程的调度。是以进程为基本单位。3.完成一个简单的时间片轮转多道程序内核代码。1.使用使用实验楼的虚拟机打开 shell。2.搭建起的内核如图所示。
2023-10-08 21:10:19
109
原创 2023-2024-1 20232829《Linux内核分析与原理》第二周作业
movl %edi, -4(%rbp):将传入的参数 %edi 的值保存到当前栈帧的相对地址为 -4(%rbp) 的位置上,这是局部变量的存储位置。movq %rsp, %rbp:将当前栈顶指针(%rsp)的值复制到栈帧基址指针(%rbp),建立了一个新的栈帧。movl %eax, %edi:将 %eax 中的值复制给 %edi 寄存器,这是用于调用 g 函数的参数。movl %edi, -4(%rbp):将传入的参数 %edi 的值保存到当前栈帧的局部变量中。1.通过如下图所示命令创建mian.c文件。
2023-09-24 16:29:29
40
1
原创 2023-2024-1 20232829《Linux内核分析与原理》第一周作业
2023-2024-1 20232829《Linux内核分析与原理》第一周作业
2023-09-17 19:30:52
85
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人