我知道在用户模式下运行的进程和在内核模式下运行的进程(基于访问限制,访问硬件等)之间的区别.但出于好奇,在内核模式下运行的进程和以root身份运行的进程之间有什么区别?
我正在为我们的驾驶员团队建立一个硬件模拟器.现在,模拟器分为2个模块:第一个模块在驱动程序内部运行,在内核模式下运行,这是驱动程序和HW-Simulator之间的主要接口.第二个模块是一个可执行的用户模式代码,它为模拟器生成数据并通过调用将其传送到模拟器DeviceIOControl(在Windows API下)
我的需求是:我希望能够在内核模式下执行用户模式可执行文件.我需要能够以相对便携的方式做到这一点.目前我只在Windows上运行,但这应该很快就会改变.此外,我需要能够通过它的stdin管道与用户模式代码进行通信,以便重新配置它并最终关闭它.
我发现了这一点: 从内核空间执行用户空间函数
但它只与linux内核相关.有更便携的替代方案吗?或Windows替代?
我可以通过简单地使用ShellExecute/RunAs API函数在Windows中执行此操作吗?
注意:我们知道从内核空间调用用户模式代码所涉及的安全风险.但由于这只是用作测试环境而不会达到我们的发布代码,因此我们并不关心.
我知道用户应用程序只能在用户模式下运行,这是为了系统安全。相反,大多数驱动程序在内核模式下运行,以访问 I/O 设备。尽管如此,一些驱动程序在用户模式下运行,但允许访问 I/O 设备。所以我有以下问题。驱动程序和用户应用程序之间的主要区别是什么?不能像某些驱动程序那样允许用户应用程序访问 I/O 设备吗?
谢谢。
当我们编译一个C程序时,它只生成一些机器可理解的代码.这个代码可以直接在硬件上运行,从这个问题来讲.
所以我的问题是:
如果C程序可以直接在硬件上运行,那么内核如何处理该程序的资源分配?
如果从编译器生成的可执行文件是纯机器可理解的形式,那么特权和非特权模式如何工作?
如果程序可以直接在硬件上运行而不是通过内核,内核如何管理硬件资源的权限?
当Windows内核中发生有趣的事件时,我想从我的驱动程序调用我的应用程序.我需要能够将至少4个字节的数据传递回用户模式.怎么做到这一点?这些事件可能会发生,但通常不会发生,因此我不想构建队列系统并使用IOCTL.
我在考虑驱动程序被加载,用户模式应用程序使用IOCTL注册其回调,内核在事件发生时继续调用该回调,最后用户模式客户端取消注册回调,并且不再向用户模式发送数据.这可能吗?
我是内核编程的新手,所以经过一天的谷歌搜索,我决定在这里问一下.我注意到关于内核和驱动程序的讨论不多.甚至不那么合适的文档.
是否可以在没有 usermod 的情况下将用户添加到组中?我正在使用嵌入式 Linux 3.14.52,但我没有 usermod 命令行。如果不可能,如何使用 Buildroot 将此命令添加到内核?
我可以使用从任意模块转储类型
dt modulename!type
Run Code Online (Sandbox Code Playgroud)
在某些情况下,我看到了例如
dt nt!_TEB
Run Code Online (Sandbox Code Playgroud)
(并且它有效)虽然模块被调用ntdll:
0:001> lm m nt
start end module name
0:001> lm m ntdll
start end module name
00000000`76e00000 00000000`76fa9000 ntdll (pdb symbols) d:\...\ntdll.pdb
Run Code Online (Sandbox Code Playgroud)
如您所见,ntdll不能总是被替换nt.
是否有差异dt nt!type对比dt ntdll!type或可它总是以它的快捷方式的形式使用?我正在寻找一个可靠的答案来源,而不仅仅是"是".
我试过了:
.hh dt如果您有一些您想分享的背景知识,可以获得奖励:
nt可以用来代替ntdll或是这个dt特定的?有没有办法在进行事后调试时切换到内核转储中特定进程的用户模式?
我记得在使用.process命令进行实时调试时这样做.
尽管我知道这个主题的范围要广泛得多,但我处于 Linux 环境中
假设我正在编写一个简单的 C 程序,并且想向终端写入“Hello”。显而易见的方法是使用 C 标准库 printf,它又使用 write 系统调用(包装函数而不是系统调用本身),而 write 系统调用又调用实际的汇编系统调用指令(或 int)。不太明显的方法是在我的 C 源文件中使用一些内联汇编,或者直接创建一个包含系统调用指令的汇编文件。
似乎在一天结束时,我们以某种方式结束了系统调用(指令 syscall 或 int)。这是唯一的方法吗?
在现代 PC 中,术语“应用程序”与“用户程序”的含义相同吗?
我编写的 PowerPoint、Google Chrome、Visual Studio Code、Photoshop 或 C 程序都是需要系统调用来请求操作系统服务以执行写入文件等特权操作的应用程序/用户程序的示例,这样说是否正确?