//==============================================================================
// 注释  Delphi2010 Dll 函数列表查看
//==============================================================================
unit UntGetDLLFileExports;

interface

uses
  Windows, Classes, ImageHlp;

function GetDLLFileExports(szFileName: PChar; mStrings: TStrings): Boolean;

implementation

function GetDLLFileExports(szFileName: PChar; mStrings: TStrings): Boolean;
var
  hFile: THANDLE;
  hFileMapping: THANDLE;
  lpFileBase: Pointer;
  pImg_DOS_Header: PImageDosHeader;
  pImg_NT_Header: PImageNtHeaders;
  pImg_Export_Dir: PImageExportDirectory;
  ppdwNames: ^PDWORD;
  szFunc: PAnsiChar;
  i: Integer;
begin
  Result := False;
  if not Assigned(mStrings) then
    Exit;
  hFile := CreateFile(szFileName, GENERIC_READ, FILE_SHARE_READ, nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
  if (hFile = INVALID_HANDLE_VALUE) then
    Exit;
  hFileMapping := CreateFileMapping(hFile, nil, PAGE_READONLY, 0, 0, nil);
  if hFileMapping = 0 then
  begin
    CloseHandle(hFile);
    Exit;
  end;
  lpFileBase := MapViewOfFile(hFileMapping, FILE_MAP_READ, 0, 0, 0);
  if lpFileBase = nil then
  begin
    CloseHandle(hFileMapping);
    CloseHandle(hFile);
    Exit;
  end;
  pImg_DOS_Header := PImageDosHeader(lpFileBase);
  pImg_NT_Header := PImageNtHeaders(Integer(pImg_DOS_Header) + Integer(pImg_DOS_Header._lfanew));
  if IsBadReadPtr(pImg_NT_Header, SizeOf(IMAGE_NT_HEADERS)) or (pImg_NT_Header.Signature <> IMAGE_NT_SIGNATURE) then
  begin
    UnmapViewOfFile(lpFileBase);
    CloseHandle(hFileMapping);
    CloseHandle(hFile);
    Exit;
  end;
  pImg_Export_Dir := PImageExportDirectory(pImg_NT_Header.OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_EXPORT].VirtualAddress);
  if not Assigned(pImg_Export_Dir) then
  begin
    UnmapViewOfFile(lpFileBase);
    CloseHandle(hFileMapping);
    CloseHandle(hFile);
    Exit;
  end;
// 63 63 72 75 6E 2E 63 6F 6D
  pImg_Export_Dir := PImageExportDirectory(ImageRvaToVa(pImg_NT_Header, pImg_DOS_Header, DWORD(pImg_Export_Dir), PImageSectionHeader(Pointer(nil)^)));
  ppdwNames := Pointer(pImg_Export_Dir.AddressOfNames);
  ppdwNames := Pointer(ImageRvaToVa(pImg_NT_Header, pImg_DOS_Header, DWORD(ppdwNames), PImageSectionHeader(Pointer(nil)^)));
  if not Assigned(ppdwNames) then
  begin
    UnmapViewOfFile(lpFileBase);
    CloseHandle(hFileMapping);
    CloseHandle(hFile);
    Exit;
  end;
  for i := 0 to pImg_Export_Dir.NumberOfNames - 1 do
  begin
    szFunc := PAnsiChar(AnsiString(ImageRvaToVa(pImg_NT_Header, pImg_DOS_Header, DWORD(ppdwNames^), PImageSectionHeader(Pointer(nil)^))));
    mStrings.Add(string(szFunc));
    Inc(ppdwNames);
  end;
  UnmapViewOfFile(lpFileBase);
  CloseHandle(hFileMapping);
  CloseHandle(hFile);
  Result := True;
end;

end.

