我们在C++编程的时候,有些时候获取更大编程余地,以及为了缩减代码,经常使用插入汇编语言进行联合编程。
下面我们实践在C++中嵌入汇编实现DLL注入源代码。
DLL动态函数链接库的接口如下。
#include "stdafx.h"
#include "resource.h"
//
//*******全局变量声明*******
HINSTANCE hInst = NULL;
HWND hDlg;
//
//
//*******函数原型声明*******
extern "C" _declspec(dllexport) void WaiGuaProc();
BOOL CALLBACK DlgProc(HWND hDlg , UINT message ,
WPARAM wParam , LPARAM lParam);
//
BOOL APIENTRY DllMain( HANDLE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
switch(ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
hInst = (HINSTANCE)hModule;
WaiGuaProc();
break;
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}
extern "C" _declspec(dllexport) void WaiGuaProc()
{
hDlg = CreateDialog(hInst , MAKEINTRESOURCE(IDD_MAINDLG) ,
NULL , (DLGPROC)DlgProc);
MessageBox(NULL , "Test!" , "Test" , MB_OK);
return;
}
BOOL CALLBACK DlgProc(HWND hwndDlg, // handle to dialog box
UINT uMsg, // message
WPARAM wParam, // first message parameter
LPARAM lParam // second message parameter
)
{
switch(uMsg)
{
case WM_INITDIALOG:
ShowWindow(hwndDlg , SW_SHOW);
return TRUE;
case WM_CLOSE:
DestroyWindow(hwndDlg);
return TRUE;
case WM_COMMAND:
if(LOWORD(wParam) == IDOK)
{
MessageBox(NULL , "Insert Dll Success!" , "Test!" , MB_OK);
}
return TRUE;
}
return FALSE;
}
下面我们进行C++与汇编联合编程,请认真阅读代码注释,
#include "Tlhelp32.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/
// CAboutDlg dialog used for App About
class CAboutDlg : public CDialog
{
public:
CAboutDlg();
// Dialog Data
//{
{AFX_DATA(CAboutDlg)
enum { IDD = IDD_ABOUTBOX };
//}}AFX_DATA
// ClassWizard generated virtual function overrides
//{
{AFX_VIRTUAL(CAboutDlg)
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
//}}AFX_VIRTUAL
// Implementation
protected:
//{
{AFX_MSG(CAboutDlg)
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
CAboutDlg::CA