有没有办法在linux内核中获取函数调用?我知道__ func __返回正在执行的函数名.我正在寻找名为" __ func __ "的函数
kernel linux-device-driver linux-kernel embedded-linux kernel-mode
我试图让网络上的WinDbg调试工作,但是在我进入调试器(Debug-> Break)之后它总是失去连接,然后尝试再次启动它(Debug-> Go).但是,如果我从不闯入调试器,看起来连接在'N'时间内是稳定的.我甚至可以在WinDbg中看到调试打印语句,因为我在此宽限期内使用目标系统.而且,在调试中断时似乎连接是好的,因为我可以从目标系统收集信息.我使用"!ustr srv!SrvComputerName"来获取目标计算机名称,并返回正确的名称.任何帮助将非常感激.
设置系统:我按照MSDN网站的说明设置我的目标和主机系统.
调试:以下是我尝试解决此问题的方法.
观察:
系统信息:主机系统正在运行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) 我想了解更多有关osdev的信息.所以我想从其他小内核中学习,以便在osdev上做得更好.学习osdev有什么好的内核吗?当然它需要是GPL所以我可以访问源代码并可以自由地修改它.
因此,virtualbox的一个很好的功能是拥有可以在以后恢复的快照.
但是,在使用virtualbox和windbg进行内核调试时,恢复快照时不会恢复调试会话.
有没有办法强制windbg和来宾机器在恢复机器快照时重新同步并重新启动内核调试会话而不必每次都重新启动机器?
我正在为我们的驾驶员团队建立一个硬件模拟器.现在,模拟器分为2个模块:第一个模块在驱动程序内部运行,在内核模式下运行,这是驱动程序和HW-Simulator之间的主要接口.第二个模块是一个可执行的用户模式代码,它为模拟器生成数据并通过调用将其传送到模拟器DeviceIOControl(在Windows API下)
我的需求是:我希望能够在内核模式下执行用户模式可执行文件.我需要能够以相对便携的方式做到这一点.目前我只在Windows上运行,但这应该很快就会改变.此外,我需要能够通过它的stdin管道与用户模式代码进行通信,以便重新配置它并最终关闭它.
我发现了这一点: 从内核空间执行用户空间函数
但它只与linux内核相关.有更便携的替代方案吗?或Windows替代?
我可以通过简单地使用ShellExecute/RunAs API函数在Windows中执行此操作吗?
注意:我们知道从内核空间调用用户模式代码所涉及的安全风险.但由于这只是用作测试环境而不会达到我们的发布代码,因此我们并不关心.
如何从linux内核模块代码(内核模式)中获取有关运行哪个内核版本的运行时信息?
我发现并阅读了这个问题,但我没有找到我的答案SSDT挂钩替代x64系统
我想保护我的申请免受其他程序的终止.在32位版本的Windows中我使用了SSDT hooking挂钩ZwTerminateProcess或ZwOpenProcess.我现在要将程序升级为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) 我正在编写一个驱动程序,该驱动程序需要立即弹出一个对话框以通知用户事件。
(类似于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程序时,它只生成一些机器可理解的代码.这个代码可以直接在硬件上运行,从这个问题来讲.
所以我的问题是:
如果C程序可以直接在硬件上运行,那么内核如何处理该程序的资源分配?
如果从编译器生成的可执行文件是纯机器可理解的形式,那么特权和非特权模式如何工作?
如果程序可以直接在硬件上运行而不是通过内核,内核如何管理硬件资源的权限?
我一直在寻找敏感指令和特权指令之间的明显区别,但现在一切都很模糊。
据我所知:如果在用户空间中执行,敏感指令需要捕获到内核模式,否则它会被忽略,而如果在用户空间中执行,特权指令将捕获到内核模式。
这种差异对我来说是模糊且不能令人满意的。请随意留下一个很棒的答案!
编辑:只是想一下,这些是同一件事吗?
virtualization operating-system virtual-machine kernel-mode paravirtualization
kernel-mode ×10
kernel ×3
c ×2
debugging ×2
driver ×2
linux-kernel ×2
usermode ×2
windbg ×2
windows ×2
64-bit ×1
c++ ×1
hook ×1
osdev ×1
snapshot ×1
system-calls ×1
virtualbox ×1
winapi ×1