利用DbgHelp获取导出函数信息

2023-05-16

#include "stdafx.h"
#include <Windows.h>
#include <imagehlp.h>
#include <locale.h>
#pragma comment(lib,"DbgHelp.lib")

BOOL CALLBACK CallBackProc( PSYMBOL_INFO pSymInfo, ULONG SymbolSize, PVOID UserContext )
{
    printf( "函数名: %s\r\n地址: %08X \r\n\r\n", pSymInfo->Name, pSymInfo->Address );
    return TRUE;
}

char* UnicodeToAnsi( const wchar_t* szStr, char* szDest )
{
    int nLen = WideCharToMultiByte( CP_ACP, 0, szStr, -1, NULL, 0, NULL, NULL );
    if ( nLen == 0 )
    {
        return NULL;
    }
    char* pResult = new char[nLen];
    WideCharToMultiByte( CP_ACP, 0, szStr, -1, pResult, nLen, NULL, NULL );
    strcpy( szDest, pResult );
    delete pResult;
    return szDest;
}

BOOL GetSymbol( LPCTSTR FileName )
{
    HANDLE hProcess = OpenProcess( PROCESS_ALL_ACCESS, FALSE, GetCurrentProcessId() );
    CloseHandle( hProcess );
    
    if ( !SymInitialize( hProcess, NULL, FALSE ) )
    {
        return FALSE;
    }
    
    DWORD dwOpt = SymGetOptions();
    SymSetOptions( dwOpt | SYMOPT_DEFERRED_LOADS | SYMOPT_UNDNAME | SYMOPT_CASE_INSENSITIVE );
    
    char sFileName[MAX_PATH] = {0};
    UnicodeToAnsi( FileName, sFileName );
    DWORD64 dwSymModule = SymLoadModuleEx( hProcess, NULL, sFileName, NULL, 0, 0, NULL, 0 );
    
    if ( 0 == dwSymModule )
    {
        SymCleanup( hProcess );
        return -1;
    }
    
    if ( !SymEnumSymbols( hProcess, dwSymModule, 0, ( PSYM_ENUMERATESYMBOLS_CALLBACK )CallBackProc, NULL ) )
    {
        SymCleanup( hProcess );
        return -1;
    }
    
    return SymCleanup( hProcess );
}

