草庐IT

驱动开发:内核RIP劫持实现DLL注入

本章将探索内核级DLL模块注入实现原理,DLL模块注入在应用层中通常会使用CreateRemoteThread直接开启远程线程执行即可,驱动级别的注入有多种实现原理,而其中最简单的一种实现方式则是通过劫持EIP的方式实现,其实现原理可总结为,挂起目标进程,停止目标进程EIP的变换,在目标进程开启空间,并把相关的指令机器码和数据拷贝到里面去,然后直接修改目标进程EIP使其强行跳转到我们拷贝进去的相关机器码位置,执行相关代码后,然后再次跳转回来执行原始指令集。在内核模式中实现这一过程大体可分为如下步骤;1.通过PsLookupProcessByProcessId将进程PID转为EProcess结构

linux - 以编程方式禁用 CPU 内核

在Linux中禁用逻辑CPU的方法是已知的,基本上是用echo0>/sys/devices/system/cpu/cpu/online.这样,您只是告诉操作系统忽略给定的()CPU。我的问题更进一步,是否可以不仅忽略它而且以编程方式物理关闭它?我希望该CPU不接收任何电源,以使其能耗为零。我知道可以从BIOS禁用内核(并非总是如此),但我想知道是否可以在某个程序中执行此操作。 最佳答案 当你做echo0>/sys/devices/system/cpu/cpu/online,接下来会发生什么取决于特定的CPU。在ARM嵌入式系统上,内

linux - 以编程方式禁用 CPU 内核

在Linux中禁用逻辑CPU的方法是已知的,基本上是用echo0>/sys/devices/system/cpu/cpu/online.这样,您只是告诉操作系统忽略给定的()CPU。我的问题更进一步,是否可以不仅忽略它而且以编程方式物理关闭它?我希望该CPU不接收任何电源,以使其能耗为零。我知道可以从BIOS禁用内核(并非总是如此),但我想知道是否可以在某个程序中执行此操作。 最佳答案 当你做echo0>/sys/devices/system/cpu/cpu/online,接下来会发生什么取决于特定的CPU。在ARM嵌入式系统上,内

linux - 在 Mac OS X 上构建 Linux 内核

我正在做一个修改Linux内核的项目。我有一台桌面Linux机器,我可以在上面构建内核。但是,我要去旅行,我想在路上工作。我只有一台MacBook。当我尝试构建Linux内核时,它提示说elf.h找不到。我从网上下载了一个elf.h。现在它提示:NOELF我尝试从我的Linux桌面复制整个/usr/include,并将其设置为include目录,但仍然出现奇怪的错误,如"u8"notdeclared在Mac上进行内核开发的标准方法是什么?我在同一台Mac上有一台运行Linux的虚拟机,它将用于测试修改后的内核。但是,我真的不想在它上面构建内核,因为它有点慢。

linux - 在 Mac OS X 上构建 Linux 内核

我正在做一个修改Linux内核的项目。我有一台桌面Linux机器,我可以在上面构建内核。但是,我要去旅行,我想在路上工作。我只有一台MacBook。当我尝试构建Linux内核时,它提示说elf.h找不到。我从网上下载了一个elf.h。现在它提示:NOELF我尝试从我的Linux桌面复制整个/usr/include,并将其设置为include目录,但仍然出现奇怪的错误,如"u8"notdeclared在Mac上进行内核开发的标准方法是什么?我在同一台Mac上有一台运行Linux的虚拟机,它将用于测试修改后的内核。但是,我真的不想在它上面构建内核,因为它有点慢。

linux - linux进程的内核堆栈

是共享所有进程的内核堆栈还是每个进程都有一个单独的内核堆栈?如果每个进程都是单独的,那么这个堆栈指针存储在哪里?在task_struct中? 最佳答案 只有一个公共(public)内核内存。其中每个进程都有自己的task_struct+内核堆栈(默认为8K)。在上下文切换中,旧堆栈指针保存在某处,实际堆栈指针指向将要运行的新进程的堆栈顶部(或底部,具体取决于硬件架构)。 关于linux-linux进程的内核堆栈,我们在StackOverflow上找到一个类似的问题:

linux - linux进程的内核堆栈

是共享所有进程的内核堆栈还是每个进程都有一个单独的内核堆栈?如果每个进程都是单独的,那么这个堆栈指针存储在哪里?在task_struct中? 最佳答案 只有一个公共(public)内核内存。其中每个进程都有自己的task_struct+内核堆栈(默认为8K)。在上下文切换中,旧堆栈指针保存在某处,实际堆栈指针指向将要运行的新进程的堆栈顶部(或底部,具体取决于硬件架构)。 关于linux-linux进程的内核堆栈,我们在StackOverflow上找到一个类似的问题:

linux - Linux内核源码中的 "current"是什么?

我正在研究Linux内核,但遇到了问题。我看到许多Linux内核源文件都有current->files。那么current是什么?structfile*fget(unsignedintfd){structfile*file;structfiles_struct*files=current->files;rcu_read_lock();file=fcheck_files(files,fd);if(file){/*Fileobjectrefcouldn'tbetaken*/if(file->f_mode&FMODE_PATH||!atomic_long_inc_not_zero(&file

linux - Linux内核源码中的 "current"是什么?

我正在研究Linux内核,但遇到了问题。我看到许多Linux内核源文件都有current->files。那么current是什么?structfile*fget(unsignedintfd){structfile*file;structfiles_struct*files=current->files;rcu_read_lock();file=fcheck_files(files,fd);if(file){/*Fileobjectrefcouldn'tbetaken*/if(file->f_mode&FMODE_PATH||!atomic_long_inc_not_zero(&file

linux - 如何为树莓派编译内核模块?

我在为树莓派编译内核模块时遇到问题。我想使用树莓派本身编译一个“helloworld”内核模块。我正在使用raspbianwheezy3.6.11+。我尝试按照http://elinux.org/RPi_Kernel_Compilation中的说明进行操作.这是我正在使用的Makefile:obj-m+=hello-1.oall:make-C/lib/modules/$(shelluname-r)/buildM=$(PWD)modulesclean:make-C/lib/modules/$(shelluname-r)/buildM=$(PWD)clean这里是hello-1.c的源代码