WTL全称Windows Template Library,是基于模板的window界面库,架构在ATL只上,由于其基于模板,没有MFC那么多继承以及相互引用,因此静态链接出来的exe十分短小精悍。WTL自带app wizard,但是这个app wizard仅支持生成exe型的应用程序,而不支持生成嵌入WTL窗体的dll。
经过摸索,并查阅wtl新闻组上的相关资料,最终有了下面的在dll中嵌入wtl窗口的例子。例子很简单只导出了一个函数ShowDlg,调用这个函数会生成一个模态的对话框。
源码如下:
DLL中嵌入WTL窗体简单示例
存档一份,备用

其中J为交流接触器,总和低输出控制信号控制交流接触器,通过交流接触器控制外部设备。一般意义上可以不用交流接触器J。
晚上,和几位同学去时代广场的电影院买了几张票,观赏了下Inception,算是人生的真正意义上的第一次为了看电影而去的电影院。
总体来说观感如下:
1、电影院设施不是太满意,屏幕经常会有闪光点,兴许是我老土,电脑上看电影看多了,下次尝试下IMAX,IMAX-3D。
2、一点不落的看下来,没感觉Inception有传说中的那么混乱,总体情节还算是比较清晰的,只是将部分后面的内容放到了最前面,中间一直到结尾顺序都是正常的。穿越层数也比较清楚,只是中间多次穿插不同层之间的情节而已。
3、再次感觉国外的大片和国内的大片水准上的差别,尤其是科幻片。。。。。。这点不得不承认
4、Inception还是没少得了结尾留悬念的这种传统吊人口味的方式,陀螺究竟停没停是个问题。
中秋之后,又去爬了次号称天津最高峰的八仙山,山还是那个山,水还是那个水,人已换了不少新面孔
附上zp若干




出门在外,一般每个星期定时打个电话回家唠叨唠叨。
依稀记得从去年起,每次电话中必然出现的话题是“找女朋友了么?”,“赶快找啊”等等
当时,还是觉得此话题离我很远,每次也就听听罢了,左耳进右耳出。
但催得多了,听得多了,当然也就不免心态也受些影响了。这时一般都会对自己说,要淡定,事情么,要慢慢来。
但是真的淡定了么?还是压根就淡不定?这个问题很麻烦。
尤其是最近由于某些事情或安排,电话里催的越发频繁了:sad: 烦啊烦
还是放首歌吧。。。。
音频片段:需要 Adobe Flash Player(9 或以上版本)播放音频片段。 点击这里下载最新版本。您需要开启浏览器的 JavaScript 支持。
提起这个话题,主要是从前不久自己的一次实际dcu逆向编译经历而来的。
题记:f-in-box控件是个delphi下进行flash播放的优秀控件,其能从内存中载入ocx,从内存中载入flash等优秀特性。但是很可惜,网上只能找到3.1.2版本的full source版本。之后版本一直到最新版3.5.3之间都只有破解版存在。full source版本苦等不来,后来看f-in-box控件源码结构也比较简单,只有一个pas文件。正好我们都知道dcu中含有不少pas中的原始结构和类型信息,因此尝试在3.1.2源码的基础上对3.5.3进行逆向编译。至于为何在3.1.2的基础上,不在3.1.2的基础上行不行?这个我可以说的是,即使没有3.1.2,也是可行的,3.1.2的存在只是为中间逆向省去了很多麻烦而已。
下面,就对我在逆向f-in-box dcu的过程中的经验做下总结。 阅读全文…
系统载入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>
阅读全文…
最新评论