首页后端开发其他后端知识c语言获得dll的函数名 c获取uuid

c语言获得dll的函数名 c获取uuid

时间2023-07-08 23:50:01发布访客分类其他后端知识浏览521
导读:如何查看DLL文件里的函数 1、准备好要看函数的dell文件,打开Dll函数查看器3.5。2、单击“选择文件”按钮,选择你的文件。3、点击竖早枝“打开”按钮。你会发睁旁现余敏,这个查看器列出了很多函数。4、选择你的函数,如“SetMessa...

如何查看DLL文件里的函数

1、准备好要看函数的dell文件,打开Dll函数查看器3.5。

2、单击“选择文件”按钮,选择你的文件。

3、点击竖早枝“打开”按钮。你会发睁旁现余敏,这个查看器列出了很多函数。

4、选择你的函数,如“SetMessageA”,然后点击左边的“+”,你就能看到这个函数的参数。

5、如果想在VB或易语言中声明这个函数,不需输入,可以这样:选择函数,右键单击,你就会发现有两个菜单,一个是“复制到VB声明”,一个是“复制到易语言声明”!

怎么枚举一个DLL里面的所有导出函数名字

//建立一个vc6.0中建立一个win32console工程,打入如下代码。我在我的电脑上测试通过了。

#include "手洞stdafx.h"

#include windows.h

#include winbase.h

#include stdio.h

#include tchar.h

#include imagehlp.h

typedef PVOID (CALLBACK* PFNEXPORTFUNC)(PIMAGE_NT_HEADERS,PVOID,ULONG,PIMAGE_SECTION_HEADER*);

void printAllFuncName(char* fileName); //打印所有函数名称的函数声明

int main(int argc, char* argv[])

{

printAllFuncName("F:\\gdi32.dll"); //打印gdi32.dll中所有函数名称,要打印别的dll中的函数,只要改变这个字符串。

getchar();

return 0;

}

void printAllFuncName(char* fileName){

LPWIN32_FIND_DATA lpwfd_first=new WIN32_FIND_DATA; /毕磨枯/接受findfirstfile的结构指针

HANDLE hFile,hFileMap; //文件句柄和内存映射文件句柄

DWORD fileAttrib=0; //存储文件属性用,在createfile中用到。

void* mod_base; //内存映射文件的起始地址,也是模块的起始地址

//首先取得ImageRvaToVa函数本来只要#include Dbghelp.h就可以使用这个函数,但是我的vc没有这个头文件

PFNEXPORTFUNC ImageRvaToVax=NULL;

HMODULE hModule=::LoadLibrary("DbgHelp.dll");

if(hModule!=NULL){

ImageRvaToVax=(PFNEXPORTFUNC)::GetProcAddress(hModule,"ImageRvaToVa");

if(ImageRvaToVax==NULL){

::FreeLibrary(hModule);

printf("取得函数失败\n");

return ;

}

} else{

printf("加载模块失败\n");

return ;

}

if(FindFirstFile(fileName,lpwfd_first)==NULL){ //返回值为NULL,则文件不存在,游野退出

printf("文件不存在: %s ",fileName);

return ;

} else{

DWORD fileAttrib=lpwfd_first-dwFileAttributes;

}

hFile=CreateFile(fileName,GENERIC_READ,0,0,OPEN_EXISTING,fileAttrib,0);

if(hFile==INVALID_HANDLE_VALUE){

printf("打开文件出错!");

return ;

}

hFileMap=CreateFileMapping(hFile,0,PAGE_READONLY,0,0,0);

if(hFileMap==NULL){

CloseHandle(hFile);

printf("建立内存映射文件出错!");

return ;

}

mod_base=MapViewOfFile(hFileMap,FILE_MAP_READ,0,0,0);

if (mod_base==NULL)

{

printf("建立内存映射文件出错!");

CloseHandle(hFileMap);

CloseHandle(hFile);

return ;

}

IMAGE_DOS_HEADER* pDosHeader = (IMAGE_DOS_HEADER*)mod_base;

IMAGE_NT_HEADERS * pNtHeader =

(IMAGE_NT_HEADERS *)((BYTE*)mod_base+ pDosHeader-e_lfanew); //得到NT头首址

//IMAGE_NT_HEADERS * pNtHeader =ImageNtHeader (mod_base);

IMAGE_OPTIONAL_HEADER * pOptHeader =

(IMAGE_OPTIONAL_HEADER *)((BYTE*)mod_base + pDosHeader-e_lfanew + 24); //optional头首址

IMAGE_EXPORT_DIRECTORY* pExportDesc = (IMAGE_EXPORT_DIRECTORY*)ImageRvaToVax(pNtHeader,mod_base,pOptHeader-DataDirectory[0].VirtualAddress,0);

//导出表首址

PDWORD nameAddr=(PDWORD)ImageRvaToVax(pNtHeader,mod_base,pExportDesc-AddressOfNames,0); //函数名称表首地址每个DWORD代表一个函数名字字符串的地址

PCHAR func_name = (PCHAR)ImageRvaToVax(pNtHeader,mod_base,(DWORD)nameAddr[0],0);

DWORD i=0;

DWORD unti=pExportDesc-NumberOfNames;

for(i=0; iunti; i++){

printf("%s\n",func_name);

func_name = (PCHAR)ImageRvaToVax(pNtHeader,mod_base,(DWORD)nameAddr[i],0);

}

::FreeLibrary(hModule);

CloseHandle(hFileMap);

CloseHandle(hFile);

}

C语言调用dll

这个相对路径是滚宴闭你当前代码存放的位置.

实际应用中相对大裂路径比绝对路径实用多了.

比如你可以再代码路径祥亏上再创建一个文件夹,命令dll,里面放所有的dll文件

那么你此时路径".\\dll\\test.dll"

你可以发给我,我帮你看看

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!


若转载请注明出处: c语言获得dll的函数名 c获取uuid
本文地址: https://pptw.com/jishu/296956.html
腾讯云gpu服务器试用 腾讯云服务器cpu使用率突然很高 窗函数c语言 窗函数怎么用

游客 回复需填写必要信息