int _tmain( int argc, _TCHAR* argv[] )
{
    const TCHAR* sDllPath = _T( "C:\\Windows\\System32\\WS2_32.DLL" );
    if ( !GetSymbol( sDllPath ) )
    {
        return -1;
    }
    getchar();
    return 0;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

利用DbgHelp获取导出函数信息 的相关文章

  • Android 利用V4L2 调用camera

    为何要使用V4L2进行开发 出于安全原因 xff0c 使用Android 原生的Camera接口 xff0c 必须要使用可见的surface显示摄像头的preview图像 xff0c 即必须要让用户看到你的应用正在使用摄像头 另外Andro
  • MySql 8.0 设置允许远程登录授权

    MySQL 连接出现 is not allowed to connect to this MySQL Server错误提示 打开 MySQL8 0 Command Line Client 1 打开远程连接 mysql span class
  • 基于Jeecg的权限获取

    Jeecg的权限 xff0c 是通过菜单管理中的 按钮 权限 实现的 xff0c 前端和后端怎么获取这个权限呢 xff0c 本文简单做个记录 1 前端 import USER AUTH from 34 64 store mutation t
  • 基于Jeecg使用vue-konva

    konva是一个基于canvas的可视化框架 xff08 https konvajs org xff09 xff0c vue konva则是基于vue的 当前的一个小项目是基于Jeecg开发的 xff0c 想做可视化的功能 xff0c 于是
  • 基于JeecgBoot的v-has权限控制

    v has是一个很方便的前端权限控制标签 xff0c 但是只支持一个授权标识 xff0c 如果需要两个或以上的权限与或运算就不支持了 解决方案 xff1a 修改文件 64 utils hasPermission js 中的方法filterG
  • 前后端离线开发相关软件下载地址大全

    一 后端开发 xff1a 1 IDEA Windows xff1a https www jetbrains com zh cn idea download section 61 windows 2 JDK Windows xff1a htt
  • 离线部署GitLab

    一 背景 公司是局域网开发环境 xff0c 资源文件用svn管理 xff0c 代码用git管理 GitLab有点大 xff0c 而且只能在Linux下使用 xff0c 所以选择了轻巧的GitBlit 后来GitBlit被暴漏洞 xff0c
  • C# WPF实战项目升级了

    概述 之前用Caliburn Micro搭建的WPF实战项目 xff0c CM框架选用了 3 0 3 xff0c 实际上CM框架目前最新版已经到4 0 173了 xff0c 所有很有必须升级一下项目了 本来打算把平台框架也直接升级到 NET
  • 接入Swagger2(1) —— SwaggerUI

    关于Swagger不再多述 xff0c 这里只分享接入方式 1 接入 SpringBoot中引入Swagger相当简单 xff0c 只需要添加一个依赖就行 xff0c 如下 xff1a lt dependency gt lt groupId
  • 接入Swagger2(2) —— knife4j

    上一篇文章介绍了Swagger2默认UI的接入方式 xff0c 但是UI实在太丑 xff0c 而且布局也很难用 xff0c 这里介绍一个相对漂亮点的UI knife4j knife4j是基于swagger2开发的 xff0c 是swagge
  • SpringSecurity的使用(1)—— 起步

    年初就关注到SpringSecurity了 xff0c 看官网 xff0c 看不懂 xff1b 查资料 xff0c 跟我预想的不一样 xff0c 所以一直入不了门 有博文说添加依赖 xff0c 再次启动项目就会跳转到登录页面 我是前后端分离
  • 离线模式:Unresolved dependency: ‘com.xx.xx:xx-xx:jar:x.x.x‘

    SpringBoot最常用的编译器就是IDEA xff0c 如果不能联网 xff0c 则需要将工程设置为离线模式 1 遇到的问题 这两天遇到了这样的问题 xff1a JeecgBoot的工程中有添加依赖包 knifej spring boo

随机推荐

  • SpringBoot中Java调用dll

    1 背景 最近接手的项目 xff0c 底层算法是C 43 43 写的 xff0c 并且封装成了dll 而目前的需求 xff0c 需要把这些算法移到服务端执行 不可能把C 43 43 写的算法库改用Java重写一遍 xff0c 而且也基于执行
  • 接入Shiro(1)——极简登录认证

    Shiro是一个强大易用的Java安全框架 xff0c 提供了认证 授权 加密和会话管理等功能 之前的开发都是在低代码上直接使用Shiro xff0c 一般也不需要修改 在SpringBoot的基础上 xff0c 只接入Shiro的登录认证
  • 接入Shiro(2)——基于JWT的登录认证

    前文讲到基于Shiro的登录认证 xff0c 只是对前端传来的token长度做了判断 xff0c 并没有与用户关联 本文将分享用户登录 Token创建 Token验证三个关键环节的用法 xff0c 其中用户登录只对用户名和密码做简单的比对
  • VS2017离线安装

    因开发环境限制 xff0c 不联外网开发是一种很常见的情况 xff0c 但官方似乎不提供vs2017离线安装包 几经周折 xff0c 终于找到了解决办法 1 vs2017下载地址 Visual Stduio 旧版本下载地址 Visual S
  • Invalid or corrupt jarfile xxx.jar

    一 遇到的问题 Artifacts打包的特点是 xff0c 目录下会生成一大堆jar包 xff0c 各个依赖包都是独立存在的 xff0c 更新时只替换开发包即可 之前一直用Artifacts打的包 xff0c 会生成MANIFEST MF文
  • GitLab的备份与还原

    一 现状 前段时间在麒麟系统上部署了GitLab xff0c 后来发现太占资源 xff0c 于是准备在Ubuntu Desktop版本上部署GitLab Ubuntu Desktop出预装了浏览器 xff0c 感觉不会比麒麟轻太多 之前安装
  • 如何使用Sublime的插件(以HexViewer为例)

    1 打开Package Control功能 xff1a 在sublime任意界面按下ctrl 43 xff08 注意是键盘左上角的 xff09 xff0c 会在界面最下方弹出一个编辑框 xff0c 输入如下内容 xff08 注意区分Subl
  • Java和Qt如何实现multipartfile表单的请求

    一 背景 做项目经常需要跟其他单位 公司对接 xff0c 由于成本等方面的考虑 xff0c 不可能多家单位一直坐在一起开发 一般的解决办法是 xff0c 自己的B端 C端先与自己的服务端对接 xff0c 基本功能开发完成 xff0c 再将自
  • 树的排布、展开与折叠算法

    一 背景 原项目是纯C端程序 xff0c 未来要移植成BS架构 其中一个功能是界面上展示树 xff0c 基本要求是 xff1a xff08 1 xff09 按层次展示树各个结点 xff08 2 xff09 根结点以及各个子树结点可以点击 x
  • 常用git命令

    一 背景 做Qt开发一直在Windows平台上 xff0c 客户要求移植到麒麟系统 Windows和麒麟共用一套代码 xff0c 所以麒麟系统上的代码也需要与Git服务器同步 好用的Sourcetree没有Linux版本 xff0c 无奈只
  • 用Qt实现文件转码

    一 背景 用VS做Qt开发 xff0c 源码文件默认是GBK编码 但做跨平台 xff0c 同样的源码复制到麒麟的QtCreator xff0c 必须手动选择GB2312编码才能修改代码 另外 xff0c Windows的Sourcetree
  • 我的程序员之路(20)——2022年年度总结

    在现在的公司工作一年半了 过去的一年收获很多 xff0c 与以往最大的区别是肩上压了一个项目 尽管我只负责技术方面的工作 xff0c 但是要协调各方面 xff0c 也是件很麻烦的事 尤其是跟用户方的接触 xff0c 是极大的提升了业务知识
  • C++中回调函数的一个简单例子?

    回调函数应用实例 xff1a 1 定义一个Person类 xff08 Person h xff09 文件 xff1a 注意 xff1a 在这个类中指定了回调函数 xff0c 回调函数的执行者 xff0c 和回调函数指针 重要的是 回调函数
  • Docker容器的端口映射

    在Docker容器的日常使用中 xff0c 有以下5种常见的端口映射方式 1 对容器暴露的所有端口 xff0c 随机映射宿主机端口 P xff0c publish all 61 true false xff0c 默认为false span
  • wsl不动了,wsl2不动了。不响应

    原来是用vim编辑时 xff0c 习惯了 xff0c 按了ctrl 43 s的原因 Ctrl 43 s 在终端下是有特殊用途的 xff0c 那就是暂停该终端 xff0c Ctrl 43 q 退出这种状态 xff0c 让终端继续运行
  • Ubuntu Server 20.04最小部署openstack Wallaby(四)——Nova

    Compute服务与其他OpenStack服务协作 xff0c 协调各种工作 xff0c 是OpenStack的核心服务 xff0c 这里需要操作Controller和Compute两个节点 1 Controller节点配置 创建数据库 注
  • debian8 安装&配置 zsh

    请访问我的个人博客 sourcod 安装zshsudo apt get install zsh安装oh my zsh sh c 34 curl fsSL https raw githubusercontent com robbyrussel
  • Conda错误:Collecting package metadata (current_repodata.json): failed

    conda新安装设置清华源后发现并没有使用 xff0c 且会出现错误 Collecting package metadata current repodata json failed 换了科大源也没成功 xff0c 考虑可能是默认源的问题
  • OpenCascade与三角剖分 笔记

    笔记 摘自 http www cppblog com eryar archive 2013 05 26 200605 html 概述 三角剖分是平面剖分中的一个重要课题 xff0c 在数字图像处理 计算机三维曲面造型 有限元计算 逆向工程等
  • 利用DbgHelp获取导出函数信息

    include 34 stdafx h 34 include lt Windows h gt include lt imagehlp h gt include lt locale h gt pragma comment lib 34 Dbg