草庐IT

AppInit_DLL

全部标签

c# - 使用非托管 C++ .dll 从 C# .exe 调用函数

所以,我有一个用C#制作的可执行文件,我没有它的源代码,但我用IDA反汇编了它,它给了我很多面向对象的汇编。我制作了一个.exe文件,将一个.dll注入(inject)到另一个.exe中,并且我将这个新的C++DLL注入(inject)到C#.exe中,没有任何问题,DLLMain被调用,所以...但是当我将这个DLL注入(inject)到一个用C++制作的普通.exe文件中时,我可以使用它的内存地址调用.exe中的一个函数,我可以在IDA上使用它。问题是,面向对象的程序集在其函数上没有地址,即使函数名称被反汇编也是如此。那么,有什么方法可以用我在C#.exe文件上注入(inject)

c++ - 在运行时加载的 dll/so 中 atexit() 的行为是什么?

如果我在运行时加载一个dll/so文件(即使用LoadLibrary()或dlopen()),C++atexit的行为是什么()函数?如果我在应用程序退出之前卸载库,它会被调用吗?我可以期望在所有平台上都有相同的行为吗?(具体来说,windows和类unix系统) 最佳答案 在Windows下:当您调用FreeLibrary时,每个dll都会执行atexit函数链。重要的是要注意dll以未指定的顺序卸载,因此不要添加依赖于其他dll全局变量的atexit处理程序。这是更多信息链接:http://msdn.microsoft.com/

c++ - 使用 Windows .dll 中的 SWIG 包装函数

我在使用通过SWIG接口(interface)导出的.dll共享库中的函数时遇到问题。VersionInfoPython:2.6.4Swig:2.0.4大图是:我有一些代码在Linux下使用C++开发并使用SWIG包装。我在Linux下将C++源代码编译成.so对象,并在Python中使用.so库。现在,我需要将所有这些功能迁移到Windows,Windows中.so的等价物是.dll。因此,我打算将所有的C++源代码编译成一个.dll并通过Python访问它们。所以正常的过程是:拥有C++源代码->使用SWIG包装它们->编译成.dll->通过Python访问。有一个巨大的.cxx源

c++ - LabVIEW、C++ DLL 和 IMAQ 图像

我熟悉编写可从LabVIEW调用的DLL,但我很好奇将IMAQ图像传递到DLL的正确方法是什么。这是我发现的一种方法——我也使用类似的机制将IMAQImage实例从我的DLL发布到事件结构。请注意,将图像实例与集群相互转换的节点位于${LABVIEW_INSTALL_DIR}/vi.lib/vision/DatatypeConversion.llb,并命名为IMAQImageDatatypetoImageCluster.vi和IMAQImageClustertoImageDatatype.vi,分别。创建的簇由图像名称和一个整数值组成,该整数值表示指向C/C++中的Image*类型的指

c++ - 使用 Code Cave 注入(inject) 64 位 DLL

我正在尝试将64位DLL注入(inject)64位进程(该问题的探索者)。我已经尝试使用Remote-thread\WindowHooks技术,但一些反病毒软件将我的加载程序检测为误报。看完这篇文章:DllInjectionbyDarawk,我决定使用代码洞穴。它适用于32位,但由于VS不支持64位的内联汇编,我不得不明确地编写操作码和操作数。我看了这篇文章:64Bitinjectionusingcodecave,如文章所述,存在一些差异:Thereareseveraldifferencesthathadtobeincorporatedhere:MASM64usesfastcall,s

c# - 处理从 c++ dll 返回到 C# 的数组

我在用C++创建的dll中有这个extern"C"__declspec(dllexport)char*__stdcallhh(){chara[2];a[0]='a';a[1]='b';return(a);}这就是我尝试在C#中处理代码的方式[DllImport(@"mydll.dll",CharSet=CharSet.Ansi,CallingConvention=CallingConvention.StdCall)]publicstaticexternIntPtrhh();staticvoidMain(string[]args){IntPtra=hh();//Howtoproceedh

c++ - dll 在 Debug模式下,在 Release模式下调用程序(反之亦然)

我正在编写一个小的C++程序来测试Cdll,其中包含一些函数。这些dll存在于调试版本和发布版本中,我想用同一个程序加载它们并将它们与以前的版本进行比较。问题是,当我用releaseconfig编译我的程序时,它只能使用同样是release的dll,而当我使用debugconfig编译程序时,它只能使用同样是debug的dll。我使用LoadLibrary和GetProcAddress函数加载dll/函数。有两种类型的函数:voidtype1(int&)和voidtype2(vector*).无论配置如何,类型1都可以正常工作。但类型2只有在配置匹配时才有效。代码:typedefvoi

c++ - 跨 DLL 边界使用单例

这个问题在这里已经有了答案:C++asingletonclasswithdll(3个答案)关闭3年前。我有一个遗留项目,它有一个像这样的单例类:classSingleton{public:staticSingleton&Instance(){staticSingletoninst;returninst;}voidfoo();};该项目使用了一个DLL,它需要使用相同的类(部分源代码在托管应用程序和DLL之间共享,因此DLL可以访问Singleton)。但是,Instance(自然地)为DLL返回一个不同的实例,为宿主应用程序返回一个不同的实例。这显然会导致问题。有没有办法在DLL和宿主

c++ - 添加 Boost 使调试构建依赖于 "non-D"MSVC 运行时 DLL

我有一个烦人的问题,我可能能够以某种方式规避它,但另一方面,我更愿意了解它并了解到底发生了什么,因为看起来这些东西真的会留下来。故事是这样的:我有一个简单的OpenGL应用程序,它运行良好:在编译、链接或运行它时从来都不是主要问题。现在我决定尝试将一些更密集的计算移到工作线程中,以便可能使GUI响应更快——当然是使用Boost.Thread。简而言之,如果我在.cpp文件的开头添加以下片段:#includevoiddummyThreadFun(){while(1);}boost::threadp(dummyThreadFun);,然后我在尝试启动调试版本时开始收到“此应用程序无法启动,

c# - 为混合平台(32、64)编译并引用在运行时解析的 32 或 64 位 DLL

在32位或64位Windows下使用VS2010。我们的C#应用程序调用与非托管DLL接口(interface)的第3方DLL(托管)。第3方DLLAPI在32位或64位中看起来相同,尽管在其下方链接到32位或64位非托管DLL。我们希望我们的C#应用程序在32位或64位操作系统上运行,理想情况下它将自动检测操作系统并加载适当的第32方DLL-通过一个测试环境的简单工厂类。因此,最简洁的解决方案是包含以下内容的运行时文件夹:OurApp.exe3rdParty32.DLL3rdPartyUnmanaged32.DLL3rdParty64.DLL3rdPartyUnmanaged64.D