Advanced OS
文章平均质量分 59
Icoding_F2014
相信代码可以变化世界
展开
-
win10中 openssh-server启动GUI程序
目前遇到一个问题:ssh-server是一个win10服务器,把它叫做S主机吧,里面安装了openssh-server,同时以服务的形式启动ssh服务。ssh-client是任意一个操作系统的主机,里面安装了openssh-client,把它叫做C主机吧。需求:现在有个C通过ssh通道连接到S,启动某特定GUI程序,比如chrome。问题:chrome的GUI界面没有启动,不过进程列表是可以看到程序在运行的。问题定位:https://stackoverflow.com/questions/5原创 2021-12-29 19:34:13 · 2210 阅读 · 0 评论 -
(一)bootsect.s 引导区代码剖析
当机器加电后,首先强制把CPU里面的CS:IP设置为:CS=0xF000,IP=0xFFF0。这是CPU与BIOS开发商之间做的约定,是整个系统能够跑的起来的逻辑起始点。0xFFFF0处就是BIOS代码所在的ROM区域的开头,在CS:IP指向此处后会执行BIOS的基本IO设备的检查,等BIOS检查完毕后,开始把启动设备(比如磁盘、光驱、软盘等)的0盘面0磁道第1扇区载入到内存的0x07C00处。最后BIOS跳转到0x07C00,把控制权交给操作系统的boot引导程序。 注意这个0x07C00是BIOS的约原创 2020-09-26 14:30:45 · 1147 阅读 · 0 评论 -
安卓系统按应用/进程抓包方法
前言日常科研生活中有许多抓取安卓手机上特定应用的纯净数据包的需求。目前常见的做法是通过应用设置,关闭其他非目标应用的网络访问权限(包括访问WLAN和流量数据),只把目标应用的访问网络权限打开。这种方法具有一定的可行性,但是缺点在于无法去除关闭OS自己产生的流量,这还是会引入一些背景杂流。本文提供的方法可以实现直接按进程/应用过滤数据包,可以捕获完全纯净的应用数据。本方法的技术路线如下:Android系统在用户安装好某个APP会,就会给这个APP分配一个设备内唯一的user id,这个user i原创 2020-05-11 06:27:20 · 3329 阅读 · 0 评论 -
PE文件病毒实验(二)——实验报告
实验目的:掌握PE文件格式;理解病毒感染PE文件的原理。实验内容:(1) 了解PE文件格式。(2) 根据实验步骤,编程实现在PE文件中插入病毒代码。运行插入病毒代码后的PE文件。(3) 编程实现在磁盘中搜索.exe文件的操作,对于所有的.exe文件插入病毒代码并运行插入病毒代码后的exe文件。(4) 编程实现在磁盘中搜索(3)中的.exe文件的操作,对于所有的.exe文件删除病毒代码并运...原创 2020-03-01 15:06:11 · 12014 阅读 · 10 评论 -
为什么TCP里面有TIME_WAIT状态
今天在实现TCP/IP协议栈中的连接管理管理功能的时候,遇到一个TIME_WAIT状态,处于TIME_WAIT状态的tcp socket 在等待2个Max Segment Lifttime以后就会转移到closed状态。觉得有些奇怪,以下是我的一点理解。首先这个TIME_WAIT一定是从FIN_WAIT_2转移过来的。进入TIME_WAIT意味着这个tcp socket在主动关闭的时候,自己...原创 2019-07-06 10:56:40 · 1658 阅读 · 0 评论 -
linux-0.12源码分析——缓冲区等待队列(栈)sleep_on+wake_up分析
今天,我们来看一个有趣的东西,那就是中当有多个进程去读或写同一个文件,然后被这个文件对应的同一个缓冲区阻塞时,linux-0.12是如何把这些进程给阻塞起来,同时又是如何把被阻塞的进程一一唤醒。从一个奇怪的地方说起我们来看buffer-head的结构include\linux\fs.hstruct buffer_head { char * b_data; /* pointer to ...原创 2019-05-12 13:12:29 · 695 阅读 · 7 评论 -
WFP 学习(一)——构架把握
Windows Filtering PlatformWindows Filtering Platform(WFP) 是windows推出的用于TCP/IP协议栈五层各层里面对数据包进行交互操作的基础框架,该框架提供了一系列的API用于实现交互目的。这个框架的作用是为了取代之前的TDI/NDIS/LSP技术。这个东西能够干啥呢?使用WFP API,开发者可以实现个人防火墙、入侵检测系统、防病毒...原创 2019-02-18 13:43:02 · 13747 阅读 · 0 评论 -
操作系统分析——从开机加电到main执行前的关键流程
个人手绘,机器开机加电到main执行前的关键步骤原创 2018-11-21 23:47:22 · 279 阅读 · 0 评论 -
bread 块设备读取函数解析(1)
引言bread 块设备读取函数,顾名思义就是读取块设备内容的函数,这个函数的第一次调用是在main函数里面进程1的init()函数里面,sys_setup函数调用的。第一次调用主要是为了读取硬盘上的第一个扇区的内容,因为第一个扇区有着分区表等重要信息。bread的技术路线特别长,可以说它操作系统里面的缓冲区,请求项,驱动等多个版本都结合起来,想要充分理解整个函数,是十分需要耐心的。OK,L...原创 2018-11-14 21:06:10 · 2182 阅读 · 0 评论 -
学习linux-0.11内核——搭建环境(编译、调试bootsec)
编译内核获取内核代码git clone https://github.com/jmhIcoding/linux_kernel12.gitgit checkout check其中 linux_kernel12的目录结构为:·||————source_code 原始linux-0.11代码,里面有vs2015的工程文件,可以方便的看代码||----source_co...原创 2018-09-14 01:17:49 · 2331 阅读 · 0 评论 -
操作系统分析——_TSS(n)宏解析
在linux内核代码中,会遇到如下的宏定义:#define _TSS(n) ((((unsigned long) n)<<4)+(FIRST_TSS_ENTRY<<3)) #define _LDT(n) ((((unsigned long) n)<<4)+(FIRST_LDT_ENTRY<<3))#define ltr(n) __asm__("...原创 2018-11-07 15:00:17 · 1487 阅读 · 2 评论 -
copy_page_tables函数分析
先看看分页机制里面的页目录表、页表、页之间的关系。分页机制是用于将一个线性地址转换为一个物理地址。在I32 CPU环境里面,首先通过设置CR0寄存器,打开保护模式、开启分页机制。然后将页目录表的物理地址基址给CR3寄存器。开启分页机制后,I32将全部的物理内存空间、线性地址空间划分为一个个的页。每个页可以是4KB或者4MB。页目录表里面存放页目录表项,每个页目录表项指向页表。其中页目录表项的高...原创 2018-10-30 01:15:16 · 1475 阅读 · 3 评论 -
move_to_user_mode()一个push esp的疑问
#define move_to_user_mode() \__asm__ ( &quot;movl %%esp,%%eax\n\t&quot; \ &quot;pushl $0x17\n\t&quot; \ &quot;pushl %%eax\n\t&quot; \ &quot;pushfl\n\t&quot; \ &quot;pushl $0x0原创 2018-10-16 23:36:13 · 358 阅读 · 0 评论 -
操作系统分析——main.c(2) move_to_user_mode()函数
今天来看看move_to_user_mode()函数这个宏函数是在main()函数开启中断以后调用的。这个函数的作用是什么呢?经过sti()以及之上的语句,进程0就已经创建完毕了。其中最主要的就是创建了类型为task_union 的init_task。static union task_union init_task = {INIT_TASK,};其中INIT_TASK是linus硬编码进...原创 2018-10-16 09:56:38 · 1117 阅读 · 4 评论 -
操作系统——main.c(1)sched_init()
今天我们来看看内核main函数调用的sched_init()函数。main函数void main(void) { ROOT_DEV = ORIG_ROOT_DEV; drive_info = DRIVE_INFO; memory_end = (1&amp;lt;&amp;lt;20) + (EXT_MEM_K&amp;lt;&amp;lt;10); memory_end &amp;amp;= 0xfffff原创 2018-10-16 00:42:08 · 916 阅读 · 0 评论 -
操作系统分析——为什么需要RPL,request privilege level
在学特权级的时候,我们都会知道一共有三个特权级:CPL,DPL,RPL。CPL和DPL是比较好理解的,CPL是当前CPU所在的特权级,这个值是保存在CS段寄存器的段选择子中的。而DPL则是目标段描述符的特权级。我们想啊,我现在帅的等级为CPL,这个等级可以通过我身上的一个叫做CS的东西知道。然后我想去访问某个地方。这个地方不是可以随便访问的,这些地方是有特权级DPL,世界的法则规定只有CPL&amp;amp;l...原创 2018-10-15 20:40:59 · 904 阅读 · 4 评论 -
进程0的LDT0代码段描述符分析
LDT0的值为···· { \ {0,0}, \ /* ldt */ {0x9f,0xc0fa00}, \ {0x9f,0xc0f200}, \ },···其中第二项{0x9f,0xc0fa00}为代码段的描述符。然后看task中对ldt的定义:struct task_struct {/* these are hardcoded -...原创 2018-10-12 23:36:57 · 888 阅读 · 5 评论 -
C语言内联汇编
在阅读linux 源码的时候,我们会看到很多C语言内联汇编的代码。下面我们集中看看C语言内联汇编是怎么样的。首先,我们得想想为什么会有在C语言里面内联汇编的需求。主要有两个,一个是我们觉得在被频繁调用的函数,如果使用C写出来的代码,可能执行效率达不到我们的预期,于是我们就使用汇编语言来把这个函数的逻辑实现出来,例如qsort函数;另一个是我们需要使用某些只能通过汇编指令才能实现的功能。可能有...原创 2018-09-26 22:06:43 · 7314 阅读 · 1 评论