自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(31)
  • 收藏
  • 关注

原创 《Linux Device Driver》——Linux设备模型

Linux设备模型的目的是:为内核建立起一个统一的设备模型,从而有一个对系统结构的一般性抽象描述。现在内核使用设备模型支持多种不同的任务:设备模型描述电源管理和系统关机这些需要对系统结构的理解,设备模型使OS能以正确顺序遍历系统硬件。与用户空间的通讯sysfs 虚拟文件系统的实现与设备模型的紧密相关, 并向外界展示它所表述的结构。向用户空间提供系统信息、改变操作参数的接口正越来越多地通过 sysfs , 也就是设备模型来完成。热插拔设备外围设备可根据用户的需要安装与

2020-09-15 13:21:18 719

原创 《Linux Device Driver》——中断处理

尽管有些设备仅仅通过控制其寄存器就可以得到控制,但现实中的大部分设备却要比这复杂一些。因为大部分设备的处理时间与处理器不在同一个周期,且一定会比处理器慢的多,这就造成了一种让处理器等待设备的现象,显然这是不行的,而有一种解决方法就是中断操作。中断仅仅就是一个信号,当硬件需要获得处理器对它的关注时,就可以发送这个信号。 Linux 处理中断的方式非常类似在用户空间处理信号的方式。大多数情况下,一个驱动只需要为它的设备的中断注册一个处理例程,并当中断到来时进行正确的处理。本质上来讲,中断处理例程和其他的代码并

2020-09-14 22:35:03 341

原创 《Linux Device Driver》——与硬件通信

设备驱动程序是软件概念和硬件概念电路之间的一个抽象层。I/O端口和I/O内存每一种外设都是通过读写寄存器进行控制。在硬件层,内存区域和I/O区域没有概念上的区别:它们都通过地址总线和控制总发送电平信号(比如读信号和写信号),再通过数据总线读写数据。I/O寄存器和常规内存1.I/O寄存器与RAM的最主要区别就是I/O操作具有边际效应(个人理解就是副作用):读取某个地址时可能导致这个地址的内容发生变化,比如很多中断寄存器的值一经读取,便自动清零。内存操作就不存在:内存写操作的唯一结果就是在指定位

2020-09-14 20:14:54 352

原创 《Linux Device Driver》——分配内存

kmalloc函数kmalloc不对所获得的内存空间清零,分配给它的区域保持原有的数据,所分配的区域在物理内存中也是连续的。flags参数#include<linux/slab.h>void *kmalloc(size_t size,int flags);kmalloc的第一个参数是要分配的块的大小,第二个参数是分配的标志(flags),它能以多种方式控制kmalloc的行为。最常用的标志是GFP_KERNEL,表示内存分配(最终总是调用get_free_pages来实现实际的分

2020-09-11 10:42:15 272

原创 《Linux Device Driver》——时间、延迟及延缓操作

任务:度量时间差,如何比较时间获得当前时间将操作延迟指定一段时间调度异步函数到指定时间之后执行度量时间差内核通过定时器中断来跟踪时间流。时间中断由系统定时硬件以周期性的间隔产生,这个间隔由内核根据HZ的值设定,HZ是一个与体系结构有关的常数,定义在<linux/param.h>或者该文件下。hz:上述间隔由hz的值设定,hz是一个与体系结构相关的常数计数器:发生中断一次,计数器加一,这个计数器的值(只有)在系统引导时被初始化为0jiffies变量:unsigned long

2020-09-10 23:58:12 425

原创 《Linux Device Driver》——高级字符驱动程序操作

首先实现ioctl系统调用,它是用来设备控制的公共接口。然后,内核态与用户态保持同步。掌握进程休眠和唤醒、实现阻塞I/O,以及在设备可读取或写入时通知用户空间。最后,在驱动程序中实现设备访问策略。ioctl驱动程序通过ioctl执行各种类型的硬件控制。1.在用户空间,ioctl系统调用具有如下原型:int ioctl(int fd,unsigned long cmd,...);参数描述fd文件描述符cmd控制命令…表示可变数目的参数表,在实际使用中是

2020-09-10 21:04:55 343

原创 《信息安全工程师教程》——网络信息安全概述

