存档

文章标签 ‘dll’

在dll中嵌入WTL窗体

2010年11月18日 没有评论

WTL全称Windows Template Library,是基于模板的window界面库,架构在ATL只上,由于其基于模板,没有MFC那么多继承以及相互引用,因此静态链接出来的exe十分短小精悍。WTL自带app wizard,但是这个app wizard仅支持生成exe型的应用程序,而不支持生成嵌入WTL窗体的dll。

经过摸索,并查阅wtl新闻组上的相关资料,最终有了下面的在dll中嵌入wtl窗口的例子。例子很简单只导出了一个函数ShowDlg,调用这个函数会生成一个模态的对话框。

源码如下:

DLL中嵌入WTL窗体简单示例

分类: Computer 标签: , ,

内存中载入DLL并执行(C代码,兼容vc,bcb)

2010年8月10日 1 条评论

系统载入dll的整体过程可以分为以下几个步骤:

1、将dll文件内容载入内存,并按照对齐粒度进行对齐并设置对应的各个内存区间的权限属性;

2、如果dll有重定位表,则进行重定位操作;

3、填充dll的导入表;

4、用ATTACH参数调用dll的入口函数进行初始化,之后返回imagebase即可。

因此了解了系统载入dll的整体流程,也就可以自己实现将dll载入内存并执行,这种方法对于加密等有一定意义。

但由于自己载入内存后,系统api GetProcAddress函数失效,因此在自己实现loadlibrary函数的同时必须自己实现此函数。

下面附上参考网上现有代码原理后写的代码。

进过少量测试,暂未发现bug,如发现bug,欢迎提出。

DLLLoader.h文件内容如下

//---------------------------------------------------------------------------
 
#ifndef DLLLoaderH
#define DLLLoaderH
 
#ifdef __cplusplus
extern "C" {
#endif
 
#include <stdio .h>
#include <windows .h>
//---------------------------------------------------------------------------
 
//public functions
 
DWORD LoadDllFromMemory(LPVOID lpBuffer,__int64 BufferSize);
DWORD FreeDllFromMemory(LPVOID lpBaseAddress);
FARPROC GetDllProcAddress(LPVOID imagebase,char * FuncName);
 
// private functions
 
DWORD AlignDllToMemory(LPVOID lpBuffer,PIMAGE_DOS_HEADER &dosHeader,PIMAGE_NT_HEADERS &ntHeader,__int64 BufferSize);   //从内存载入到对齐内存
DWORD GetAlignedSize(DWORD Origin,DWORD Alignment);                                                                    //计算对齐后的位置
DWORD GetImageSize(PIMAGE_NT_HEADERS ntHeader,PIMAGE_SECTION_HEADER sectionHeaders);                                   //计算总imagesize
DWORD Relocation(PIMAGE_NT_HEADERS ntHeader,LPVOID NewBase);                                                           //修正重定位
DWORD FillImportTable(LPVOID imagebase,PIMAGE_NT_HEADERS ntHeader);                                                    //填充IAT
 
 
//entrypoint function type
typedef UINT (CALLBACK * LPENTRYPOINT) (HANDLE hInstance, DWORD Reason, LPVOID Reserved);
 
 
#ifdef __cplusplus
}
#endif
 
#endif
</windows></stdio>

阅读全文…

分类: Computer 标签: ,