GetProcAddress 以及所有已加载的库

2024-03-27

With dlopen你可以提供NULL作为库名称并获取一个句柄,使您可以在其中查找符号any加载的库的数量:

如果文件名是 NULL 指针,则返回的句柄是 主程序。当赋予 dlsym() 时,该句柄会导致搜索 主程序中的符号,后面是加载的所有共享库 程序启动,然后由 dlopen() 加载的所有共享库 标志 RTLD_GLOBAL。

你能做同样的事情吗GetProcAddress?我想搜索 Windows API 是否存在,但 Windows 8 中加载了不同的库。

我知道通过查看 COFF 标头加载了哪些库,我想我可以循环遍历那里的句柄......

这是我当前使用的代码:

.hpp

#include <string>
#include <stdexcept>

/**
 * @~english
 * Looks up a Windows API function. Make sure you set @c _WIN32_WINNT so that the definition is available at compile
 * time.
 * @par Example
 * @code
 * # undef _WIN32_WINNT
 * # define _WIN32_WINNT 0x600
 * # include <system/inc/nt/windows.h>
 * static const auto initialize_srw_lock_ptr = FunctionPtrLookup(InitializeSRWLock, "kernel32");
 * @endcode
 * @param function the function definition to lookup
 * @retval nullptr the function did not exist on this version of Windows
 * @returns a function pointer to invoke
 */
