草庐IT

ASM_FUNC

全部标签

c++ - 从 DLL 导出 ASM 函数 - Visual Studio C++

我已经创建了Dll项目。我创建了具有一个功能的myasm.asm文件:.486.modelflat,stdcall.codeMyProc1procx:DWORD,y:DWORDxoreax,eax//......//retMyProc1endpend这是我的头文件:#pragmaonce#include#ifdefLAB1DLL_EXPORTS#defineLAB1DLL_API__declspec(dllexport)#else#defineLAB1DLL_API__declspec(dllimport)#endifextern"C"{LAB1DLL_APIint_stdcallMy

c++ - 指向 C++ 中内联 __asm block 的指针

所以我一直在VS2010中使用__asmblock,但我没能找到更好的方法来获取指向汇编block开头的指针。我知道如何做到这一点的唯一方法是声明一个void函数。一个问题是void函数在我的程序集block之前和之后都有自己的程序集,我必须通过获取函数的真实地址并添加偏移量来进行补偿。例子:C++voidmyfunc(){__asm{nopnopnopret}}会产生类似这样的装配:pushebpmovebp,espaddesp,8nopnopnopretnmovesp,ebppopebpretnmyfunc()如果执行,很可能会出错。 最佳答案

C++ ASM Inline如何使用boolean?

说我有这样的东西..boolisPatched;我有一些其他GUI,我在其中设置了isPatched=true;和isPatched=false;,isPatched=!isPatched;void__declspec(naked)test(void){//__asm{PUSHADPUSHFDMOVEAX,isPatchedCMPEAX,0jenoPatchedMOVEAX,DWORDPTRDS:[ESI+0x77C]MOVJohn.oldA,EAXMOVEAX,John.AMOVDWORDPTRDS:[ESI+0x77C],EAXJMPfinishnoPatched:PUSHEDXM

c++ - 在 x64 上获取没有 __asm 的 SSE 版本

我正在尝试构建VS2010CRT库的某些函数的略微修改版本,除了它尝试访问可能包含指令集体系结构版本(ISA)的全局变量的部分外,一切都很好:if(__isa_available>__ISA_AVAILABLE_SSE2){//...}elseif(__isa_available==__ISA_AVAILABLE_SSE2){//...}我在程序集文件中找到它应该包含的值__ISA_AVAILABLE_X86equ0__ISA_AVAILABLE_SSE2equ1__ISA_AVAILABLE_SSE42equ2__ISA_AVAILABLE_AVXequ3如何以及在哪里为__isa_

c++ - 使用 Visual C++ 环境和 "Asm"关键字作为 Assembler IDE 的替代方案?

只需阅读一本C++书籍,您就可以通过使用asm关键字从字面上将汇编程序放入C++。这是否意味着,如果有人想使用VisualStudio编写汇编程序,我可以简单地创建一个C++main方法,然后将汇编程序放入其中并将其作为C++程序执行?编译器会简单地运行嵌入汇编程序的C++,就好像它只是一个汇编程序一样?我的问题源于缺乏适合Assembler的合适IDE。 最佳答案 当您使用C++编译器时,它会向您的程序添加不在intmain()中的额外代码。如果你曾经反编译过一个简单的helloworld程序,你会注意到它在intmain()之前

c++ - 警告 : resolving Func by linking to Func@##

我正在构建一个包含以下内容的DLL:extern"C"__declspec(dllexport)void__stdcallDrawMouse(intX,intY,intR,intG,intB){Buffer.SetMouse(X,Y,R,G,B);}然后在.def文件中我添加了:LIBRARYTest;DESCRIPTION"TestDefinitionFile"EXPORTSDrawMouse;然后当我编译时,我添加链接器选项:-static-static-libstdc++-static-libgcc-Wl,--kill-at-d--input-defsrc\Test.def-m3

c++ - 在什么平台上 func(shared_ptr(...), shared_ptr(...)) 真的很危险?

我记得ScottMeyers教我的func(shared_ptr(newP),shared_ptr(newQ));是危险的,因为(如果我没记错的话)内存分配、引用计数(构造)和分配给顺序>函数参数允许leak(理论上?)在极少数情况下出现。为了防止这种情况应该将shared_ptr封装在函数调用中,例如在make_shared()中。func(make_shared(),make_shared());这是一些discussion关于它。我想知道是否有(当前)编译器在该领域,在某些系统上确实可能在某些错误情况下留下一些漏洞?还是那些时代已经过去了,或者它们只是理论上的?最有趣的是知道其中

c++ - asm.js-如何实现函数指针

注意:这个问题纯粹是关于asm.js的,而不是关于C++或任何其他编程语言的。标题已经说过:如何有效地实现函数指针?我在网上找不到任何东西,所以我想在这里问。编辑:我想在正在使用的编译器中实现虚函数。在C++中,我将执行以下操作来生成vtable:#includeclassBase{public:virtualvoiddoSomething()=0;};classDerived:publicBase{public:voiddoSomething(){std::coutdoSomething();return0;}更准确地说;如何在不需要纯JavaScript的情况下在asm.js中生成

c++ - 是否可以在 gcc 3.3+ 中以旧方式使用 __func__? (C++)

对于3.3之前的gcc版本和MS编译器,我使用以下宏:DEBUG_WARNING(...)printf(">WARNING:"__FUNCTION__"()"__VA_ARGS__);使用:DEBUG_WARNING("someFunctionreturned%d",ret);输出:>WARNING:Class::FunctionName()someFunctionreturned-1当我们有很多系统时,它非常方便,所有系统都发送输出。它是一个单行宏,允许我们相应地过滤输出。小代码,大用途,快乐我。由于__FUNCTION__(和C++中的__func__)定义发生了变化(我相信是为了

c++ - 我什么时候需要使用 std::async(std::launch::async, func()) 而不是 func()?

我不明白使用std::async的原因与std::lauch::async标志,而不是简单地调用传递给std::async的函数.是否有任何特价保证? 最佳答案 根据thedocumentation,是一个只接受函数及其参数的重载。您正在使用接受更具体的策略的重载。async(f,args...)等同于async(std::launch::async|std::launch::deferred,f,args...),其中两个标志的存在将函数是否简单地与当前调用堆栈分离(推迟到第一个非定时等待函数的执行;这称为惰性求值),或者实际上是