首页
学习
活动
专区
圈层
工具
发布

Windows内核中的内存管理

内存管理的要点 内核内存是在虚拟地址空间的高2GB位置,且由所有进程所共享,进程进行切换时改变的只是进程的用户分区的内存 驱动程序就像一个特殊的DLL,这个DLL被加载到内核的地址空间中,DriverEntry...和AddDevice例程在系统的system进程中运行,派遣函数会运行在应用程序的进程上下文中所能访问的地址空间是这个进程的虚拟地址空间利用_EPROCESS结构可以查看该进程的相关信息 当程序的中断级别在...,只在debug版本中生效,用于判断当前的中断请求级别,当级别高于DISPATCH_LEVEL(包含这个级别)时会产生一个断言 内核中的堆申请函数 PVOID ExAllocatePool(..., IN TYPE Type, IN PCHAR Field ); 这个宏返回自定义结构体的首地址,传入的是第一个参数是结构体中某个成员的地址,第二个参数是结构体名,第三个参数是我们传入第一个指针的类型在结构体中对应的成员变量值...在内核中,对于内存的读写要相当的谨慎,稍不注意就可能产生一个新漏洞或者造成系统的蓝屏崩溃,有时在读写内存前需要判断该内存是否合法可供读写,DDK提供了两个函数来判断内存是否可读可写 VOID ProbeForRead

