草庐IT

虚拟地址

全部标签

c++ - 如何以编程方式确定网卡是虚拟网卡?

在HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/WindowsNT/CurrentVersion/NetworkCards/下,我可以枚举我机器上安装的每个网卡。但是有些应用,尤其是虚拟机,会安装一些虚拟网卡。我的问题是:如何以编程方式确定网卡是虚拟网卡? 最佳答案 取决于虚拟机。如果它使用例如QEMU作为硬件仿真,将很难确定它不是“真实的东西”——充其量,你可能会注意到它比真实的东西应该更快,但你很难被插入知道这一点。当然,虚拟机也可能在虚拟机中安装了真实的网卡。所以你不能真正确定它是不是真实的,即使

windows - 如何将 XLib key 代码转换为 Microsoft 虚拟 key ?

如何将X11键码转换为microsoftvirtualkeycodeintprocessKeyboardMessage(XEvent*event){assert(KeyPress==event->type);//TODO:Beforereturningconvertkeycodeintomicrosoftvirtualkeycodereturn(event->xkey.keycode);} 最佳答案 一种选择是对每个平台上所有可能的键进行枚举。然后您可以以系统的native格式处理应用程序中的键码。你需要做一些微妙的事情来解决某些情

Windows PE 确定入口点虚拟地址

我正在使用“PE编辑器”检查Windows可执行文件,它显示入口点为0x15B8,我们如何确定该入口点的地址为虚拟地址? 最佳答案 入口点是相对于模块的加载地址存储的。模块可以通过设置IMAGE_OPTIONAL_HEADER中的ImageBase字段来声明其首选地址(参见thispage)。但是,操作系统可以自由选择另一个地址,或者是因为首选地址正在使用中,或者是最近因为ASLR。我不确定你在什么环境下运行这个,但如果你用一个实时运行的程序来做这个:这是一个实现细节,但在NT上你可以转换一个HMODULE成一个指针,这是模块的加载

windows - 为什么有时 .data 部分的虚拟大小大于原始大小?

最近我发现,PE中的.data部分的虚拟大小可以大于原始大小(在文件中)。这是相当令人吃惊的。有人说这是某处未初始化数据的结果。但是在分析了一些PE之后,实在找不到这个多余的数据。以下是某些程序的PEDump结果的链接:"Helloworld"PEDump如您所见,.data部分的虚拟大小大于原始大小。为什么在这个特定示例中会这样? 最佳答案 任何初始化数据的值都存储在该部分中,如果二进制文件想在内存中为任何未初始化数据保留空间,则虚拟大小将大于原始数据大小。您不会在文件中找到此数据,因为它不需要存在于此。引用数据(在代码部分中)的

windows - 直接访问 Windows 虚拟打印机端口

似乎有一种方法可以在不使用专用打印机驱动程序的情况下直接向WindowsUSB虚拟打印机端口(例如USB001)写入和读取数据。有人知道怎么做吗? 最佳答案 最简单的方法是我在原始评论中提出的方法。您可以使用您想要的任何驱动程序创建USB打印机(通用文本总是工作良好),然后将其共享。从这里您可以使用类似的方式连接到共享netuselpt1\\your_workstation\printer_share然后您可以打印到lpt1(或复制到lpt1),您将利用Windows假脱机程序将文件获取到那里。另一种选择是在代码中执行此操作,将数据

c++ - 通过系统虚拟串口向蓝牙发送字节

我希望能够在C++中通过蓝牙发送和接收数据。我发现系统(win8.1)为配对设备创建了2个虚拟端口。当我尝试使用WriteFile将数据发送到连接的端口(“传入”)时,函数返回成功并且写入了0个字节。我的问题无法向虚拟BT串口发送和读取字节。我使用“GetDefaultCommConfig”来检查串行端口是否处于事件状态。它适用于USBUART连接,但有时无法连接虚拟端口。我的问题:我应该连接到2个端口,将字节写入“outgoing”并监听“传入”端口?我应该在我的代码中更改什么来解决我的问题?为什么Windows为蓝牙创建2个串口?代码:#define_CRT_SECURE_NO_W

windows - 如何从调用导入地址表中找出函数名?

我反汇编了advapi32.dll中的一个函数(特别是RegOpenKeyEx)。我看到两个FF15调用IAT:calldword[0x77dd13ec]和calldword[0x77dd15d4]使用dumpbin我转储了DLL的导入,它说导入地址表从77DD124C开始。但是0x77dd13ec没有出现在日志中。1A0的相对地址也没有出现在其中的任何位置。显然,那里显示的地址与IAT中的地址完全无关。是否可以在不编写和运行实际调用API的测试程序的情况下知道这些调用点链接到哪些函数?有什么方法可以查出来?我相信链接器生成了这些CALL指令,这些指令必须知道它链接到哪个函数。

c# - 发送被 GetAsyncKeyState() 忽略的虚拟鼠标点击?

我整天都在试验和搜索,但终究还是想不出如何做到这一点。如标题所示,我希望能够发送被GetAsyncKeyState()之类的东西忽略的鼠标点击。基本上我在做什么://Whilephysicallyholdingleftmousebutton...while(GetAsyncKeyState(0x01)!=0){//leftmousebuttonvirtuallydown(obviouslyalreadyisdownthefirstloop)mouse_event(2,0,0,0,0);Thread.Sleep(100);//leftmousebuttonvirtuallyupmouse

c++ - 为什么在 Windows 上,同一个模块有不同的地址?

我读到在Windows上,可执行文件的模块映射到相同的地址空间。我不明白为什么typedefint(__stdcall*fptr)();intmain(void){HINSTANCEh;fptrf;std::stringstreamoss;h=LoadLibrary("test.dll");if(!h)returnEXIT_FAILURE;f=(fptr)GetProcAddress(h,"function");if(!f)returnEXIT_FAILURE;oss和extern"C"{void__declspec(dllexport)function(){return;}}intm

c++ - 从用户模式 ​​win32 应用程序可靠地找到当前进程的 _write() 函数的地址

我正在编写一个应用程序,可以从系统上的任何用户模式进程捕获stdout/stderr和调试消息,并将其打印到控制台。由于程序的性质,无论是GUI、Windows服务等,我过去一直在编写程序的情况有几种……;看不到控制台输出,仅仅是因为没有控制台。解决此问题的明显方法是将打印语句更改为调试打印语句,例如OutputDebugString(),然后附加调试器并查看输出。有时设置调试器并查看所需的输出可能很棘手,尤其是在内核模式调试中。理想情况下,我正在编写的这个应用程序将允许您指定一个PID(并最终将处理驱动程序,现在不用担心)——并且无需作为调试器附加到该应用程序,它将显示所有输出到调试