GetProcAddress用法

使用GetProcAddress获取C++重载函数 GetProcAddress函数是用来在动态加载完动态链接库后,从链接库中获取函数地址的。 阅读详情
函数功能描述:GetProcAddress函数检索指定的动态链接库(DLL)中的输出库函数地址。

函数原型:
FARPROC GetProcAddress(
  HMODULE hModule,    // DLL模块句柄
  LPCSTR lpProcName   // 函数名
);

参数:
hModule 
  [in] 包含此函数的DLL模块的句柄。LoadLibrary或者GetModuleHandle函数可以返回此句柄。
lpProcName 
  [in] 包含函数名的以NULL结尾的字符串,或者指定函数的序数值。如果此参数是一个序数值,它必须在一个字的底字节,高字节必须为0。
  
返回值:
  如果函数调用成功,返回值是DLL中的输出函数地址。
  如果函数调用失败,返回值是NULL。得到进一步的错误信息,调用函数GetLastError。

注释:
  GetProcAddress函数被用来检索在DLL中的输出函数地址。 
  lpProcName指针指向的函数名,拼写和大小写必须和DLL源代码中的模块定义文件(.DEF)中输出段(EXPORTS)中指定的相同。Win32 API函数的输出名可能不同于你在代码中调用的这些函数名,这个不同被宏隐含在相关的SDK头文件中。如果想得到更多信息,请参考Win32函数原型(Win32 Function Prototypes)。 
  lpProcName参数能够识别DLL中的函数,通过指定一个与函数相联系的序数值(在.DEF中的EXPORTS段)。GetProcAddress函数验证那个指定的序数值是否在输出的序数1和最高序数值之间(在.DEF中)。函数用这个序数值作为索引从函数表中读函数地址,假如.DEF 文件不连续地定义函数的序数值,如从1到N(N是输出的函数序数值),错误将会发生,GetProcAddress将会返回一个错误的、非空的地址,虽然指定的序数没有对应的函数。
  为了防止函数不存在,函数应该通过名字指定而不是序数值。

要求: 
  Windows NT/2000: 要求Windows NT 3.1 或以后版本。
  Windows 95/98: 要求Windows 95 或以后版本。
  头文件: 在Winbase.h中声明,include Windows.h。
  库文件: Use Kernel32.lib。

参看:
动态链接库纵览(Dynamic-Link Libraries Overview), 动态链接库函数(Dynamic-Link Library Functions),FreeLibrary, GetModuleHandle, LoadLibrary 

示例代码:

  调用KERNEL32.DLL中的RegisterServiceProcess(仅在Windows98中适用)

  HMODULE hModule=GetModuleHandle("kernel32.dll");
  if (hModule)
  {
     typedef DWORD (CALLBACK *LPFNREGISTER)(DWORD,DWORD);
     LPFNREGISTER lpfnRegister;
     lpfnRegister=(LPFNREGISTER)GetProcAddress(hModule,"RegisterServiceProcess");
     if (lpfnRegister)
     {
       (*lpfnRegister)(NULL,1L); 
     }

  }


转于:

http://pegasus827.bokee.com/6550868.html


GetProcAddress()方法返回NULL值的问题 使用动态加载的方式使用动态库。 阅读详情

相关推荐

从碰撞电离到雪崩击穿:Sentaurus仿真中的模型选择与验证艺术

本文深入探讨了Sentaurus TCAD中雪崩击穿模型的选取与验证方法,特别关注平行平面结的仿真实践。通过对比Chynoweth、van Overstraeten等主流模型的适用场景与精度差异,结合具体案例展示了从几何建模到边界条件设定的完整验证流程,并针对非理想因素提供了有效的补偿技术,助力工程师提升器件仿真的准确性与可靠性。

weixin_29074295的博客 592

【DLL】【一文搞懂】(四)GetProcAddress函数

一文搞懂动态库导入,GetProcAddress使用(动态库的显式链接)

此地无银 1万+

电源完整性必看!用SIwave提取PDN阻抗曲线的3个关键设置与常见报错解决

本文深入探讨了在SIwave中进行电源完整性(PI)仿真时,提取PDN阻抗曲线的三个核心设置要点。重点解析了端口阻抗设为0.1欧姆的物理意义与SYZ参数仿真中的阻抗匹配原则,并提供了针对常见收敛性问题和模型误差的实战排查思路,旨在帮助工程师获得更精确可靠的仿真结果,为去耦电容优化提供依据。

b9c0d的博客 352

1.15 自实现GetProcAddress

