C语言简单实现静态获取函数地址

  在平时许多场合下,都会遇到要获取函数地址,比如编写shellcode,要调用函数的时候。虽然大多数情况下,动态获得函数地址会更好,但多了解一些方法总是有益的。

  用C简单实现的话,主要是两个函数LoadLibrary与GetProcAddress的使用

LoadLibrary()有A与W两个版本,因为此例在VS2013下实现,默认Unicode编码,所以用的应该是LoadLibraryW

注意传入参数就需为宽字符。(为了加深理解,代码中基本手动选择单字符与宽字符)


GetProcAddress()需要传入一个句柄与一个LPCSTR类型的函数名

下面是源代码

#include

#include

#include

#include  
int main(void)
{


HINSTANCE h;


WCHAR buffer[128];//存储函数所在的动态链接库的名称  也可以用用指针LPWSTR代替 
CHAR buffer2[128];//存储函数名称


printf("1.输入你想要查询的函数所在库的名称:\n");
_tscanf(_T("%s"),buffer);
printf("2.输入你想要查询的函数名称:\n");
scanf("%s", buffer2);

h = LoadLibrary(buffer);


_tprintf(_T("1.%s=0x%x\n"),buffer,h);//注意是宽字符的buffer


void *p;
p = GetProcAddress(h,buffer2);
printf("2.%s=0x%x\n",buffer2, p);

_getch();
return 0;

}


执行结果

C语言简单实现静态获取函数地址_第1张图片

本文适用于学习C或windows编程的新手,欢迎大家评论与指正。

你可能感兴趣的:(C语言简单实现静态获取函数地址)