恶意代码编写DLL实验

实验要求

编写一个DLL,并将其导出成函数,可被其他程序调用。

实验内容

  1. 本次实验使用环境为Visual Stadio 2017,打开VS 2017,新建项目 -> Visual C++ -> Windows桌面 -> Windows控制台应用程序,选择要保存的路径,并为项目命名(我将其命名为DLLpractice),点确定。
  2. 在项目目录下会生成许多文件,打开DLLpractice.cpp,编写DLL函数代码,如下:
/* DLLpractice.cpp: 定义控制台应用程序的入口点 */
#include "stdafx.h"
#include
using namespace std;
typedef int(*fun)(int, int);
extern "C" int _declspec(dllexport) addnum(int a, int b)
{ return a + b; }

代码中的typedef int(*fun)(int, int),其中typedef用来建立新的数据类型名,加了typedef相当于创建了一个int function_name(int,int)函数的指针类型,fun是类型名。和int、char一样,可以用来声明变量。
代码中的extern “C” int _declspec(dllexport) 是将一个函数声名为导出函数,就是说这个函数要被其他程序调用,即作为DLL的一个对外函数接口。由于在制作DLL导出函数时由于C++存在函数重载,因此__declspec(dllexport) FUNCTION(int,int) 在DLL会被decorate,例如被decorate成为function_int_int,而且不同的编译器decorate的方法不同,造成了在用GetProcAddress取得FUNCTION地址时的不便,使用extern "C"时,上述的decorate不会发生,因为C没有函数重载,因此被extern"C"修饰的函数,就不具备重载能力。

  1. 再在同一目录下新建测试程序test.cpp(也可将该程序写在其他的目录下,只是后续调用DLL库函数时要写其绝对路径)
#include "stdafx.h"
#include
#include
#include
using namespace std;
typedef int(*fun)(int, int);   //定义函数指针类型,两个整数参数,返回值为整数
int main()
{
	HINSTANCE  handle = LoadLibraryA("test.dll");   //加载dll文件
	fun addnum = NULL;
	addnum = (fun)GetProcAddress(handle, "addnum");   //导出函数
	int a, b;
	cout << "Input two integers: " << endl;
	cin >> a >> b;
	cout << a << " + " << b << " = " << addnum(a, b) << endl;
	system("pause");
	return 0;
}

运行结果

恶意代码编写DLL实验_第1张图片

你可能感兴趣的:(恶意代码分析)