问题标签 [usermode]

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 投票
1 回答
398 浏览

windows - WinDBG 可以显示有关任意堆地址的信息吗?

WinDBG 是否提供了一种显示dt普通堆地址的类型信息 (?) 的方法?

我正在研究分页堆和用户模式堆栈跟踪不可用的场景。在分析堆时,我正在追踪堆的过度使用情况,并在堆中发现了引用某个内存地址的各种对象。主要 !heap -srch [UserPtr] +0x30 返回的对象是这样的:

现在由于缺少用户模式堆栈跟踪!heap -p -a [UserPtr]返回任何内容。

0x00000224ceae3ad0所以我在这里,我知道这实际上0x00000224ceae8090是罪魁祸首。实际上[UserPtr]+0x30(48 字节),原因我还没有找到,但我被困在这里。(我创建了一个小样本,我可以在其中验证地址,所以至少在样本中我很确定地址是正确的)

在这一点上,我可以做些什么有用的事情来获得有关这些地址的更多信息,而这些信息!address [Addr]并没有太大帮助。

因为我知道大小和地址,所以我可以在堆中四处走动,看看我能找到什么,但这似乎是随机的。

关于如何获取更多数据的任何提示都会很棒。

对于它的价值:我与 LFH 在 NT 堆上。

编辑: 在我的示例中,我当然知道数据类型,但在现实世界的场景中,我所面临的这些类型对我来说是未知的,即使可以访问代码,除了巧合匹配之外,哪些对象的哪个实例指向该地址可能并不明显的大小。

0 投票
1 回答
154 浏览

operating-system - 分页中的用户页面和主管页面有什么区别

我了解如何使用该位区分页面是用户页面还是监督页面,但是这些页面之间有什么区别以及它与用户模式或监督模式有什么关系?

0 投票
2 回答
411 浏览

c - 如何在 ARM926EJ-S 上实现 SVC 处理程序?

我正在为基于 ARM 的设备编写一个业余操作系统,目前正试图使其在 QEMU versatilepb(ARM926EJ-S) 中工作。

当我尝试在syscall我的内核中实现 s 时,问题就来了。这个想法很简单:通过SVC( SWI) 指令实现系统调用。所以应用程序在用户模式下工作,为了调用内核函数,它们执行SVC <code>指令,因此 ARM 处理器切换到管理模式并调用适当的SVC处理程序。

但问题是,当我打电话时__asm__("SVC #0x08");,设备只是重置并调用RESET_HANDLER,所以看起来模拟器只是重新启动。

我已经花了几个小时来找出问题所在,但仍然不知道。

这是ivt.s(带有处理程序的初始代码)的代码:

这就是我制作的方式syscall

syscall实施:

但是下面的代码SWI_HANDLER甚至从未被调用过。

我真的什至不知道如何问这个问题,因为看起来我在脑海中遗漏了一些非常基本的信息。

那么可能是什么问题呢?我应该提供哪些信息以使您能够帮助我?

这也是链接器脚本:

0 投票
1 回答
163 浏览

c++ - 在指针中编码附加信息

我的问题:

我需要在指向对象的指针中编码有关对象的附加信息。我认为我可以做的是使用指针的一部分来做到这一点。也就是说,使用几位编码布尔标志。据我所知,Windows内核中某些类型的句柄也是如此。

背景:

我正在编写一个小型内存管理系统,可以垃圾收集未使用的对象。为了减少对象引用的内存消耗并加快复制速度,我想使用带有附加编码数据的指针,例如对象的状态(活动或准备好被收集)、锁定位和可由单个位表示的类似事物。

我的问题:

如何在不实际覆盖指针的重要位的情况下将此类信息编码为 64 位指针?

由于 x64 windows 的地址空间有限,我相信并不是指针的所有 64 位都被使用,所以我相信应该是可以的。但是,我无法找到哪些位窗口实际用于指针,哪些没有。为了澄清,这个问题是关于 64 位窗口上的用户模式。

提前致谢。

0 投票
1 回答
257 浏览

windows - 带有 NDIS 的用户模式驱动程序

Windows 过滤平台提供 API 来开发内核模式和用户模式网络过滤器驱动程序。
是否可以使用 Windows API 在 NDIS 上开发用户模式网络过滤器驱动程序?

0 投票
0 回答
94 浏览

c++ - x32 位用户模式应用程序可以通过 IOCTL 与 x64 驱动程序进行通信吗?

您好,我正在尝试从我的 x32 位应用程序到我的 x64 驱动程序进行工作通信,但通信返回始终为假(驱动程序已加载并使用 x64 应用程序而不是 x32 应用程序)我用于两者的源是这个https://github.com/changeofpace/MouClassInputInjection

根据我在 microsoft pages 中阅读的内容,x32 应用程序可以与 x64 驱动程序通信,谢谢。

https://docs.microsoft.com/en-us/windows-hardware/drivers/kernel/supporting-32-bit-io-in-your-64-bit-driver

我正在使用 Windows 10。

通过使用套接字解决。

0 投票
1 回答
42 浏览

windows - 编译没有 kernel32.lib 的 c 程序时出现链接错误

我想创建只使用 ntdll 并对其使用安全检查的应用程序。但是当我删除 kernel32.lib 或取消选中“从父级或项目默认值继承”时,我在构建项目时会出现链接错误。 链接错误

这是一个本机项目,当我在编译器设置中删除“安全检查”开关并删除“__security_init_cookie”功能时工作正常。这个项目链接到 ntdll.lib

谁能帮我?

0 投票
1 回答
46 浏览

qemu - 为什么我的 cpu 似乎失去了解码能力

我在完成操作系统课程的实验室时遇到了这个问题。我们正在尝试实现一个具有系统调用功能的内核(平台:QEMU/i386)。在测试内核时,出现问题,内核将用户程序加载到内存并使用' iret '指令将CPU状态从内核模式更改为用户模式后,CPU以一种奇怪的方式工作,如下所示。

  • 无论当前指令多长,%EIP 寄存器每次增加 2 。
  • 似乎没有执行任何指令,因为同时没有其他寄存器发生变化
0 投票
1 回答
206 浏览

c++ - 在 64 位 UEFI 操作系统中实现用户模式和内核模式切换

我正在编写一个 64 位 UEFI 操作系统(GNU-EFI - Bootloader)。我想知道操作系统中的用户模式和内核模式,我必须在我的操作系统中实现用户模式和内核模式,我在互联网上找到了一些但它对我不起作用(我认为这是因为 64 位),那么我该怎么做呢?

我用这个:

OSDEV- Ring3

但是当我在我的 gdt 中实现它时,我的内核挂掉了!

我的内核代码:

评论不是我的普通代码,这些是从 OSDEV 复制的 - 这些挂在内核中,所以我评论了那些。

gdt.h

gdt.cpp

gdt.asm

如何在 64 位 UEFI 操作系统中进入 Ring3,然后如何将用户模式切换到内核模式?

0 投票
0 回答
33 浏览

windows - WinDBG 到达断点但不单步执行(用户模式)

函数开始处的断点被命中,我可以看到,但之后它不会单步执行函数,而是只是跳转而不是单步执行,因此我可以验证所有变量