草庐IT

windows - GetProcAddress 不返回 LoadLibraryA 的真实地址

DWORDdwLoadLibrary=(DWORD)GetProcAddress(GetModuleHandleA("kernel32.dll"),"LoadLibraryA");当我转到OllyDbg中的返回地址时,我可以看到该地址指向跳转到LoadLibraryA的真实地址的代码。我想获得LoadLibraryA的真实地址,它不会改变,因为kernel32.dll在每个进程中的相同位置加载,而且我想知道为什么GetProcAddress不返回真实地址。 最佳答案 您正在获取kernel32.LoadLibraryA的“真实”地址

windows - 如何检测 Delpi 代码是否在 DLL 中运行?

我正在创建一个主要供非Delphi调用者使用的[Windows]DLL。我想使用一些现有的“库”代码,但如果在DLL中执行,有些部分可能不合适或有问题。有没有办法检测代码是否在DLL中运行? 最佳答案 System.IsLibraryIndicateswhetherthemoduleisasharedlibrary.TheIsLibraryvariableisTrueifthemoduleisadynamiclinklibrary(DLL). 关于windows-如何检测Delpi代码是

c++ - 在系统上的何处安装 SDK DLL,以便需要它们的应用程序可以找到它们

我有一个正在开发的SDK,之前的开发人员刚刚在System32中删除了DLL(显然是严重的违规行为:seehere)假设我将它们移出到\ProgramFiles\\SDK(或其他),我如何确保所有需要这些DLL的应用程序都可以访问它们?需要澄清的是,所有访问这些的应用程序都在编译时对DLL进行早期(静态)绑定(bind),因此我无法将完整路径传递给它们或任何东西。他们需要能够在仅给出DLL文件名的情况下找到它。按照同样的思路,包含特定版本的MSVCR80.dll怎么样?他们都依赖于此,但我需要确保他们获得特定版本(我包括的版本)。有什么想法吗? 最佳答案

windows - 什么是 Windows 命令行 EXE 的 "side-by-side configuration",我该如何更正它?

我有一个用C++编写的简单.exe(使用VisualStudio2005构建),它使用提供的API测试一些硬件。它在我构建它的Windows7机器上运行良好,但是当我将它复制到另一台(Windows7)机器并运行它(从命令行)时,我得到:Theapplicationhasfailedtostartbecauseitsside-by-sideconfigurationisincorrect.Pleaseseetheapplicationeventlogorusethecommand-linesxstrace.exetoolformoredetail.什么是“并排配置”?我运行了sxstr

c# - .NET EXE 和 DLL 之间的堆栈/堆差异

这个问题困扰了我很久:.NETEXE和DLL文件都有地址空间。我知道他们都有代码空间和全局变量空间。但我想知道DLL是否有自己的堆和堆栈空间。 最佳答案 进程拥有堆。每个线程都拥有自己的堆栈。当EXE调用DLL中的函数时,使用相同的堆栈,因为函数调用在同一线程中。要说明的另一点是进程具有加载EXE和DLL的地址空间。 关于c#-.NETEXE和DLL之间的堆栈/堆差异,我们在StackOverflow上找到一个类似的问题: https://stackoverf

c++ - DLL 内存管理器混淆

我写了一个应用程序,允许人们贡献插件来扩展功能。这些插件被部署为DLL文件,框架在运行时获取这些文件。每个插件都有一个工厂函数,在应用程序的生命周期中多次调用该函数来创建对象。到目前为止,为了处理这些对象的所有权问题,我对返回的对象使用了一个简单的计数共享指针,以便在删除最后一个引用时销毁它们。但是,这往往会在Windows上触发崩溃,因为在插件DLL中新建对象但稍后(由于对共享指针的deref()调用)在主应用程序中删除的情况并非不可能发生-据我所知,这种malloc/free混合在Windows上是禁忌。我目前的解决方案是让deref()不调用“删除这个;”直接而是一个'relea

c++ - 我的程序找不到boost库

我尝试编写作为Boost测试库示例的代码:#includeBOOST_AUTO_TEST_CASE(test){BOOST_CHECK(true);}我构建了源码,得到了执行文件test.exe。我尝试执行该文件,但收到一条错误消息。Theprogramcan'tstartbecauseboost_unit_test_framework-vc80-mt-1_44.dllismissingfromyourcomputer.Tryreinstallingtheprogramtofixthisproblem.但是,我已经在我的boost库目录中准备好该文件。这个案例有什么问题?背景:对于我的

.net - 非托管到托管(.Net)

是否有可能将非托管DLL转换为托管DLL? 最佳答案 包装类您可以为DLL编写一个包装器类。这些很受欢迎。第三方库提供商通常提供此类包装器.NET程序集来包装他们的DLLAPI(用C++、C等编写)在您的包装类中,只需DllImport库DLL中的所有API函数。然后您可以像使用任何.NET类方法一样使用这些函数。但是,在实践中,您有时必须编写自己的.NET兼容方法来调用那些导入的函数,因为您需要提供参数类型映射和其他检查。还要考虑提供方便的重载方法,因为CLR支持它们,但并非所有非托管库都支持。COM互操作或者,如果该非托管DLL

c# - .dll 中发生类型为 'System.StackOverflowException' 的未处理异常

我正在用C#开发Windows应用程序。在我的应用程序中,我使用了一个静态类。代码如下:publicstaticclassclsNumber{privatestaticobjectvValue;publicstaticobjectValue{get{returnValue;}set{Value=value;}}publicstaticstringHexValue{get{try{returnMicrosoft.VisualBasic.Conversion.Hex(vValue);}catch{returnConvert.ToString(vValue);}}set{Value=Micr

windows - x64 调用另一个 dll 中的函数

有人可以向我解释x64平台上的以下行为吗:如果我从我的可执行文件调用x64中另一个dll中的函数,则反汇编代码如下所示:000000014000149EFF1534CF0000callqwordptr[__imp_CFuncInDll(14000E3D8h)]我意识到调试器计算的是这个绝对地址14000E3C0h的相对地址。然而,与x86代码不同,如果我反汇编地址14000E3D8h,它看起来像垃圾:__imp_CFuncInDll:000000014000E3D81910sbbdwordptr[rax],edx000000014000E3DA25FCFE0700andeax,7FEF