1.6K20
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Linux内核中的递归漏洞利用

    6月1号,我提交了一个linux内核中的任意递归漏洞。如果安装Ubuntu系统时选择了home目录加密的话,该漏洞即可由本地用户触发。...接下来导致ecryptfs读取 /proc/$A/environ ,最后导致进程A中的进程错误。如此循环往复,最终溢出内核栈,使内核崩溃。内核栈如下: [...]...这些空洞足够用来存放从SRACK_END_MAIC到flags的所有数据。这一点可以通过一个安全递归和一个内核调试模块来实现,这个内核调试模块将栈中的所有空洞标绿便于观察: ?...这个函数可以使用管道向任意内核地址写数据,因为 copy_to_user()中的地址检查已经失效。...在我写的漏洞报告中,我有提到给内核增加内存保护页,移除栈底部的 thread_info结构体,这样缓解这类漏洞的利用,有其他操作系统就是这么干的。

    2.3K60

    【Binder 机制】分析 Android 内核源码中的 Binder 驱动源码 binder.c ( googlesource 中的 Android 内核源码 | 内核源码下载 )

    一、查看 Android 内核源码中的 Binder 驱动源码 binder.c Android 内核源码地址 选择 common 版本的内核 ; common 版本内核 : 选择 android-mainline...分支 ; 跳转到 页面 , 选择该页面下的 drivers 驱动目录 , 进入 页面 , 选择 android 目录 , 查看 Android 相关驱动 ; 跳转到目录 , 其中的 binder.c...就是 Binder 驱动源码 ; binder.c 源码地址 二、分析 Binder 驱动源码 binder.c 1、binder_ioctl 在 Android Native 层中的 service_manager.c...中的 main 函数中 , 调用了 binder_become_context_manager(bs) , 将自己注册成 Binder 进程的上下文 , 其中调用的 ioctl 方法是内核中的方法 ,...->fd, BINDER_SET_CONTEXT_MGR, 0); } 上面调用的 ioctl 方法 , 就是下面的内核中的 Binder 驱动源码 binder.c 中的 static long binder_ioctl

    1.2K20

    浅析linux内核中的idr机制

    这个机制最早是在2003年2月加入内核的,当时是作为POSIX定时器的一个补丁。现在,在内核的很多地方都可以找到idr的身影。 idr机制适用在那些需要把某个整数和特定指针关联在一起的地方。...举个例子,在I2C总线中,每个设备都有自己的地址,要想在总线上找到特定的设备,就必须要先发送该设备的地址。...如果我们的PC是一个I2C总线上的主节点,那么要访问总线上的其他设备,首先要知道他们的ID号,同时要在pc的驱动程序中建立一个用于描述该设备的结构体。...最简单的方法当然是通过数组进行索引,但如果ID号的范围很大(比如32位的ID号),则用数组索引显然不可能;第二种方法是用链表,但如果网络中实际存在的设备较多,则链表的查询效率会很低。...指针 id: 由内核自动分配的ID号 ptr: 和ID号相关联的指针 start_id: 起始ID号。

    2.1K20

    ASP.NET Core 中的 ServiceProvider

    前言# 在 ASP.NET Core 中,微软提供了一套默认的依赖注入实现,该实现对应的包为:Microsoft.Extensions.DependencyInjection,我们可以通过查看其对应的开源仓库看一下它的具体实现...基于该实现,我们不必显式创建我们的服务对象,可以将其统一注入到 ServiceProvider 中进行集中维护,使用的时候直接在该对象中获取即可。让我们在编写业务逻辑时,不用太关注对象的创建和销毁。...这也是为什么现在有些最佳实践中建议不要过多使用 New 的方式来获取对象。在本文中,我们将一起了解一下如何实现一个自己的 ServiceProvider。...,我们需要引入一个新的集合,这个新的集合是用于存储我们相应的实例对象,在注册的时候我们只记录注册类型,在需要访问到相应的服务时,我们只需要在这个实例集合列表中访问,如果发现我们需要的服务还未被实例化,那我们再进行实例化...,这和 DotNetCore 中的 ServiceProvider 的方式很相似,它不依赖于我们服务的注册顺序,都能正常的进行构造。

    2.1K20

    ASP.NET中的几种分页

    https://blog.csdn.net/huyuyang6688/article/details/39644255         1、通过DataGrid控件实现分页         ASP.NET...中的DataGrid控件自带了分页功能,当绑定了DataGrid的数据源之后,需要对DataGrid控件进行一些设置: ?        ...3、通过存储过程分页        通过存储过程实现分页,根据条件,只从数据库中提取出要显示的那一页中的数据,那么就涉及到了假如数据库中共有100条数据,如何从数据库中取出第50到第60条数据来。...这时想到了牛腩大哥视频里所讲的真假分页以及如何提取表中中间连续的几条数据。        在程序中定义如下变量pageSize(每个页面显示多少条记录)、curPage(当前在第几页)。...and @endPos END GO        这种方法的优点在于,指定了要显示的页数和每页的大小之后,只需从数据库中提取要显示的那一页数据即可,不需要将大量数据全部提取出来,也就是牛腩视频中说到的

    3.1K20

    ASP.NET Core中的Controller

    ASP.NET CORE出现之前我们实现的Controller,MVC都继承自Controller基类,WebApi的话继承自ApiController。...现在ASP.NET CORE把MVC跟WebApi合并了,已经不再区分MVC或者WebApi。ASP.NET CORE的Controller继承结构也发生了变化。...POCO Controller 除了继承Controller、ControllerBase之外,ASP.NET CORE框架可以让你的POCO类直接变成Controller。...ASP.NET CORE框架默认会查找后缀为“Controller”的类,并把它当做真正的Controller使用,在路由系统最终匹配Controller的时候它也会被尝试匹配。...使用NonControllerAttribute 如果你的一个类名恰巧包含“Controller”的后缀,但你并不想ASP.NET CORE框架发现它,你可以在类上加上NonControllerAttribute

    1.8K20

    ASP.NET Web API自身对CORS的支持: CORS授权检验的实施

    中,定义在另一个程序集对于这些类型来说,除了CorsPolicy定义在程序集System.Web.Cors.dll,其余的类型均定义在程序集System.Web.Http.Cors.dll中的相关类型可以视为对这个核心...对于ASP.NET Web API来说,CORS资源授权检验实施的目标是表示当请求的HttpRequestMessage对象,这个对象自然不可能使用在ASP.NET的核心CORS引擎中。...如下面的代码片断所示,我们可以通过CorsRequestContext对象得到对应HTTP请求的地址(RequestUri)、主机名称(Host)和采用的HTTP方法(HttpMethod)。...三、CorsEngine 我们说ASP.NET 的核心CORS引擎定义在程序集System.Web.Cors.dll中,它主要体验为这个名为CorsEngine的对象,其主要的使命在于:根据提供的资源授权策略...[6] ASP.NET Web API自身对CORS的支持: CORS授权策略的定义和提供 [7] ASP.NET Web API自身对CORS的支持: CORS授权检验的实施 [8] ASP.NET

    1.8K110

    ASP.NET Core 中的管道机制

    前言 在开始之前,我们需要明确的一个概念是,在 Web 程序中,用户的每次请求流程都是线性的,放在 ASP.NET Core 程序中,都会对应一个 请求管道(request pipeline),在这个请求管道中...在 ASP.NET Core 中,管道式编程是一个核心且基础的概念,它的很多中间件都是通过 管道式 的方式来最终配置到请求管道中的,所以理解这里面的管道式编程对我们编写更加健壮的 DotNetCore...下面,我们尝试着来一步步解析 ASP.NET Core 中的管道机制。...源码分析 由于 ASP.NET Core 是完全开源跨平台的,所以我们可以很容易的在 Github 上找到其对应的托管仓库。最后,我们可以看一下 ASP.NET Core 官方的一些实现代码。...上述所有内容就是我个人对 ASP.NET Core 中的管道式编程的一些理解和拙见,如果有不正确或不当的地方,还请斧正。 望共勉!

    1.4K10

    雕刻在NT内核中的LINUS故事

    我们曾经介绍过Linux内核中的SYSC_reboot函数,它是reboot API对应的系统服务。更有趣的是,这个函数里面雕刻着Linus大神的生日和三个爱女的生日。...在LxCore中,也可以看到这一组神秘的数字,反汇编名为LxpSyscall_REBOOT的函数,便可以看到。 ?...截图中从#05栈帧起的下半部分对应的应用程序的栈,目前WinDBG还不能回溯出其中的函数名字,但是已经在计划内了,在LXCORE模块块中已经准备了一个名为PicoWalkUserStack的函数。...说到这里,大家应该坚信,WSL中并没有使用真正的Linux内核,而是克隆了一份。...于是问题来了,严格说来,狭义的Linux就是指Linux内核,Linux上的各种应用很多都来自GNU或者其它源头。

    1K20

    驱动开发:内核中的自旋锁结构

    提到自旋锁那就必须要说链表,在上一篇《驱动开发:内核中的链表与结构体》文章中简单实用链表结构来存储进程信息列表,相信读者应该已经理解了内核链表的基本使用,本篇文章将讲解自旋锁的简单应用,自旋锁是为了解决内核链表读写时存在线程同步问题...,解决多线程同步问题必须要用锁,通常使用自旋锁,自旋锁是内核中提供的一种高IRQL锁,用同步以及独占的方式访问某个资源。...,解决多线程同步问题必须要用锁,通常使用自旋锁,自旋锁是内核中提供的一种高IRQL锁,用同步以及独占的方式访问某个资源。...pMyStruct)); // 赋值 testA->x = 100; testA->y = 200; testB->x = 1000; testB->y = 2000; // 向全局链表中插入数据...my_list_header, (PLIST_ENTRY)&testB->lpListEntry, &my_list_lock); } function_ins(); // 移除节点A并放入到remove_entry中

    38010

    驱动开发:内核中的自旋锁结构

    提到自旋锁那就必须要说链表,在上一篇《驱动开发:内核中的链表与结构体》文章中简单实用链表结构来存储进程信息列表,相信读者应该已经理解了内核链表的基本使用,本篇文章将讲解自旋锁的简单应用,自旋锁是为了解决内核链表读写时存在线程同步问题...,解决多线程同步问题必须要用锁,通常使用自旋锁,自旋锁是内核中提供的一种高IRQL锁,用同步以及独占的方式访问某个资源。...,解决多线程同步问题必须要用锁,通常使用自旋锁,自旋锁是内核中提供的一种高IRQL锁,用同步以及独占的方式访问某个资源。...NonPagedPoolExecute, sizeof(pMyStruct));// 赋值testA->x = 100;testA->y = 200;testB->x = 1000;testB->y = 2000;// 向全局链表中插入数据...my_list_header, (PLIST_ENTRY)&testB->lpListEntry, &my_list_lock);}function_ins();// 移除节点A并放入到remove_entry中PLIST_ENTRY

    34820

    雕刻在 Linux 内核中的 Linus 故事

    但是如果真是遇到一个“特别显赫”的鸡蛋,很多人还是想看看能生出这颗神蛋的母鸡的,或者想听听这只母鸡的故事。 其实,在Linux内核的代码里,就隐藏着关于Linus大神的一个美妙故事。...$ sudo gdb --core /proc/kcore 然后在GDB中执行如下命令加载内核的符号信息: (gdb) file /home/ge/work/linux-3.12.2/vmlinux...这样说有点不精确,精确的说法是从Linux内核2.1.17版本开始,第二个参数也可以是0x5121996。查阅kernel.org上的内核发布历史,2.1.17应该发布于1996年12月22日。...在内核代码中,上述规则是在reboot.c中强制的,代码如下: /* For safety, we require "magic" arguments. */ if (magic1 !...000> .formats 0n85072278 Evaluate expression: Hex: 00000000`05121996 如此看来,Linus大神不仅把这些常量写在Linux内核代码中

    84420
    领券