网络发展现状与重要性认识计算机网络演变成人类活动的新空间,即网络空间,它是国家继陆、海、空、天后的第五个疆域。网络信息安全相关概念网络信息安全的发展历经了通信保密、计算机安全、信息保障、可信计算等阶段。狭义的网安特指网络信息系统的各组成要素符合安全属性的要求,即机密性、完整性、可用性、抗抵赖性、可控性。广义的网安涉及国家安全、城市安全、经济安全、社会安全、生产安全、人身安全等在内的“大安全”。根据《中华人民共和国网络安全法》,网安是指通过采取必要措施,防范对网络的攻击、侵入、干扰、破坏和非法使

2020-09-08 21:44:18 3654

原创 《Linux Device Driver》——并发和竞态

scull的缺陷 if (!dptr->data[s_pos]) { dptr->data[s_pos] = kmalloc(quantum, GFP_KERNEL); if (!dptr->data[s_pos]) goto out; }sucll代码中当有两个进程A、B正在独立尝试向同一个scull设备的相同偏移量写入数据,两个进程在同一时刻到达上述代

2020-09-08 00:37:58 147

原创 《Linux Device Driver》——调试技术

内核中的调试支持编译内核 1.获取内核源码,解压至/usr/src # tar xf linux-3.13.5.tar.xz -C /usr/src # ln -sv /usr/src/linux-3.13.5 /usr/src/linux 2.配置内核特性(选择一种方法就可以了) make config:遍历选择所要编译的内核特性 make allyesconfig:配置所有可编译的内核特性 make allnoconf

2020-09-07 20:21:21 563

原创 《Linux Device Driver》——字符设备驱动程序

目标是编写一个完整的字符设备驱动程序——scull。即“simply character unility for loading localites,区域装载的简单字符设备”。scull是一个操作内存区域的字符设备驱动程序,这片内存就相当于一个设备。scull的优点在于不和硬件相关,而只是操作从内核中分配的一些内存。scull的设计主设备号和次设备号对字符设备的访问通过文件系统内的设备名称进行。位于/dev下ls -al字符设备用“c“标识块设备用”b“标识...

2020-09-05 22:52:35 973

原创 《0day安全》——重重保护下的堆

堆保护方式 1.PEB random:dword shoot写内存,覆盖PEB指针,加入随机化了就不行了。 2.Safe Unlink:验证当前堆块的下一个堆块的前向指针和前一个堆块的后向指针是否指向当前堆块。 3.heap cookie:跟栈的GS类似,cookie放在segment table处,占一个字节。 4.元数据加密:块首一些重要元素与一个4字节的随机数进行异或运算,使用时再异或回来,我们就不能直接破坏或改写这些数据了。攻击堆中存储的变量堆中的各项保护措施是对堆块的关键结构进行保护

2020-09-01 20:11:36 302

原创 《0day安全》——在内存中躲猫猫: ASLR

原理前面所有漏洞利用方法都有着一个共同的特征:都需要确定一个明确的跳转地址。无论是 JMP E SP 等通用跳板指令还是 Ret2Libc 使用的各指令,我们都要先确定这条指令的入口点。微软的 ASLR( Address Space Layout Randomization)技术就是通过加载程序的时候不再使用固定的基址加载,从而干扰shellcode 定位的一种保护机制。支持 ASLR 的程序在它的 PE 头中会设置 IMAGE_DLL_CHARACTERISTICS_ DYNAMIC_BASE 标识

2020-08-31 22:12:02 299

原创 《0day安全》——SEH终极防护:SEHOP

原理SEHOP 在 Windows Ser ver 2008 默认启用,而在 Windows Vista 和 Windows 7 中 SEHOP默认是关闭的。大家可以通过以下两种方法启用 SEHOP。 1.下载 http://go.microsoft.com/?linkid=9646972 的补丁,此补丁适用于 Windows 7和Windows Vista SP1。 2.手工在注册表中 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Sessi

2020-08-31 20:33:02 856

原创 《0day安全》——数据与程序的分水岭:DEP

