草庐IT

c++ - 在 Windows DLL 中通过它的签名查找函数

已在DLL中找到一个函数地址。没有这个DLL的源代码,不是我的。这个DLL还真的不是经常改的,但是一改了,我反汇编找就成问题了。在网上看到一些关于给它签名的笔记,然后通过这个保存的签名找到它。能否就如何实现这一点提供一些想法或工作示例? 最佳答案 你可以通过代码签名扫描来实现,这是我过去做过的事情。该概念主要基于这样一个事实,即函数在更新之间通常不会发生太大变化,而只是简单地重新定位,因为它们被扩展或收缩的其他函数向前或向后推。我们以MessageBoxA为例,他的反汇编对我来说是这样的:765DEA11>8BFFMOVEDI,ED

c++ - dll 的 new 和 delete 运算符重载

如何为dll重载new和delete运算符。我已经将重载运算符作为dll的一部分编写,但是与此dll链接的客户端不使用overloadednewanddelete 最佳答案 这是C++标准在第17.6.4.6/3节中对此的说明:Theprogram'sdefinitions(ofthenew/deleteoperators)areusedinsteadofthedefaultversionssuppliedbytheimplementation.Suchreplacementoccurspriortoprogramstartup.T

c++ - 查看 C++ DLL 的成员

我有一个1998年编写的C++DLL,我想查看成员(属性、字段、方法、构造函数等)。我的理解是写这个DLL的公司已经不在了,但是还在用。如果我只有DLL,这可能吗?或者您是否只需要知道DLL中的内容才能使用它。如果可能的话,我会怎么做?我希望通过P/Invoke使用来自.Net的DLL。 最佳答案 得到这个:http://www.dependencywalker.com/,使用depends.exe打开DLL,然后激活“查看”菜单中的“UndecorateC++Functions”。我主要用它来查找依赖项,但它也暴露了DLL的入口点

c++ - 加载WinRT组件而不引用DLL/程序集

我一直在尝试使用C#,C++/CX和C++中的WRL来测试WinRT组件。到目前为止,即使与COM相比,我还是做了所有尝试的事情,但有些东西已经改变并且令人困惑或沮丧。我正在尝试的最后一件事是到目前为止,我无法做的是COM的基本体系结构模式。我只想创建WRL组件的实例,而不在使用该组件的项目中引用DLL。据我所知,这是COM的基本行为,提供COM的CoClass的GUID,使用程序仅了解接口(interface),并且CoCreateInstance将动态加载COM并创建连接到您请求的接口(interface)的实例。我找不到使用WRL的方法。我定义了一些简单的接口(interface

c++ - 使用主可执行文件中定义的函数的 .dll 插件

我有一个加载.dll/.so插件的Main可执行文件,它在Linux中工作得很好,但在Windows(VisualStudio2012)上,它因未定义而失败引用错误。该插件使用诸如session->SendLine("bla")之类的函数,这些函数在Main可执行文件中定义。(插件中包含的.h中定义的sessionans方法类,但在mainexec中编译的.cpp中的实际函数)。tl;dr:“我需要Windows链接器忽略插件中undefinedreference,这些引用在主可执行文件中定义”什么是在Windows中“使其工作”的最佳方式,但又能在没有百万#ifdef的情况下保持它与

c++ - 将可变大小数组传递给 DLL 的选项有哪些?

我想知道如果我想将大小在运行时确定的数组传递给DLL函数,我有哪些选项。目前我在DLL中的函数签名看起来像#ifdefBUILDING_DLL#defineDBUILDING__declspec(dllexport)#else#defineDBUILDING__declspec(dllimport)#endifvoid__cdeclDBUILDINGmyFunc(constdoublet,constdoublex[],double*xdot);所以我传递的是在某个类中动态分配的普通旧数据类型,然后必须手动删除这些数据类型。我宁愿不必调用delete也不必担心内存管理,所以我想看看其他选

c++ - 在 DLL 构建期间包含特定文件时 LoadLibrary 失败

我的C++应用程序的一个DLL中出现了非常奇怪的行为。在我在DLL的主文件中使用#include包含单个文件之前,它可以正常工作并加载。然后我收到此错误消息:从D:/Targets/bin/MatrixWorkset.dll加载组件无法加载“D:/Targets/bin/MatrixWorkset.dll”:无法加载库MatrixWorkset:对内存位置的访问无效。现在我已经通过代码和谷歌搜索和搜索,但我无法弄清楚发生了什么。到目前为止,一切都在一个DLL中,我决定将它分成两个较小的DLL。导致问题的文件是另一个第二个库的一部分(加载正常)。任何想法都将不胜感激。谢谢,雅各

c++ - Matlab 和 C 风格的 dll

我在使用Matlab时遇到了一个非常烦人的问题。我有一个自定义C风格的DLL来与我们的硬件对话。它在我的PC上运行良好,在我同事的PC上运行良好。在第三台PC上无法加载:在365使用==>loadlibrary时出错无法预处理输入文件。预处理器的输出是:“cl”未被识别为内部或外部命令,可运行的程序或批处理文件。显然它找不到编译器。然而运行!mex-setup得到我的插入位来选择机器上唯一的编译器(VS2008)并检查!setvs显示路径正确。尝试直接添加路径似乎也无济于事。因为我对Matlab知之甚少,大量浏览matlab论坛和尝试建议都无济于事。有人有任何线索吗?

c# - .NET Core 2 DLL 引用与 C++ 代码运行时错误

小介绍:我正在开发一个.NETCORE2项目,我需要可用于C#的第三方API,但当我检查(dotPeek)那个.dll时,我发现他们使用C++来实现某些功能。环境:VS2017Community,.NETCORE2x86,IISExpress问题:当我添加引用并构建项目时,除了引用处的警告(黄色感叹号)但没有解释外,我没有收到任何错误。当我向使用上述.dll中的类的REST端点发出请求时,我得到了。请注意,其他一切正常。System.TypeInitializationException:Thetypeinitializerfor''threwanexception.--->.Modu

c# - 在 Visual Studio C++ 中使用 DLL

我有一个DLL,我一直在VisualC#中使用它没有问题(只需添加引用并使用命名空间)。现在我正在尝试学习C++,但我不明白你如何从DLL中引用命名空间。我可以右键单击一个项目并选择“引用”,然后从那里单击“添加新引用”,但这只会为我提供一个空的“项目”窗口。我错过了什么? 最佳答案 在处理DLL引用方面,C++与C#/VB.Net很多不同。在C#中,执行引用所需的全部是DLL,因为它包含描述内部结构的元数据。编译器可以读取此信息,以便它们可以从另一个项目中使用。C++在DLL中没有C#中元数据的概念。相反,您必须以头文件的形式明确