问题标签 [getprocaddress]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
37234 浏览

c++ - 0xC0000005:访问冲突执行位置 0x00000000

我正在编写一个 MFC 项目,该项目尝试调用 DLL 中的函数,该函数将在字符串中返回一些信息。DLL中的函数如下:

如果成功,该函数将返回 0。信息将在字符串参数中返回。调用例程如下:

此代码在编译和链接时没有错误。执行时会在上述位置返回“访问冲突执行位置0x00000000”的错误。任何人都可以建议吗?

0 投票
2 回答
1953 浏览

c - GetProcAddress 为所有函数返回 0

首先是的,我已经搜索了一段时间,但找不到与我的案例相关的任何答案。基本上,我试图在 Windows DLL (dnsapi.dll) 中获取函数的地址,而 GetProcAddress 返回 0。经过一段时间的挠头后,我什至继续创建一个程序,该程序仅在 user32 中使用 MessageBox 的 GetProcAddress。 dll。结果相同。这是我制作的第二个程序的代码,但仍然无法正常工作:

顺便说一句,GetLastError 返回 127,这似乎是 GetProcAddress 不起作用时返回的最常见错误,但我不知道出了什么问题,我尝试了许多函数和 DLL,而不仅仅是这对。

谢谢。:)

编辑:链接的文章解决了我的问题,我尝试的功能都有unicode和anis版本(w和a)。使用完整的 API 名称解决了这些问题。感谢您链接该问题。

谢谢你。

0 投票
0 回答
1905 浏览

c++-cli - C++/CLI DLL 上的 LoadLibrary 和 GetProcAddress - 加载两次

我有一个带有 C 文件的 .vcxproj,它执行以下操作:

使用 Process Explorer,当我调用 LoadLibrary 时,会加载“tube.dll”。当我调用rtn = (pfn)(pData)上面的行时,它会再次加载“tube.dll”!!

此 dll (tube.dll) 是使用 /clr 编译的混合程序集 (C++/CLI)。是否有可能在 clr 上下文中加载了“tube.dll”的第二个实例?如果是这样,如何防止呢?DLL需要加载一次才能使用GetProcAddress,但调用函数时不需要再次加载!

0 投票
5 回答
5656 浏览

c++ - 在 C++ 中转换 GetProcAddress 返回的指针

GetProcAddress 返回一个函数指针。假设我们得到函数 Beep 的地址(它的声明可以在 WinBase.h 中找到(当包括 Windows.h 时))

那么经典代码可能看起来像

一切看起来都很好并且工作正常。我的问题:

考虑到编译器可以“以某种方式”从 WinBase.h 中包含的 Beep() 声明中获取函数指针“信息”,有什么方法可以避免 typedef 声明。我的目标是以某种方式重新使用已经包含在已包含的 .h 文件中的信息(返回/参数/等),其中声明了 Beep() 函数,而不必在 typedef 上手动重复所有这些信息。为一个函数执行此操作时没关系,但是当函数数量增加时,这些 typedef 确实是一种痛苦和错误的一大来源。可以这样做吗?

编辑; 我很快就会迁移到 VS 2013,但到目前为止仍在使用 VS2008,那么我的想法是不使用 C++11

0 投票
1 回答
813 浏览

c++ - 使用 GetProcAddress() C++ VBexpress 13 找不到函数

好的,所以我在这里危险地接近转发,但我的情况与有关此功能的许多其他海报有点不同。我正在与过去编写的 DLL 进行交互,而我所拥有的只是文件。我没有 .lib 文件,所以我使用的是 LoadLibrary 和 GetProcessAddress 函数。我按照 MSDN 网站上的教程获得了基本结构。DLL 位于项目文件夹中。它编译。在运行时,我得到了“hinstLib”的数值,所以我假设找到了 DLL。我得到“ProcAdd”变量的空值。其他海报通过将 extern C 放入 DLL 函数中解决了问题,但我真的没有这个选项。更不用说,据我所知,这个 DLL 是用纯 C 语言编写的。我确实有一个接口文档,并且很确定我的函数名称是正确的(为了这些目的,用一个通用示例替换)。老实说,我没有通过 ProcAdd 分配运行任何东西,因为它出现了 NULL。任何关于为什么这给我的函数分配值为 0 的想法将不胜感激。注意:很遗憾由于各种原因我无法上传 DLL。

}

