问题标签 [kernel-mode]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
326 浏览

c++ - c++中高速读取RS232的CTS线

我是一个相对的 rs232 新手。我有一个经过时间的阅读器芯片:

http://www2.l-3com.com/edi/dyna-digital.htm

已配置为每隔 250 毫秒在 RS232 com 端口的 CTS 线上喷出数据,每个数据集持续 62.5 毫秒。

数据格式为BCD;二进制编码的十进制。

我知道有 ::GetCommModemStatus 会告诉我 CTS 线路是打开还是关闭,但我需要快速监控。

有没有办法在 C++ 中以所需的粒度级别在一段时间内读取 CTS 行,也许是 api?

用户模式应用程序是否足以以所需的速度读取,还是我必须编写内核模式驱动程序?

非常感谢

0 投票
1 回答
493 浏览

debugging - 用户模式调试比内核模式调试有优势吗?

据我了解,从高层次上讲,用户模式调试为您提供了对进程私有虚拟地址的访问。调试会话仅限于该进程,它不能覆盖或篡改其他进程的虚拟地址空间/数据。

据我所知,内核模式调试提供了对其他驱动程序和内核进程的访问,这些驱动程序和内核进程除了原始进程地址空间外,还需要对多种资源进行完全访问。

由此,我开始认为内核模式调试似乎比用户模式调试更健壮。这给我提出了一个问题:当调试模式的两个选项都可用时,是否有必要选择用户模式而不是更健壮的内核模式?

我对这个概念还很陌生,所以我可能错误地考虑了这两种模式。我也很感激那里的任何见解,以更好地理解我可能遗漏的任何东西。我只是似乎注意到很多人似乎试图避免内核调试。我不完全确定为什么,因为它看起来更健壮。

0 投票
4 回答
432 浏览

c - C和内存中的资源保护

当我们编译一个 C 程序时,它只是生成一些机器可以理解的代码。这段代码可以直接在硬件上运行,从这个问题可以看出。

所以我的问题是:

  1. 如果 C 程序可以直接在硬件上运行,内核如何处理该程序的资源分配?

  2. 如果编译器生成的可执行文件是纯机器可理解的形式,那么特权模式和非特权模式如何工作?

  3. 如果程序可以不通过内核直接在硬件上运行,那么内核如何管理硬件资源的权限?

0 投票
1 回答
1902 浏览

linux-kernel - Linux内核模式下,如何执行用户空间命令

我在内核模式下挂钩 execve(将 system_call_table 条目 __NR_execve 更改为我的函数)。我想检查 ELF 的汇编代码。如果它有害,我将直接返回而不执行它。

我正在编写一个 linux 模块。在Linux内核模式下,我想使用objdump来反汇编ELF文件。我想去用户模式执行objdump,然后回到内核模式。这可能吗?谢谢你。

0 投票
0 回答
150 浏览

windows - 自己的 libusb-win32 驱动程序需要 EV 代码签名吗?

我正在尝试让我们的 libusb-win32 驱动程序与不同的 Windows 操作系统一起工作。我已经在 7、8 和 10 上成功安装了它,并使用了我导入到 root 和trustedpublisher 的自签名证书。

剩下的就是购买官方证书并分发它。由于 Windows 10 需要将 EV 用于内核模式驱动程序,但 libusb 已经提供了具有有效签名的 .sys 和 .dll。

由于定价存在很大差异,问题是:我是否需要 EV 证书来签署 .cat 或者 Windows 是否可以区分在 .cat 中使用标准证书签名安装和使用嵌入式内核模块签名加载内核模块?

0 投票
1 回答
276 浏览

io - printf 是特权指令吗?

由于 I/O 指令是需要从用户模式切换到内核的特权指令,printf 是否也被视为特权指令?执行 printf 指令时是否有模式切换?

0 投票
4 回答
2065 浏览

kernel - RTOS 中是否存在用户空间/内核空间?

我从各种内核开发人员那里听说,大多数 RTOS 在用户空间和内核空间之间没有任何分离,因此不需要任何上下文切换。

这是真的?

同时,我从其他一些人那里听说这不是真的,VxWorks 或 Integrity 等 RTOS 已经分离了用户模式内核模式。

首先,哪些假设是正确的?

其次,如果这两个假设都是正确的,那么这就提出了一个问题,即 RTOS 供应商何时使用内核空间和用户空间之间的分离,何时不使用?

你能说出一些没有用户模式/内核模式分离的知名 RTOS 吗?

最后,作为一个附带问题,他们如何控制 I/O 操作并避免竞争条件?

0 投票
0 回答
521 浏览

windbg - 如何在windows上启动内核调试下的进程?

我有一个硬盘驱动器被 TryeCrypt 加密,一个自定义版本,自我输入密码,我通过 MBR 调试找到了这个 40 字节的密码,但无法使用标准版本 7.1a 安装它。

我想要的是从这个硬盘驱动器中获取一些文件,好消息是,这个硬盘驱动器是可启动的,它是一个 windows xp sp2,但是一个全屏应用程序是自动启动的,并且任何输入(键盘、鼠标等)都被阻止了,因此,触摸它的唯一方法是使用 vmware gdb stub 对其进行调试。

ida 的远程 dbg 调试器运行良好,现在我触摸客户的内存,编辑它的代码,设置断点并加载符号。

所以问题是,我怎样才能通过修补内核来启动一个进程?

我的想法是,构建一个winddk项目,用用户APC实现一个驱动程序,然后将其反汇编以获得它的汇编代码,然后通过ida将其修补到guest中。

任何想法?谢谢。

0 投票
1 回答
130 浏览

c++ - 有没有办法在没有锁的情况下同步它?

假设我有 3 个可以由上层调用的函数:

  • Start- 只有在我们还没有开始时才会被调用,或者 Stop 之前被调用过
  • Stop- 只有在成功调用 Start 后才会调用
  • Process-可以随时调用(同时在不同线程上);如果开始,将调用到较低层

Stop中,它必须等待所有Process调用完成对下层的调用,并阻止任何进一步的调用。使用锁定机制,我可以想出以下伪代码:

有没有办法在没有锁定机制的情况下实现相同的行为?也许对 InterlockedCompareExchange 和 InterlockedIncremenet/InterlockedDecrement 有一些花哨的使用?

我问的原因是这是在网络驱动程序的数据路径中,我真的不希望有任何锁。

0 投票
2 回答
4793 浏览

sockets - 内核模块可以通过netlink主动向用户空间发送消息吗?

我正在尝试运行从此处复制的以下代码。我做了一些更改以使用较旧的内核版本运行它。

当我插入内核模块时,nlmsg_multicast()失败并nlmsg_multicast() error: -3/var/log/messages. 运行用户空间程序时,socket()失败。

我真正想做的是,

  • 内核模块创建一个套接字,而不考虑用户空间中的任何进程
  • 内核模块向用户空间发送一些事件
  • 如果用户空间中的任何进程回复了一个事件,那么内核模块进程就该回复

因为,可能会发生用户空间中没有可用于回复事件的进程,即使在这种情况下,模块也必须发送事件并等待一段时间才能响应。

是否可以将第一条消息从内核模块发送到用户空间中的进程?我怎样才能做到这一点?

内核模块代码:

生成文件

foo.c

用户空间程序:( 编译gcc somename.c

感谢您的时间!