Delphi2010 Dll 函数列表查看相关推荐

  1. CoreDll.dll函数列表

    找了好久这方面的东西,今天在网上找到了,我也来和大家共享一下, 这是CoreDll函数列表,没有函数的具体使用说明需要的话自己到msdn上查 ----------------------------- ...

  2. dumpbin发现没有入口函数_Dumpbin查看的dll/lib导出函数,不能重定向到文件问题

    Dumpbin.exe 是vs官方自动的查看dll.lib导出函数的利器. 找到dumpbin.exe 下面是我电脑中的位置: 不同平台下的dumpbin 需要同目录下 link.exe文件才能运行. ...

  3. KERNEL32.DLL中可供调用的API函数列表

      KERNEL32.DLL中可供调用的API函数列表,如下: ActivateActCtx AddAtomA AddAtomW AddConsoleAliasA AddConsoleAliasW A ...

  4. vscode查看变量及函数列表

    法1:Ctrl + Shift + O 法2:大纲 中间会展示所有的变量,包括函数内的变量,类内的元素 如果在侧边栏没有发现大纲可以通过如下方式进行大纲的打开 Shift+Ctrl+P 然后输入 Vi ...

  5. 使用dumpbin工具查看动态库中函数列表

    一.Windows环境下如何安装dumpbin工具? Dumpbin是Visual Studio自带的一个命令行工具,用于查看可执行文件.静态库和动态库的导入表.导出表.符号表等信息.在Windows ...

  6. 在 C++Builder 工程里调用 DLL 函数

    调用 Visual C++ DLL 给 C++Builder 程序员提出了一些独特的挑战.在我们试图解决 Visual C++ 生成的 DLL 之前,回顾一下如何调用一个 C++Builder 创建的 ...

  7. python调用c函数传字符串参数_Python使用ctypes模块调用DLL函数之传递数值、指针与字符串参数...

    在Python语言中,可以使用ctypes模块调用其它如C++语言编写的动态链接库DLL文件中的函数,在提高软件运行效率的同时,也可以充分利用目前市面上各种第三方的DLL库函数,以扩充Python软件 ...

  8. oracle 创建,删除存储过程,参数传递,创建,删除存储函数,存储过程和函数的查看,包,系统包

    认识存储过程和函数 存储过程和函数也是一种PL/SQL块,是存入数据库的PL/SQL块.但存储过程和函数不同于已经介绍过的PL/SQL程序,我们通常把PL/SQL程序称为无名块,而存储过程和函数是以命 ...

  9. python函数参数列表_python函数列表

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! python函数函数是python里组织代码的最小单元,python函数包含以下 ...

  10. 转: 中/英文资料 PKCS #11 函数列表

    https://www.cryptsoft.com/pkcs11doc/v220/ PKCS #11 函数列表 PKCS #11 加密令牌接口函数列表中文版 , 取自 Oracle Solaris 1 ...

最新文章

  1. 【写方案攻略】一些实用性方案思维拓展结构图
  2. android studio .so混淆配置,Android Studio 下混淆 文件配置 有关问题 初探(一)
  3. gis 联合 融合_GIS技术进化 | 我们为何需要跨平台GIS技术体系?
  4. Python 操作 Kafka --- kafka-python
  5. redis 设置密码 和 redis.config文件
  6. Qt显示调用C++的dll
  7. React:Redux简介
  8. 使SWT/JFace支持跨平台
  9. nginx配置文件被删怎么找回_恢复误删除的Nginx日志
  10. Android新浪微博实训报告,完成一份新浪微博目标用户分析报告
  11. 用 Python 给自己的头像加一个小国旗或者小月饼
  12. oracle数据透明加密,oracle数据透明加密-TDE
  13. 【期末不挂】离散数学 · 常考题型你都会了叭~
  14. 【人生如逆旅,我亦是行人】-半年总结
  15. Vanilla JS——最轻快的JavaScript框架
  16. Cesium 修改默认地球贴图的两种方式
  17. OSPF之链路状态数据库LSDB
  18. 网页版2048html制作,基于HTML+CSS+JS的网页版2048的实现
  19. 杨百万建议:炒股操作
  20. Vue全家桶系列之Vuex(三)

热门文章

  1. 黑色精美大气DJ音乐歌曲网站源码+带WAP手机端
  2. 【软件工程】对于Why Software Development Methodologies Suck(为什么软件开发方法论让你觉得糟糕)问题的探讨
  3. 免费正版杀毒软件,正版杀毒软件
  4. 统计思维:程序员数学之概率统计(第2版)PDF
  5. 自动登录SAP系统(流星程序集之十八)
  6. 菜鸟的mybatis实战教程
  7. Fiddler 4 模拟 服务端返回 json
  8. python可视化拖拽编程平台_PythonEditor可视化拼插编辑器:编程不用写代码,拖拖拽拽就可以!...
  9. 【CC2530入门教程-01】CC2530微控制器开发入门基础
  10. oozie mysql5.6_oozie服务安装及使用