嘿,今天我尝试对NDIS.sys进行二进制比较,我发现了一些奇怪的东西。我接受了一个函数,并开始比较它。前30个字节在磁盘(使用IDA)和内存(使用WinDbg)上是相同的。然后,事情发生了变化。我看到类似“jmp_imp_XXXXX”的内容。JMP字节相同,但地址不同。我的问题是-是什么造成了差异?我认为这与搬迁有关。虽然跳转是在同一个模块中寻址,但它是一个长跳转,它相对于模块基地址。如果发生重定位,它也需要重定位这个地址,尽管它在同一个模块上。我是对还是完全错了?:-)谢谢。 最佳答案 是的,当一个模块没有加载到它在内存中的首选
我读到过,在具有4GB系统内存的32位系统上,2GB分配给用户模式,2GB分配给内核模式。但是,如果我有一个具有512MB内存的系统,它会被划分为256MB给用户地址空间和256MB给内核地址空间吗? 最佳答案 您混淆了物理内存和虚拟内存。2GB分配给用户/系统,但它是虚拟内存。更正确的说法是它们不是分配的,而是构成了一个寻址空间。最初这个空间根本没有绑定(bind)到物理内存。当应用程序实际需要内存时(第一次是在启动时)分配物理内存并将地址空间中的一些地址映射到它。当内存被分配但使用时间不够长或PC的物理内存用完时,数据可以转储到
我注意到所有_EPROCESS对象都通过ActiveProcessList链接相互链接。这个列表的目的是什么。操作系统使用这个事件进程列表做什么? 最佳答案 在WindowsNT中,可调度的单位是线程。进程充当线程的容器,也充当定义哪些虚拟内存映射处于事件状态(以及其他一些东西)的抽象。所有操作系统都需要保持此信息可用。在不同的时间,操作系统的不同组件可能需要搜索与特定特征匹配的进程,或者需要评估所有事件进程。那么,我们如何存储这些信息呢?为什么不是内存中的巨大数组?那么,这个阵列有多大?我们是否愿意将事件进程的数量限制为该数组的大
每当我尝试在我的pendrive上写任何东西时,都会生成一个写系统调用。我想要做的是,应该捕获这个写入调用,并且应该要求用户输入预先确定的密码(我可以在编码过程中自行定义)。请告诉我这是否可能?如果是,我应该怎么做? 最佳答案 WindowsDDK有一个在filesys\minifilter中Hook文件读取/写入/复制的示例,同时包含操作前和操作后回调,您应该为内核方面设置这些回调。对于gui部分,您需要一些东西来进行非阻塞旋转,直到驱动器发出事件信号,您可能还需要管道或映射内存View来传递数据
我已经为某些特定功能编写了一个Windows驱动程序。它可以正常工作。但是,我在通过ioctl接口(interface)调用它时遇到了问题。在我的应用程序中,我调用CreateFile并尝试将我提供给驱动程序的名称传递给驱动程序。但是,它给了我一个错误,“无法打开设备”,错误代码是0x03。我使用的名称与我为司机提供的名称完全相同。从cmd行应用程序打开驱动程序的名称:\DosDevice\my_driver传递给CreateFile的名称也是相同的。有没有办法在Windows命名空间中找到我的驱动程序的名称? 最佳答案 Win32
因此,在使用MmMapIoSpace映射内存空间时,我注意到超过某个点后,数据在写入时就被丢弃了。没有错误、断点,甚至没有错误检查。一切正常,没有任何不利影响。我决定做一个写/读测试(驱动程序将1写入每个字节的长度为intended大小)并且读取器(用户区)模式将读取并报告1的位置结束了。它得出的数字是3208,这是一个看起来不错的整数(/8=401,/256=12,等等)这是怎么回事?为什么我无法映射完整的缓冲区空间?编辑在64位中它下降到2492。 最佳答案 我不是专家,但我不明白如何依赖MmMapIoSpace来完成您要求它做
我正在编写一个需要与垂直空白中断同步的驱动程序,以便沿着USB管道发送一些数据。在用户模式下,有DirectX函数可用于此,如IDXGIOutput::WaitForVBlank和一些年长的。我无法从内核中使用它们。我在Windows8SDK中找到了另一个接口(interface):D3DKMTWaitForVerticalBlankEvent它甚至有一个内核头文件(头文件位于SDK的/km/文件夹中),但它需要gdi32.lib,这是一个用户模式库并与之链接会削弱驱动程序。有什么方法可以让我等待或收到有关垂直空白发生的通知(无需轮询)? 最佳答案
即使您不了解AutoIt,您也可能对这个问题有一些深入的了解,因为AutoIt并不是一种完全独特的语言。它是一种可以轻松访问窗口的dll的语言。我正在尝试使用AutoIt语言编写一个与WindowsJournal一起运行的程序,以便通过热键选择它的颜色。我已经完成了大部分脚本并开始工作。我现在正在为它制作一个GUI。我发现它确实使用imagelist来显示颜色的图像。我想在我的GUI中使用该确切的图像列表以获得更加用户友好的外观。我的问题是我无法捕获它并使用它。我也试过复制它,但无济于事。我认为这可能是因为我的应用程序没有适当的权限来访问该程序的资源。我的脚本是这样的(还有很多变体):
我正在使用主机上的VS2012调试安装在目标VM上的KmdfSmall驱动程序。但是,主机上VS2012中的“调试器即时窗口”不打印任何消息。我在这里使用KdPrintEx((DPFLTR_IHVDRIVER_ID,DPFLTR_INFO_LEVEL,"\nKmdfSmallEvtDeviceAddhasbeencalled\n")),因为它在msdn中给出。.我更新了flag的值以及在OSRonline中描述的.“HKLM\SYSTEM\CCS\Control\SessionManager\DebugPrintFilter”。在此键下,创建一个名为“DEFAULT”的值,并将此键的值
不明白是不是有什么理由贴图带有代码的os模块(例如在win32中,我不知道它在其他系统上的情况)在相同的作为正在运行的用户进程的逻辑空间。不会最好/更清楚,不要映射所有模块进入大空间但只是一些跳表内核调用或类似的东西。有没有一些为什么要把它全部映射到大面积? 最佳答案 例如,在32位Linux上,地址空间通常配置为用户空间任务具有底部3GB的虚拟地址空间,内核具有顶部1GB。这里的优点是在进入系统调用时,不需要更改页表-因此没有TLB刷新,内核可以对用户空间任务进行高效的内存访问(通过适当的指针验证)。