#define FunctionPtrLookup(function, library) \
  FunctionLookup<decltype(function)>(#function, library)

/**
 * @~english
 * The return type of FunctionLookup
 */
typedef void(*FunctionLookupPtr)();

/**
 * @~english
 * Looks up a Windows API function. 
 * @param name the name of the function to find in the library
 * @retval nullptr the function did not exist on this version of Windows
 * @returns a function pointer to invoke
 * @see FunctionPtrLookup
 */
FunctionLookupPtr FunctionLookup(const std::string& name, const std::string& library);

/// @copydoc FunctionLookup
template<typename Signature>
const Signature * FunctionLookup(const std::string& name, const std::string& library) {
  return reinterpret_cast<const Signature*>(FunctionLookup(name, library));
}

.cpp

FunctionLookupPtr FunctionLookup(const std::string& name, const std::string& library) {
  const auto wide_library = Utf8ToWide(library);
  const auto lib = LoadLibraryW(wide_library.c_str());
  if (!lib) {
    return nullptr;
  }
  return reinterpret_cast<FunctionLookupPtr>(GetProcAddress(lib, name.c_str()));
}

理想情况下,我想删除library多变的。


您可以使用枚举进程模块 http://msdn.microsoft.com/en-us/library/ms682631%28VS.85%29.aspx要枚举当前进程的所有已加载模块,请使用此处的示例:http://msdn.microsoft.com/en-us/library/ms682621%28v=vs.85%29.aspx http://msdn.microsoft.com/en-us/library/ms682621%28v=vs.85%29.aspx,如果你打电话PrintModules with GetCurrentProcessId(),它将枚举所有 HMODULE 句柄(值位于hMods[i]) 对于当前进程。您可以将它们与 GetProcAddress 一起使用来查找您的函数。

您必须意识到,有可能在不同的 dll 中找到相同名称的函数,大多数情况下您都知道 WinAPI 函数的 dll 名称。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

GetProcAddress 以及所有已加载的库 的相关文章

  • 什么定义了类型的大小?

    ISO C 标准规定 sizeof char lt sizeof short lt sizeof int lt sizeof long 我在 BIT Linux mint 19 1 上使用 GCC 8 大小为long int is 8 我正
  • 无法使用c#更改视频捕获分辨率

    我正在尝试使用 C 中的 DirectShowNet 更改默认网络摄像头分辨率 据我所知 我需要通过调用 windows win32 api dll 中内置的 VideoInfoHeader 类来更改它以进行 avi 捕获 我有来自 Dir
  • Qt/c++ 随机字符串生成[重复]

    这个问题在这里已经有答案了 我正在创建一个应用程序 需要生成多个随机字符串 几乎就像一个由一定长度的 ASCII 字符组成的唯一 ID 这些字符混合有大写 小写 数字字符 有没有 Qt 库可以实现这一点 如果没有 在纯 C 中生成多个随机字
  • 选择initializer_list迭代器定义

    Why std initializer list
  • 如何使用 CUDA/Thrust 对两个数组/向量根据其中一个数组中的值进行排序

    这是一个关于编程的概念问题 总而言之 我有两个数组 向量 我需要对一个数组 向量进行排序 并将更改传播到另一个数组 向量中 这样 如果我对 arrayOne 进行排序 则对于排序中的每个交换 arrayTwo 也会发生同样的情况 现在 我知
  • 如何在 Visual Basic DLL 和 C++ DLL 之间创建隔离/免注册 COM?

    我必须在 C DLL 中使用 VB COM DLL 我弄清楚了如何从 C DLL 访问 VB COM DLL 并且它可以工作 现在我遇到了一个问题 我必须使用隔离的 COM 免注册 COM 因为我无法在必须使用它的每台 PC 上注册 DLL
  • FluentAssertions ShouldNotThrow 无法识别异步方法/Func

    我正在尝试检查异步方法是否抛出具体异常 为此 我使用 MSTEST 和 FluentAssertions 2 0 1 我已经检查过这个关于 Codeplex 的讨论 http fluentassertions codeplex com wo
  • asp.net core http 如果没有内容类型标头,则删除 `FromBody` 忽略

    我在 http 中使用 bodyDELETE要求 我知道目前删除主体是非标准的 但是允许的 使用时出现问题HttpClient它不允许删除请求的正文 我知道我可以使用SendAsync 但我宁愿让我的 API 更加灵活 我希望这个机构是可选
  • 模板与非模板类,跨编译器的不同行为

    我在一些应用程序中使用编译时计数器 它确实很有用 昨天我想用 gcc 编译一个程序 我之前使用的是 msvc 并且计数器的行为在模板类中发生了变化 它在模板类中不再工作 过于简化的代码 Maximum value the counter c
  • 检查两个函数或成员函数指针的签名是否相等

    我编写了一些代码来检查自由函数的签名是否等于成员函数的签名等 它比较提取的返回类型和函数参数 include
  • 查找方法不适用于 EF6.1 模拟

    我已经使用这些 msdn 指南设置了模拟 使用模拟框架进行测试 EF6 及以上 http msdn microsoft com en us data dn314429 var bsAc db BusAcnts FirstOrDefault
  • 本地时间的内存需要释放吗?

    void log time t current time 0 tm ptm localtime current stuf 只是想确定 我是否需要在方法结束时释放 tm 指针分配的内存 不 你不应该释放它 该结构是静态分配的 检查文档 htt
  • 冒号在c中起什么作用?

    我在课堂上得到了这个例子 但我不确定它的作用 我知道冒号添加了一个位字段 但我仍然不确定这个问题 a b gt 0 3 1 运算符称为条件运算符 If b值为 gt 0 价值3被分配给a否则值1被分配给a 以 Kernighan Ritch
  • 在特定线程上运行工作

    我想要一个特定的线程 任务队列并在该单独的线程中处理任务 应用程序将根据用户的使用情况创建任务并将其排队到任务队列中 然后单独的线程处理任务 即使队列为空 保持线程活动并使用它来处理排队任务也至关重要 我尝试过几种实现TaskSchedul
  • 如何释放字符串未使用的容量

    我正在程序中处理很多字符串 这些字符串数据在读入我的程序后的整个生命周期内都不会改变 但由于 C 字符串保留了容量 因此浪费了大量肯定不会被使用的空间 我尝试释放这些空间 但没有成功 以下是我尝试过的简单代码 string temp 123
  • 展开 std::reference_wrapper 的成本

    Given include
  • 如何在控制台程序中获取鼠标位置?

    如何在 Windows 控制台程序中用 C 获取鼠标单击位置 点击时返回鼠标位置的变量 我想用简单的文本命令绘制一个菜单 这样当有人点击时 游戏就会注册它并知道位置 我知道如何做我需要做的一切 除了单击时获取鼠标位置 您需要使用 Conso
  • Asp.Net Core 中的 SSL 不起作用

    我从 Visual Studio 创建了一个简单的 Web 应用程序Web Application Net Core 具有个人用户帐户授权的模板 然后 我启用了 SSLProject gt MyProject Properties 将带有
  • 在 LP2844Z(Zebra 打印机)上的收据中包含 PNG [重复]

    这个问题在这里已经有答案了 我正在致力于创建一个基于 HTML5 画布的签名 绘图框 目前我们在服务器上将画布保存为PNG 但可以轻松地将base64字符串保存在数据库中 现在的问题是我们如何在打印的收据上添加签名 目前我们使用 GF 字段
  • 如何通过API退出Win32应用程序?

    我有一个使用 Win32 API 编写的 C Win32 应用程序 我希望强制它在其中一个函数中退出 有没有类似的东西Exit or Destroy or Abort 类似的东西会终止它吗 哎呀呀呀呀呀呀 不要做任何这些事情 exit 和

随机推荐

  • Ecto.Migrations.references/2 中的 on_delete 选项有什么作用?

    The 埃克托文档 https hexdocs pm ecto sql Ecto Migration html references 2描述了可用的选项references 2 但没有记录这些选项的作用 可用的选项有 nothing del
  • 如何在 JavaScript 中将公历日期更改为波斯日期?

    谁能帮我在 JavaScript 中将公历日期更改为波斯日期 我想在 HTML 和 JavaScript 中使用它 您可以使用toLocaleDateString let today new Date toLocaleDateString
  • DICOM 文件压缩

    我的工作需要使用 DICOM 文件 每个 DICOM 文件由单个目录中的许多 dcm 文件组成 我需要通过网络发送这些文件 由于文件很大 这个过程在某种程度上是这样的 我也是一名程序员 我想知道压缩此类文件的理想方法是什么 我说的是在本地计
  • Ruby - 如果 url 是重定向,如何下载文件?

    如果 url 是重定向 Ruby 如何下载文件 我正在尝试下载这个网址 soundcloud com stereo f cohete amigo download 重定向是这样的 ec media soundcloud com HNIGsu
  • 如何在 templatete js 之后包含组件 js

    我在 templatete index php 上添加了 javascript doc JFactory getDocument doc gt addScript this gt baseurl templates this gt temp
  • 获取终端中可用线路的数量

    如何找到终端中的可用线路数量 最好以跨平台的方式 但欢迎任何建议 甚至特定于操作系统 终端的高度和长度可以使用以下公式找到os https docs python org 3 library os html querying the siz
  • 暂停本地通知

    我正在开发一个警报应用程序 并为此使用本地通知 现在我想为我的闹钟添加贪睡功能 我在Google上搜索发现iPhone不支持此类功能 但还有其他方法可以做到这一点吗 据我所知 当通知窗口弹出时 您无法添加自定义行为 但 你可以这样尝试 用户
  • 我们如何创建一个更大的中心 UITabBar Item

    我想知道我们如何创建一个更大的中心 UITabBar 如下图所示 真的很漂亮 单击要突出显示的特定选项卡栏项目的视图控制器内的选项卡栏按钮 删除文本 只需将标签栏按钮的图像插入顶部设置为 25即可 就像下图一样 在那之后 goto asse
  • Vim 语法文件与 \zs 不匹配

    我试图通过更改 fsharp 语法文件中的这一行 来自this https github com fsharp vim fsharp插件 来自 syn match fsharpModule
  • 如何在Python中打印命令?

    我不从事编程领域 但最近对 Python 感兴趣 我正在编写一些函数 但为了调试 我需要查看正在运行哪些命令 例如 def foo for i in xrange 0 5 a 1 i 是否可以让解释器输出 gt gt gt for i in
  • 在 JQueryUI 选项卡选择上加载 ASP.NET MVC 部分视图

    我一直在寻找最后一天 找不到在过去一两年内提出的关于这个特定主题的任何内容 并且由于 JQuery 似乎相当多地弃用了一些东西 因此就当前的情况提出这个问题似乎是公平的jQuery API 对 JQuery 有点陌生 我想知道这一点 如果我
  • 具有动态宽度的居中固定 div (CSS)

    我有一个 div 具有以下 CSS some kind of popup position fixed top 100px min height 300px width 90 max width 900px 现在 我怎样才能让这个div居中
  • 高阶函数和柯里化函数之间的区别

    我在读一本书 使用 F 进行函数式编程 https rads stackoverflow com amzn click com 1107684064 which 第 33 页 在 部分高阶函数的声明 我们已经看到了高阶内置函数 例如 和 并
  • 跨多个工作表的 VBA 宏

    我正在尝试运行一个在多个工作表上执行功能的宏 假设我已经在工作表 4 上分配了宏按钮 我已经列出了我希望它逐步执行的功能 1 选择工作表 4 中的某些单元格并复制到工作表 4 中的相邻单元格 2 删除工作表 3 中的单元格区域 3 剪切工作
  • 根据语言重定向用户

    我有以下代码
  • 捕获右键单击 AS3

    是否可以在Flash AS3 中捕获右键单击 没有 JQuery JavaScript 当右键单击被捕获时 我需要暂停游戏 所以我不太想禁用上下文菜单 因为我只是想告诉发生了右键单击 我可以添加一个 EventListener 吗 还有其他
  • 具有多个参数的复杂排序?

    我有一个元组列表 li fink 3 flip 3 flock 4 foo 12 foot 20 football 20 futz 10 flip 3 flank 3 flop 3 如何首先按血统编号对列表进行排序 然后按字母顺序降序排序
  • 耙子中止! nil:NilClass 的未定义方法“先决条件”

    剧透 这是一个过时的版本rspec rails gem 在将我的 sqlite3 gem 移动到开发块中 然后运行 rake db migrate 以确保一切仍然有效之后 我在从 Rails 项目目录发出的任何 rake 命令中都遇到了此错
  • 如何使用poco实体生成器

    我用的是VS2010 下载了C POCO 实体生成器 http visualstudiogallery msdn microsoft com en us 23df0450 5677 4926 96cc 173d02752313并安装了它 现
  • GetProcAddress 以及所有已加载的库

    With dlopen你可以提供NULL作为库名称并获取一个句柄 使您可以在其中查找符号any加载的库的数量 如果文件名是 NULL 指针 则返回的句柄是 主程序 当赋予 dlsym 时 该句柄会导致搜索 主程序中的符号 后面是加载的所有共