标签: kernel-mode

linux内核中的函数调用者

有没有办法在linux内核中获取函数调用?我知道__ func __返回正在执行的函数名.我正在寻找名为" __ func __ "的函数

kernel linux-device-driver linux-kernel embedded-linux kernel-mode

20
推荐指数
2
解决办法
2万
查看次数

WinDbg失去网络连接调试,目标机器冻结

我试图让网络上的WinDbg调试工作,但是在我进入调试器(Debug-> Break)之后它总是失去连接,然后尝试再次启动它(Debug-> Go).但是,如果我从不闯入调试器,看起来连接在'N'时间内是稳定的.我甚至可以在WinDbg中看到调试打印语句,因为我在此宽限期内使用目标系统.而且,在调试中断时似乎连接是好的,因为我可以从目标系统收集信息.我使用"!ustr srv!SrvComputerName"来获取目标计算机名称,并返回正确的名称.任何帮助将非常感激.

设置系统:我按照MSDN网站的说明设置我的目标和主机系统.

调试:以下是我尝试解决此问题的方法.

  1. 在网络适配器上禁用流控制并使用半双工模式.我在阅读这篇文章之后尝试了这个:WinDbg,如果测试机器在同一个交换机上,主机丢失网络
  2. 购买新的网络适配器.根据这个网页,我的网络适配器应该支持网络内核调试.但是,进一步的调查显示,供应商有一个不更新设备ID的坏习惯,因此我决定通过购买来自不同供应商的新适配器来排除这种可能性.
  3. 更改网络端口.我尝试过一个装满不同网络端口的手(49152-65535),以防万一其中一个用于不同目的.
  4. 拔下以太网电缆,然后将其重新插入.一旦连接丢失,我试过这个希望它会重新建立连接.
  5. 重新启动目标系统.与#4相同的原因.
  6. 更改PCIe端口.我的选择已经用完了.
  7. 将主机系统移动到其他网络交换机.没变.

观察:

  1. Wireshark显示目标系统在系统启动后立即向主机系统发送UPD包,但主机系统在WinDbg启动之前不响应.更有趣的是,即使目标系统没有响应,目标系统仍继续向主机发送UPD包.不幸的是,我不了解UPD包数据.
  2. 如果重新启动,WinDbg可以始终如一地重新建立与目标系统的连接.目标系统似乎陷入调试中断.

系统信息:主机系统正在运行Windows 8.1 Pro.目标系统正在运行Windows 8.1企业评估(8GB内存).

WinDbg打印出来:

Microsoft (R) Windows Debugger Version 6.3.9600.17237 AMD64
Copyright (c) Microsoft Corporation. All rights reserved.

