草庐IT

c++ - InterlockedDecrement 使用 XADD 但 InterlockedIncrement 使用 INC?

我正在使用boostC++库调试一些代码,该库使用WindowsInterlockedDecrement和InterlockedIncrement。在输出的程序集中,InterlockedIncrement使用LOCKINC而InterlockedDecrement使用LOCKXADD。为什么他们不都使用LOCKXADD?(这是在Win764、64位编译和MSVC11上) 最佳答案 INC指令的编码更短。您可以使用LOCKXADD实现两者,但代码会占用更多内存空间。一旦它们变成uops,它们可能是相同的。现在,为什么不使用LOCKD

c++ - 在 x86 和 x64 体系结构中获取 Windows 序列号 (MachineGuid)

我目前正在使用以下C++代码从Windows注册表中获取MachineGuid,并将该信息用于我的许可算法:std::wstringkey=L"SOFTWARE\\Microsoft\\Cryptography";std::wstringname=L"MachineGuid";HKEYhKey;if(RegOpenKeyEx(HKEY_LOCAL_MACHINE,key.c_str(),0,KEY_READ,&hKey)!=ERROR_SUCCESS)throwstd::runtime_error("Couldnotopenregistrykey");DWORDtype;DWORDcb

windows - 批处理在 C :\Program Files (x86) 中找不到 .exe 文件

这是我正在使用的代码:cd"D:\HigherFolder\FolderX"startexecutable1.execd"C:\ProgramFiles(x86)\FolderY\"startexecutable2.execd"C:\ProgramFiles(x86)\FolderZ\bin\"startexecutable3.exeexit我想一个接一个或同时启动一个.exe,但这不适用于可执行文件2和3;命令提示符说它找不到文件,我需要证明他们的名字是正确的(我做了很多次)。 最佳答案 在命令#2上将其更改为cd/d。(为了安全

windows - OllyDbg 中的地址在程序重新加载时发生变化

这是我的第一篇文章,我是汇编和调试的新手,所以请多多包涵。我试图将一些代码(对MessageBoxA的一点调用)注入(inject)到Windows7记事本可执行文件中。但是,我遇到了地址问题。首先,我在OllyDbg中打开exe,然后找到包含“notepad.pdb”的ASCII文本的行。然后我在下面放了一个ASCII字符串(例如,“INJECTEDNOTEPAD”)。接下来,在其下方,我输入了这个asm代码:​​PUSH0PUSHaddress_of_ASCII_string;Inthiscase,00A6B668CPUSHaddress_of_ASCII_string;Inthi

c++ - 了解 C/C++ 中 Windows/MSVC 的一些反调试内联汇编

我正在尝试了解https://github.com/nemesisqp/al-khaser/blob/0f74c40dde8ba060807e031271f81457a187fa08/DebuggerDetection.cpp#L603中的一些反调试器功能会__asm{moveax,fs:[30h]moval,[eax+2h]movIsDbg,al}功能相同__asmmovIsDbg,[fs:[0x30]+0x2]如果不是,为什么不呢?此外,如何将其转换为纯C/C++?如何获取线程信息(特别是fs:[30h])?会BOOLInt2DCheck(){//TheInt2DCheckfunc

windows - ld MinGW 链接到标准 C 库

我对以下代码有疑问。externprintfglobal_mainmain:pushmsgcallprintfretmsgdb"Helloworld",0我使用nasm-fwin32test.asm将它与NASM组装起来,然后我使用ldtest.obj链接它。它告诉我“test.obj:test.asm:(text+0x6):undefinedreferenceto'printf'”如何将我的文件链接到标准C库?我有来自最新MinGW的ld。 最佳答案 汇编代码:nasm-fwin32test.asmMicrosoft将在使用cde

Windows 10 上的 Android 虚拟设备 - 无尽的 "VCPU shutdown request"- 无法启动

我的x86AVD从不加载。我到处寻找解决方案,但没有找到适合我的解决方案。配置操作系统:Windows10家庭版内存:12GB中央处理器:英特尔酷睿i5-7200CPU支持HAXM要求的VT-x、EM64T和XD位(根据英特尔规范)HAXM版本:6.0.4AndroidStudio版本:2.2简介:InsydeF.21BIOS配置:启用虚拟化技术。步骤1.在AndroidStudio中,启动AndroidVirtualDeviceManager。2.使用所有默认设置创建Nexus5API24AVD。3.启动AVD。结果:AVD窗口显示。没有出现“Android”文本。Android运行

windows - 将 64b 应用程序放入 ProgramFiles(x86) 是个坏主意吗?

我们正在发布应用程序,即32b,因此将其放入ProgramFiles(x86)目录。它有一个x64“插件”,作为一个单独的进程(服务)运行,现在我们将它部署到主应用程序的子目录中。该插件未部署在x86系统上。现在,问题是——这(在x86ProgramFiles中可以执行x64)不是一个坏主意吗?此解决方案是否会对(某事)产生负面影响?谢谢! 最佳答案 它没有负面影响,事实上,VisualStudio也会这样做(它将其64位native编译器安装到(x86)目录中)。只有当它是一个“真正的”64位应用程序时才会出现问题,该应用程序期望

c++ - 假设任何 x86 编译的应用程序总是在 x64 版本下运行是否安全?

是否可以安全地假设任何x86编译的应用总是在编译该应用的同一操作系统的x64版本下运行?/p>据我所知,对于Windows操作系统,答案是"is"。Windowsx86仿真层也是出于同样的目的而构建的。但是,我只想再次确认这里的专家。Unix、Linux呢?有什么注意事项吗? 最佳答案 不,要运行x86代码,它需要在兼容或传统模式下运行。如果操作系统不支持在兼容模式下运行进程,程序很可能无法运行。Linux和IFAIKWindows目前支持兼容模式,看起来还有更多或多或少的支持。我的理解是NETBSD需要一个特殊的模块来支持它,因此

c++ - x64 位 Windows 上的 ExpandEnvironmentStrings( ... ) 正在将 %programfiles% 扩展到 x86 路径

我有一个x86应用程序在x64版本的Windows10上运行。在我的应用中,我使用ExpandEnvironmentStrings(...)来扩展用户给定的值。但当变量为%programfiles%时,它会扩展为C:\ProgramFiles(x86)我是否需要做一些特殊的事情来让x86应用程序正确扩展程序文件变量?注意:当我在资源管理器中直接使用%programfiles%时,它会正确扩展到C:\ProgramFiles。我正在使用VisualStudio2015进行开发。 最佳答案 当32位应用程序扩展环境变量引用%Progra