在正常情况下,要想使用`GetProcAddress`函数,需要首先调用`LoadLibraryA`函数获取到`kernel32.dll`动态链接库的内存地址,接着在调用`GetProcAddress`函数时传入模块基址以及模块中函数名即可动态获取到特定函数的内存地址,但在有时这个函数会被保护起来,导致我们无法直接调用该函数获取到特定函数的内存地址,此时就需要自己编写实现`LoadLibrary`以及`GetProcAddress`函数,该功能的实现需要依赖于`PEB`线程环境块,通过线程环境块可遍历出`k

微软技术分享 1万+

OpenWebUI外部模型配置异常排查与修复指南

本文详细解析了OpenWebUI外部模型配置异常的常见问题及解决方案,包括隐藏字符、数据库锁死等典型现象。通过错误日志分析和数据库修复实战指南,帮助开发者快速定位并解决配置问题,确保OpenWebUI与第三方大模型的稳定连接。

weixin_29205061的博客 311

TwinCAT3与Matlab Simulink集成开发:如何快速生成和调试TcCOM模块

本文详细介绍了如何将TwinCAT3与Matlab Simulink进行深度集成,实现从控制算法模型到实时TcCOM模块的高效开发。通过环境搭建、模型配置、代码生成、系统集成与调试的完整流程,工程师可以快速将Simulink算法部署到倍福实时控制平台,大幅缩短开发周期并提升可靠性。

ik67890123的博客 224

GetProcAddress

GetProcAddress 显式链接到 DLL 的进程调用 GetProcAddress 来获取 DLL 导出函数的地址。使用返回的函数指针调用 DLL 函数。GetProcAddress 将(由 LoadLibrary、AfxLoadLibrary 或 GetModuleHandle 返回的)DLL 模块句柄和要调用的函数名或函数的导出序号用作参数。 ...

weixin_30883777的博客 1049

时序分析-由D触发器结构来理解Tsu、Th

FPGA逻辑单元内的D触发器(D-FF)是一种在时钟的上升沿(或下降沿)将输入信号的变化传送至输出的边沿触发器。 数字电子技术基础-闫石(第五版)边沿D触发器内部结构见下图: 而FPGA原理与结构(日)一书中,内部结构较之上图多了俩反相器: 由传输门和俩个反相器组成一个循环电路(锁存器),再由前后两级锁存器按主从结构链接而成。这里的传输门起开关作用,随着CLK的状态变化切换开关。只看输出的话,前级锁存器的值会随着时钟输入的变化井然有序地传入后级锁存器。为了防止时钟信号变化时输入信号发生冒险,从而使稳定.

XY_Chang的博客 3974

GetProcAddress的用法

GetProcAddress的用法关键词: GetProcAddress                                           /*本程序通过GetProcAddress方法调用Api  int (__stdcall *MsgBox)(HWND ,LPSTR,LPSTR,int);  (FARPROC&)MsgBox=GetProcAddress(hMod,\

tony的专栏 4143

实战指南!基于STM32的智能环境监测系统(代码+硬件设计+云端控制)

本文详细介绍了基于STM32的智能环境监测系统的设计与实现,包括硬件选型、电路设计、软件架构和云端控制。系统通过DHT11温湿度传感器和MQ-2烟雾传感器实时监测环境数据,STM32F103C8T6主控芯片处理数据并通过ESP8266上传至中国移动物联网平台,支持手机APP远程监控。项目成本低、稳定性高,适合智能家居和环境监测应用。

weixin_29194817的博客 433

计算机组成原理(第三版)唐朔飞-第三章系统总线-课后习题

计算机组成原理(第三版)唐朔飞-第三章系统总线-课后习题

weixin_45735391的博客 6万+

GetProcAddress函数用法

显式链接到 DLL 的进程调用 GetProcAddress 来获取 DLL 导出函数的地址。 使用返回的函数指针调用 DLL 函数。 GetProcAddress 将(由 LoadLibrary、AfxLoadLibrary 或 GetModuleHandle 返回的)DLL 模块句柄和要调用的函数名或函数的导出序号用作参数。 由于是通过指针调用 DLL 函数并且没有编译时类型检

super_bert的专栏 2万+

GPU硬件架构与微架构深度解析09-GPU寄存器文件深度解析

本文探讨GPU架构中大规模寄存器堆的设计与高效分配算法。寄存器文件作为GPU关键组件,支持大规模线程并行和快速数据存取。文章分析了多体寄存器堆的设计考量,包括端口数量、冲突避免和功耗管理,并比较了线性扫描、图着色等寄存器分配算法的特点。还介绍了寄存器压缩、动态分区等高级优化技术,以及NVIDIA Ampere架构的实际案例。这些技术对提升GPU计算性能和能效至关重要。

2301_79143213的博客 120

GetProcAddress()用法

函数功能描述: GetProcAddress()函数检索指定的动态链接库(DLL)中的输出库函数地址。 函数原型: FARPROC GetProcAddress(     HMODULE   hModule,    // DLL模块句柄     LPCSTR       lpProcName   // 函数名 ); 参数: hModule    [in] 包含此函数的DL

Wanda && Aidem 2万+

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

【转】 GetProcAddress()用法

【转】 GetProcAddress()用法 https://blog.youkuaiyun.com/aidem_brown/article/details/52102976 posted on 2018-08-08 09:28 时空观察者9号 阅读(...) 评论(...) 编辑 收藏 ...

c1sdn19的专栏 1907

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

C++ 动态加载dll,GetProcAddress用法的一些误解

Date 20200212 By WJB 昨天在写代码时,需要动态加载一个dll动态库,在网上找方法,很快就找到了。代码很简单只有几行,但是尝试了很久才成功,主要是在获取接口时,方法名称这个参数理解错误。 测试过程: 1,首先创建一个动态库。接口如下: extern "C" __declspec(dllexport) int myfunc(int a) { return a; ...

wangjianbo09的博客 3468

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

c++ windows DLL远程注入

这次使用远程线程来进行DLL注入,它提供了最高的灵活性。从根本上说DLL注入要求目标进程中的一个线程使用LoadLibrary来载入我们的DLL。 由于我们不能随意的控制别的线程,因此我们需要在目标进程创建一个新的线程,远程创建线程可以使用 CreateRemoteThread 来进行创建,下面是函数原型。 HANDLE CreateRemoteThread( [in] HANDLE hProcess, [in] LPSECURITY_ATTRIBUTES lpThreadAttr

weixin_42603425的博客 2740

免杀二 内存函数与加密

内存读取函数摘要 Windows API 提供三个关键函数实现动态内存操作: GetModuleHandleA - 获取已加载模块的基址(不增加引用计数) GetProcAddress - 通过模块句柄和函数名获取函数地址 LoadLibraryA - 显式加载DLL到内存(会增加引用计数) 典型工作流程: 使用LoadLibraryA/GetModuleHandleA获取模块句柄 通过GetProcAddress获取目标函数地址 类型转换后调用获取的函数 lazy_importer提供更安全的动态调用方式

一个努力学习网安的小牛马 1274

C# DllImport用法和路径问题

   DllImport是System.Runtime.InteropServices命名空间下的一个属性类,其功能是提供从非托管DLL导出的函数的必要调用信息。    DllImport属性应用于方法,要求最少要提供包含入口点的dll的名称。    DllImport的定义如下: [AttributeUsage(AttributeTargets.Method)]   publicclass D...

weixin_34025051的博客 111

C#_DllImport用法和路径问题

DllImport是System.Runtime.InteropServices命名空间下的一个属性类,其功能是提供从非托管DLL导出的函数的必要调用信息。DllImport属性应用于方法,要求最少要提供包含入口点的dll的名称。DllImport的定义如下: [AttributeUsage(AttributeTargets.Method)]  public class DllImportA...

weixin_33824363的博客 924

使用C#调用系统API实现内存注入

使用c#通过调用windows API函数,可以很轻松的完成非托管WIN32程序的注入、内存读写等操作

1473

libuv 共享库加载 API 实战:uv_dlopen / uv_dlsym 跨平台动态链接指南

libuv 为 Node.js 与众多 C/C++ 项目提供了事件循环与跨平台抽象层,其中内置了一套统一的动态链接库(共享库)加载与符号解析 API。本指南以 [third_party/libuv/docs/src/dll.rst](https://link.gitcode.com/i/d699c7e9ecd37cc35dbef866707e5e11) 为核心,结合仓库内的平台实现源码与测试用例,

gitblog_01159的博客 784

关于c#的dllimport使用方法介绍

DllImport会按照顺序自动去寻找的地方: 1、exe所在目录 2、System32目录 3、环境变量目录所以只需要你把引用的DLL 拷贝到这三个目录下 就可以不用写路径了 或者可以这样server.MapPath(.\bin\*.dll)web中的,同时也是应用程序中的 后来发现用[DllImport(@"C:\OJ\Bin\Judge.dll")]这样指定DLL的绝对路径就可以正常装载。”不过,我发现,调用这种"非托管Dll”相当的慢,可能是因为我的方法需要远程验证吧,但是实在是太慢了。

hdxx2022的博客 469
上一篇: VC编写vista或win7下需要管理员权限运行的程序
下一篇: ld.so.1: test: fatal: libstdc++.so.6: open failed: No such file or directory.
nemo2011
博客等级 码龄16年 179粉丝 206原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值