0 投票
1 回答
3042 浏览

dll - GetProcAddress 返回 NULL

我正在尝试使用 LoadLibrary 和 GetProcAddress 加载 dll。LoadLibrary 返回一个有效的句柄,但我对 GetProcAddress 的调用返回 NULL。调用 GetLastError 返回 87,即 ERROR_INVALID_PARAMETER。我验证了我传递给 GetProcAddress 的函数名称与dumpbin /exports在 dll 上运行时返回的函数名称相同。不幸的是,这是为了工作,所以我不能包含实际的代码。但这里有一个经过编辑的版本,可以让您了解我在做什么。

我在 SO 和其他论坛上查看了许多相关问题,但通常问题是由于 C++ 名称修改造成的。由于我使用的名称与dumpbin显示的名称相同,因此我认为这不是我的问题。有任何想法吗?

更新

我想我可能已经缩小了这个问题的范围。目标上已有此 dll 的旧版本(这是嵌入式 WinCE 解决方案)。但是我需要使用更新版本的dll,它有一些我需要的额外功能;不幸的是,我无法更新旧的 dll。这个新的 dll 和使用该 dll 的应用程序被打包到一个 cab 文件中,该文件被加载到目标上。我用旧 dll 中的几个函数尝试了 GetProcAddress,并且这些函数有效。因此,似乎即使我使用新 dll 的路径调用 LoadLibrary,它实际上只是在加载目标上已经存在的 dll。谁能确认这会发生什么?

回答上一个问题

当 Windows CE 加载 DLL 时,在确定 DLL 是否已加载时将忽略所有路径信息。这意味着同名但路径不同的 DLL 只能加载一次。此外,以扩展名 .cpl 结尾的模块被视为扩展名是 .dll。

来源:http: //msdn.microsoft.com/en-us/library/ms886736.aspx

0 投票
1 回答
768 浏览

c - 挂钩 GetProcAddress 会导致堆栈损坏吗?

我正在对这个程序进行逆向工程。在开始之前,我想明确说明我合法拥有该程序,并且不打算为了重新分发而“破解”它。

所述程序使用了“书中”的大量反调试技术。我决定挂钩 GetProcAddress 并记录所有 API,然后确定那些可能用于反调试的 API。使用本教程http://www.codeproject.com/Articles/30140/API-Hooking-with-MS-Detours中的代码后,程序最终会因堆栈损坏而崩溃。我用谷歌搜索发现其他人在挂钩 GetProcAddress 时也会出现堆栈损坏https://easyhook.codeplex.com/discussions/55039

我的问题是挂钩 GetProcAddress 是否会导致堆栈损坏或程序的反调试技术检测到干预并导致堆栈损坏本身?

0 投票
1 回答
429 浏览

visual-c++ - 即使名称正确损坏,GetProcAddress 也会失败

我在 .dll 中有以下代码:

这是在 Visual C++ 2010 上编译的,所以我还有一个 .def 文件,其中包含GetOptionID. 我可以看到该函数已导出,并_GetOptionID@4使用 dumpbin /exports 损坏为 :

在一个单独的可执行文件中,我尝试检查是否存在GetOptionID

在调试器中运行这段代码,我可以看到:

  • LoadLibraryEx成功 - 我有一个有效的外观hinst
  • GetProcAddress失败 -lp0x00000000
  • GetLastError返回 127

我可以看到该函数已被导出,并且我可以看到它的名称与我正在寻找的入口点相匹配。怎么会GetProcAddress失败?

0 投票
1 回答
1969 浏览

delphi - Delphi XE6 x64下编译GetProcAddress运行失败

以下 GetProcAddress 代码在 Delphi XE6 x64 下编译时失败。在 Delphi x86 下编译时运行良好。你能帮忙评论做错了什么吗?

0 投票
5 回答
17463 浏览

c++ - GetProcAddress() 失败,错误 127

这是我的 DLL 代码:

这是我的应用程序代码:

因此,我的 LIB.dll 使用 成功加载LoadLibrary(),但GetProcAddress()失败并显示 127。这似乎是因为它没有找到我的函数名称,但我不明白为什么会失败。

非常感谢您的帮助!:) ~P