美文网首页windows
获取基础基地址的思路

获取基础基地址的思路

作者: fcc_load | 来源:发表于2017-09-05 10:22 被阅读0次

在虚拟内存的管理中还是存在很多可用的技巧,前段时间遇到了一种情况,怎么快速获取本身dll的基地址(前提是内存加载并且DllMain不会被调用),还是同事给了份代码,才发现还有这种玩法。
  如果进行过windows下的调试会发现,我们的dll是一个完整的内存块,也就是说我们dll的基地址实际上是在这块虚拟内存的首地址,那么也就是说我们通过VirtualQuery函数查找当前代码所在虚拟内存块的起始地址,进而获得当前模块的基地址。

HRESULT VirtualQuery (
    [in]  void*    lpAddress,
    [out] void*    lpBuffer,
    [in]  SIZE_T   dwLength,
    [out] SIZE_T*  pResult
);

lpAddress
  [in]指向要查询的虚拟内存中的地址的指针。
lpBuffer
  [out]指向包含有关指定的内存区域的信息的结构的指针。
dwLength
  [in]以字节为单位的缓冲区的大小, lpBuffer 指向。
pResult
  [out]指向返回的信息缓冲区的字节数的指针。

参数lpBuffer实际上是一个结构

typedef struct _MEMORY_BASIC_INFORMATION {
    PVOID BaseAddress;
    PVOID AllocationBase;    \\基地址
    DWORD AllocationProtect;
    SIZE_T RegionSize;
    DWORD State;
    DWORD Protect;
    DWORD Type;
} MEMORY_BASIC_INFORMATION, *PMEMORY_BASIC_INFORMATION;

代码

//获取模块基地址
HMODULE GetSelfModuleHandle()
{
    MEMORY_BASIC_INFORMATION mbi;
    return ((::VirtualQuery(GetSelfModuleHandle, &mbi, sizeof(mbi)) != 0) ? (HMODULE)mbi.AllocationBase : NULL);
}

相关文章

  • 获取基础基地址的思路

    在虚拟内存的管理中还是存在很多可用的技巧,前段时间遇到了一种情况,怎么快速获取本身dll的基地址(前提是内存加载并...

  • 除了获取 MAC 地址还能干啥

    Web 页面获取 MAC 地址的设计思路 Web 页面获取 MAC 地址的设计思路是比较简单的,只需要在本地模拟一...

  • 04_1_获取网络图片

    01_效果 通过网络图片的地址获取该图片 02_思路 ① 从网络上右键获取网络的地址http://...... =...

  • HTML5语言实现的视频播放器

    思路:调用javascript的获取文件存储地址方法、获取播放时长,开始播放,暂停等方法。

  • Java获取当前电脑公网IP地址

    思路:利用 IP地址查询的网站 获取当前电脑的公网IP地址 获取公网IP的几个方法(提供多个,实现错误重试) 综合...

  • 客户端开发时的地址准确度小议

    之前做了几个小项目,这几个项目都用到了地址,我为了获取更加准确的地址尝试了各种办法。 我对获取地址的基本思路是:通...

  • IP地址基础

    # IP地址基础 版本 v20190410 ## 1 什么是IP地址 ### 1.1 维基说法 互联网协议地址(英...

  • Android,一个思路实现APP版本更新

    框架集成地址Android,可以不再拷代码了吗? 思路描述: 1,获取当前APP版本信息 VersionModel...

  • 小程序内嵌H5公众号授权

    思路:小程序登录获取到openId后通过微信的回调地址传参、再走微信公众号的通过code获取openId授权。 获...

  • python 获取IP地址

    思路是先获取网关,再拿到对应的IP信息,这样可以在没有公网是也能拿到地址:

网友评论

    本文标题:获取基础基地址的思路

    本文链接:https://www.haomeiwen.com/subject/uicujxtx.html