Using NET for debugging
Opened WinSock 2.0
Waiting to reconnect...
Connected to target **.**.*.*** on port ***** on local IP **.**.*.***
Connected to Windows 8 9600 x64 target at (Fri …
Run Code Online (Sandbox Code Playgroud)

debugging windbg kernel-mode

14
推荐指数
2
解决办法
2614
查看次数

是否有足够的小内核来学习osdev?

我想了解更多有关osdev的信息.所以我想从其他小内核中学习,以便在osdev上做得更好.学习osdev有什么好的内核吗?当然它需要是GPL所以我可以访问源代码并可以自由地修改它.

kernel osdev kernel-mode

11
推荐指数
2
解决办法
5818
查看次数

WinDbg和Virtualbox以及机器快照 - 强制内核调试重新连接

因此,virtualbox的一个很好的功能是拥有可以在以后恢复的快照.

但是,在使用virtualbox和windbg进行内核调试时,恢复快照时不会恢复调试会话.

有没有办法强制windbg和来宾机器在恢复机器快照时重新同步并重新启动内核调试会话而不必每次都重新启动机器?

debugging virtualbox windbg snapshot kernel-mode

10
推荐指数
1
解决办法
672
查看次数

从内核模式执行用户模式可执行文件

我正在为我们的驾驶员团队建立一个硬件模拟器.现在,模拟器分为2个模块:第一个模块在驱动程序内部运行,在内核模式下运行,这是驱动程序和HW-Simulator之间的主要接口.第二个模块是一个可执行的用户模式代码,它为模拟器生成数据并通过调用将其传送到模拟器DeviceIOControl(在Windows API下)

我的需求是:我希望能够在内核模式下执行用户模式可执行文件.我需要能够以相对便携的方式做到这一点.目前我只在Windows上运行,但这应该很快就会改变.此外,我需要能够通过它的stdin管道与用户模式代码进行通信,以便重新配置它并最终关闭它.

我发现了这一点: 从内核空间执行用户空间函数

但它只与linux内核相关.有更便携的替代方案吗?或Windows替代?

我可以通过简单地使用ShellExecute/RunAs API函数在Windows中执行此操作吗?

注意:我们知道从内核空间调用用户模式代码所涉及的安全风险.但由于这只是用作测试环境而不会达到我们的发布代码,因此我们并不关心.

c++ windows kernel usermode kernel-mode

7
推荐指数
1
解决办法
3428
查看次数

在运行时从Linux内核模块获取内核版本

如何从linux内核模块代码(内核模式)中获取有关运行哪个内核版本的运行时信息?

kernel-module linux-kernel kernel-mode

6
推荐指数
1
解决办法
7396
查看次数

x64驱动程序中的钩子ZwTerminateProcess(没有SSDT)

我发现并阅读了这个问题,但我没有找到我的答案SSDT挂钩替代x64系统

我想保护我的申请免受其他程序的终止.在32位版本的Windows中我使用了SSDT hooking挂钩ZwTerminateProcessZwOpenProcess.我现在要将程序升级为64位版本的Windows.不幸的是在64位窗口中我们不能使用SSDThook(因为Patch Guard(KPP)),请注意我不想在这种情况下绕过PG并且我只使用内核模式挂钩.例如,我不希望我的程序通过以下代码开始终止(偶数):

NTSTATUS drvTerminateProcess( ULONG ulProcessID )
{
    NTSTATUS          ntStatus = STATUS_SUCCESS;
    HANDLE            hProcess;
    OBJECT_ATTRIBUTES ObjectAttributes;
    CLIENT_ID         ClientId;

    DbgPrint( "drvTerminateProcess( %u )", ulProcessID );

    InitializeObjectAttributes( &ObjectAttributes, NULL, OBJ_INHERIT, NULL, NULL ); 

    ClientId.UniqueProcess = (HANDLE)ulProcessID;
    ClientId.UniqueThread  = NULL;

    __try
    {
        ntStatus = ZwOpenProcess( &hProcess, PROCESS_ALL_ACCESS, &ObjectAttributes, &ClientId );
        if( NT_SUCCESS(ntStatus) )
        {
            ntStatus = ZwTerminateProcess( hProcess, 0 );
            if( !NT_SUCCESS(ntStatus) )
                DbgPrint( "ZwTerminateProcess failed with status : %08X\n", …
Run Code Online (Sandbox Code Playgroud)

64-bit hook driver kernel-mode sql-server-data-tools

6
推荐指数
1
解决办法
1万
查看次数

如何显示来自驱动程序的弹出消息框(内核模式)?

我正在编写一个驱动程序,该驱动程序需要立即弹出一个对话框以通知用户事件。
(类似于NTFS的“损坏的文件”通知,但不是与文件系统相关的驱动程序。)

我知道ExRaiseHardError并且IoRaiseInformationalHardError应该能够做到这一点,但是它们似乎不起作用-它们“成功地”返回而没有实际执行任何操作。

我该如何做(创建用户模式程序)?


用户模式代码的版本(其正常工作)低于。

在内核模式版本中,我以完全相同的方式ExRaiseHardError代替调用NtRaiseHardError

#include <windows.h>

#pragma comment(lib, "ntdll.lib")    // Needs ntdll.lib from Windows Driver Kit

typedef enum HardErrorResponseType {
    ResponseTypeAbortRetryIgnore,
    ResponseTypeOK,
    ResponseTypeOKCancel,
    ResponseTypeRetryCancel,
    ResponseTypeYesNo,
    ResponseTypeYesNoCancel,
    ResponseTypeShutdownSystem,
    ResponseTypeTrayNotify,
    ResponseTypeCancelTryAgainContinue
} HardErrorResponseType;

typedef enum HardErrorResponse {
    ResponseReturnToCaller,
    ResponseNotHandled,
    ResponseAbort, ResponseCancel,
    ResponseIgnore,
    ResponseNo,
    ResponseOk,
    ResponseRetry,
    ResponseYes
} HardErrorResponse;

typedef enum HardErrorResponseButton {
    ResponseButtonOK,
    ResponseButtonOKCancel,
    ResponseButtonAbortRetryIgnore,
    ResponseButtonYesNoCancel,
    ResponseButtonYesNo,
    ResponseButtonRetryCancel,
    ResponseButtonCancelTryAgainContinue
} HardErrorResponseButton;

typedef enum HardErrorResponseDefaultButton …
Run Code Online (Sandbox Code Playgroud)

c windows winapi driver kernel-mode

5
推荐指数
1
解决办法
2776
查看次数

C和内存中的资源保护

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

所以我的问题是:

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

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

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

c operating-system system-calls usermode kernel-mode

5
推荐指数
2
解决办法
222
查看次数

敏感指令和特权指令的区别

我一直在寻找敏感指令和特权指令之间的明显区别,但现在一切都很模糊。

据我所知:如果在用户空间中执行,敏感指令需要捕获到内核模式,否则它会被忽略,而如果在用户空间中执行,特权指令将捕获到内核模式。

这种差异对我来说是模糊且不能令人满意的。请随意留下一个很棒的答案!

编辑:只是想一下,这些是同一件事吗?

virtualization operating-system virtual-machine kernel-mode paravirtualization

5
推荐指数
1
解决办法
5291
查看次数