DEP机制的保护原理溢出攻击的根源在于区分不了代码与数据。DEP 的基本原理是将数据所在内存页标识为不可执行,当程序溢出成功转入 shellcode 时,程序会尝试在数据页面上执行指令,此时 CPU 就会抛出异常,而不是去执行恶意指令。DEP 的主要作用是阻止数据页(如默认的堆页、各种堆栈页以及内存池页)执行代码。微软从 Windows XP SP2 开始提供这种技术支持,根据实现的机制不同可分为:软件 DEP( Software DEP)和硬件 DEP( Hardware-enforced DEP

2020-08-31 00:39:03 557 1

原创 《0day安全》——亡羊补牢:SafeSEH

启用该链接选项后,编译器在编译程序的时候将程序所有的异常处理函数地址提取出来,编入一张安全 S.E.H 表,并将这张表放到程序的映像里面。当程序调用异常处理函数的时候会将函数地址与安全 S.E.H 表进行匹配, 检查调用的异常处理函数是否位于安全 S.E.H 表中。攻击返回地址绕过SafeSEH没开GS,开了SafeSEH,直接攻击函数返回地址利用虚函数绕过SafeSEH不涉及异常处理,SafeSEH没有参与感从堆中绕过SafeSEH...

2020-08-27 19:13:57 352

原创 《0day安全》——栈中的守护天使:GS

GS安全编译选项原理在栈帧中压入一个随机DWORD,IDA称之为“security cookie”,位于EBP之前。系统在.data区块中存放一个security cookie的副本。当栈发生溢出是,security cookie将被覆盖,之后才是EBP和返回地址。函数返回之前比对两者的值,如果改变则说明security cookie已被破坏,发生了溢出。例外额外的数据和操作带来的直接后果就是系统性能的下降,为了将对性能的影响降到最小,编译器在编译程序的时候并不是对所有的函数都应用 GS,以下情况

2020-08-26 23:40:35 393

原创 《0day安全》——格式化字符串漏洞

printf中的缺陷#include "stdafx.h"#include <stdio.h>int main(){ int a=44, b=77; printf("a=%d, b=%d\n", a, b); printf("a=%x, b=%d\n"); return 0;} 环境备注操作系统Windows2000其他32位系统也可以编译器vc++6.0 编译选项默认buildrelease版本

2020-08-26 11:00:18 242

原创 《0day安全》——狙击Windows异常处理机制(SEH)

《0day2》——狙击Windows异常处理机制(SEH)SEH的异常处理模型主要由__try __except语句来完成,与标准的try catch相似。在栈溢出中利用SEH#include "stdafx.h"#include "stdio.h"#include <windows.h>char shellcode[]="\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90""\x90\x90\x90

2020-08-26 00:32:26 344

原创 《0day安全》堆溢出利用(下)——代码植入

《0day2》堆溢出利用(下)——代码植入常用狙击目标(xp sp1前)与栈溢出中的“地毯式轰炸”不同,堆溢出更加精准,往往直接狙击重要目标。精准是DWORD SHO OT 的优点,但“火力不足”有时也会限制堆溢出的利用,这样就需要选择最重要的目标用来“狙击”。&emps;1.内存变量:修改能够影响程序执行的重要标志变量,往往可以改变程序流程。(比如改了绕过身份验证)&emps;2.代码逻辑:修改代码段重要函数的关键逻辑有时可以达到一定攻击效果。(例如,程序分支处的判断逻辑,或者把

2020-08-25 21:35:31 528

原创 《0day安全》堆溢出利用(上)——DWORD SHOOT

《0day2》堆溢出利用(上)——DWORD SHOOT堆溢出利用原理溢出利用的精髓就是用精心构造的数据去溢出下一个堆块的块首,改写块首中的前向指针(flink)和后向指针(blink),然后在分配、释放、合并等操作发生时伺机获得一次向内存任意地址写入任意数据的机会。我们把这种能够向内存任意位置写入任意数据的机会称为“DWORD SHOOT”。注意:DWORD SHOOT 发生时,我们不但可以控制射击的目标(任意地址),还可以选用适当的子弹(4 字节恶意数据),32位系统的话地址是4字节,就是dwo

2020-08-25 11:59:21 787

原创 《0day安全》堆操作

《0day2》堆操作堆的调试#include "stdafx.h"#include <windows.h>int main(){ HLOCAL h1,h2,h3,h4,h5,h6; HANDLE hp; hp = HeapCreate(0,0x1000,0x10000); __asm int 3 h1 = HeapAlloc(hp,HEAP_ZERO_MEMORY,3); h2 = HeapAlloc(hp,HEAP_ZERO_MEMORY,5); h3 = Heap

2020-08-25 01:27:03 282

转载 Markdown语法图文全面详解(10分钟学会)

目录1. 快捷键2. 基本语法2.1 字体设置斜体、粗体、删除线2.2 分级标题2.3 链接2.4 分割线2.5 代码块2.6 引用2.7 列表2.8 表格3. 常用技巧3.1 换行3.2 缩进字符3.3 特殊符号3.4 字体、字号与颜色3.5 链接的高级操作1.行内式2.参考式链接3.内容目录...

2020-08-24 16:19:15 877

转载 KVM详解,太详细太深入了,经典

KVM 介绍(1):简介及安装http://www.cnblogs.com/sammyliu/p/4543110.html学习 KVM 的系列文章: (1)介绍和安装(2)CPU 和 内存虚拟化(3)I/O QEMU 全虚拟化和准虚拟化(Para-virtulizaiton)(4)I/O PCI/PCIe设备直接分配和 SR-IOV(5)libvirt 介绍(6)Nova 通过 l...

2020-08-10 12:18:51 62614 4

转载 linux系统替换新内核(编译安装替换与打包替换)

 一、简介内核,是一个操作系统的核心。它负责管理系统的进程、内存、设备驱动程序、文件和网络系统,决定着系统的性能和稳定性。Linux作为一个自由软件,在广大爱好者的支持下,内核版本不断更新。新的内核修订了旧内核的bug,并增加了许多新的特性。如果用户想要使用这些新特性,或想根据自己的系统度身定制一个更高效,更稳定的内核,就...

2020-08-01 13:48:18 3299

转载 vmware虚拟机三种网卡

vmware虚拟机三种网卡2018年10月16日 10:17:56 xiaoyuerp 阅读数 244注:部分红色文本是转发者个人理解添加的。 虚拟机vmnet0、vmnet1和vmnet8的区别vmnet0,实际上就是一个虚拟的网桥vmnet0,实际上就是一个虚拟的网桥,这个网桥有很若干个端口...

2020-07-17 16:44:23 2285 1

转载 操作系统——分页式内存管理

为什么要引入内存管理?答:多道程序并发执行,共享的不仅仅只有处理器,还有内存,并发执行不过不进行内存管理,必将会导致内存中数据的混乱,以至于限制了进程的并发执行。扩充内存的两种方式?答:覆盖和交换技术是扩充内存的两种方法1:覆盖技术。覆盖的基本思想是:由于程序运行时并非任何时候都需要访问程序...

2020-07-16 11:59:40 2028

转载 #pragma命令详解

每种C和C++的实现支持对其宿主机或操作系统唯一的功能。例如,一些程序需要精确控制超出数据所在的储存空间,或着控制特定函数接受参数的方式。#pragma指示使每个编译程序在保留C和C++语言的整体兼容性时提供不同机器和操作系统特定的功能。编译指示被定义为机器或操作系统特定的,并且通常每种编译程序是不同的。语法:#pragma token_string“token_string”是一系列字符用来给出所需的特定编译程...

2020-07-14 14:55:22 505

转载 Linux环境下的GDB调试方法

1、GDB简介  GDB(GNU Debugger)是GCC的调试工具。其功能强大,现描述如下:      GDB主要帮忙你完成下面四个方面的功能: 1.启动你的程序,可以按照你的自定义的要求随心所欲的运行程序。 2.可让被调试的程序在你所指定的调置的断...

2020-07-02 14:52:55 428

转载 文件描述符和文件指针的区别

1.什么是文件描述符?文件描述符是计算机科学中的一个术语,是一个用于表述只想文件的引用的抽象化概念。在linux当中,每个进程会在进程控制块(PCB)当中保存着一份文件描述符表,文件描述符就是这个表的索引,每个表都有一个指向已经打开文件的指针。每个linux进程都应该有三个标准的文件描述...

2020-06-28 16:37:10 614

转载 linux系统调用监测实例

本文将记录在linux操作系统中实现系统调用监测功能的原理和操作过程,涉及到了内核编译、添加自定义系统调用、修改系统调用入口、添加内核函数、添加编译内核模块等内容。主要参考资料《Linux操作系统原理与应用(第2版)》1,系统调用基础系统调用是linux系统中提供给用户态进程的一组可以与硬件设备(如CPU、磁盘、打印机等)进行交互的...

2020-06-27 15:15:53 660

转载 带缓冲IO与不带缓冲的IO

首先要明白不带缓冲的概念:所谓不带缓冲,并不是指内核不提供缓冲,而是只单纯的系统调用,不是函数库的调用。系统内核对磁盘的读写都会提供一个块缓冲(在有些地方也被称为内核高速缓存),当用write函数对其写数据时,直接调用系统调用,将数据写入到块缓冲进行排队,当块缓冲达到一定的量时,才会把数据写入磁盘。因此所谓的不带缓冲的I/O是指进程不提供缓冲功能(但内核还是提供缓冲的)。每调用一次write或read函数,直接系统调用。...

2020-06-26 11:34:04 409

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除