有关__declspec(property)的多态性

MSVC为了方便C++编写COM客户程序引入了property关键字。可能有些人不知道VC有这个功能,但是property的概念相信大家都清楚。例如:

class A
{
public:
int _width;
int get_width()
{
return _width;
}
void set_width(int value)
{
_width = value;
}
__declspec(property(get=get_width,put=set_width)) int width;
}

int main()
{
A a;
a.width = 3;
in[……]

Read more

针对笔记本键盘Fn+字母键不能打出数字的终极解决思路与一种实现方案

前几天用Finale打谱需要用到小键盘的数字键,然后发现Fn键加uio等字母按不出来数字,实际出来的是NumLk没有打开情况下的方向键与PgUp和PgDn等。如果打开键盘的NumLk,按字母键可以打出数字,但我需要的是Fn直接能打出小键盘数字,这样在许多地方才方便,之前用过NEC、DELL的笔记本都能做到。

很容易可以想到,之所以会打出方向键是因为Windows认为NumLk在关着。开始并没觉得这个问题很严重,就去问了下谷哥,参考到这篇帖子:

http://acer.it168.com/thread-2136449-1-1.html

该帖子提到可以通过按外接键盘上的NumLk来激活Win[……]

Read more

XDL Project

Xiaofei Development Library,简称XDL,中文名只可意会不可翻译。

开始这个项目的起因很简单,就是前不久的一天接到一个游戏上的活儿,工作很简单,就是让游戏不掉线,核心就几句代码就搞定,结果愣是折腾了一下午,原因是主程序端还是用VB6做,而这次要弄的是socket api,一个个地声明各种函数与结构我里个艹,最后把我都要写吐了,发誓再也不要用VB6写东西了!!!

那么又回到了原来那个问题,用C的话选择什么界面库。据说这个问题曾经引发过“血案”——本人坑爹的考研就是一年前拜此问题引发的项目把脑袋搞炸所赐。

如果需要个完善的界面框架,在Windows本机代码下其实是还[……]

Read more

【论文存档】Windows可执行程序内存动态代码化的研究与实现

Windows可执行程序内存动态代码化的研究与实现

摘要

目前在缓冲区溢出攻击、软件加壳、软件代码保护等领域普遍使用到内存动态代码技术,具体是指编写一段二进制机器码,该代码无需经过任何预处理即可在进程内存空间的任意地址直接执行。内存动态代码一般直接使用汇编语言编写,存在开发难度较大、代码不易维护、隐藏软件风险等问题。

本课题提出一种方法用于将Windows可执行文件直接转化为内存动态代码,并给出动态代码设计、动态代码装配、命令行接口主程序、图形界面外壳四个方面的具体实现。课题解决了PE文件的读取与分析、代码自身基址重定位、数据执行保护机制的绕过、数据与代码压缩与解压、系统函数[……]

Read more

抄一份上海地铁的票价查询

起始站:
路线
请选择

终点站:
路线
请选择

票价:0元

/***** price Plugin *****/
$.fn.price = function(options){
var opts = $.extend({}, $.fn.price.defaults, options);
return this.each(function() {
var th = $(this);
var lx = th.find(opts.lx),zd = th.find(opts.zd);
var data = {“[……]

Read more

最简memmove代码

不考虑时间效率,直接rep movsb实现:

3BFE    CMP EDI,ESI
72 09    JB $+0Bh
8D740E FF    LEA ESI,[ESI+ECX-1]
8D7C0F FF    LEA EDI,[EDI+ECX-1]
FD    STD
F3:A4    REP MOVSB
FC    CLD

共16字节。

[……]

Read more

打造世界最小LZMA解压DLL(最终话)

在前面的文章里,我们通过使用UPX Stub中的代码加以手工修改PE文件导出表得到了3280byte的目标DLL(点击此处),又通过重新编译LZMA SDK将目标缩小到2970byte(点击此处)。今天我们继续精简,通过修改源代码来进一步缩小目标文件的大小。

首先我们可以看到原来LZMA解压在不加其他功能情况下的声明是:

int LzmaDecode(CLzmaDecoderState *vs, const unsigned char *inStream, SizeT inSize, SizeT *inSizeProcessed, unsigned char *outStream, SizeT[……]

Read more

打造世界最小LZMA解压DLL(第二弹)

一年前我曾写过一篇《手写PE文件,打造史上最小LZMA解压DLL》,最近因为涉及毕业设计,重新开始研究PE,同时也需要提供LZMA压缩功能。

对原来的程序观察后发现,UPX使用的LZMA代码并不是最优化的编译,原因是局部变量全部使用ESP寻址,而Intel x86对寄存器寻址有个ESP例外,需要多占用一字节的指令。于是重新翻出LZMA SDK,使用VC6编译出2409字节的代码(原来是2694字节)。

另外一个问题就是原来开头写的sub esp, 3e80是不对的。Windows分页机制规定,栈分配是逐页进行的,当当前栈位于页顶端时访问上面的页会引发栈空间分配,但跨页访问即认为访问越界。显[……]

Read more

【原创】简单通用的Inline Hook代码

前不久给羽毛写一个Hook时弄的,当时用的VirtualAlloc,今天发现可以创建可执行的堆,那么为了节省空间就改成HeapAlloc了。

适用于已经确定要Hook位置和需要取下的代码长度的inline hook,hook为相对地址jmp,占用5字节。不适用于要hook的地址已经有jmp类指令,比如已经被别的程序装了钩子,那样的话需要单独处理,即将原来的钩子移走的同时修改原来钩子的相对跳转值,一般情况用不上,不符合“简单”的要求。

下面贴代码:
HANDLE hHookHeap = NULL;

PVOID InstallHook(PVOID CodeAddr, LONG[……]

Read more

Windows Phone 7开发折腾笔记(一)

昨天实在是把这学期的项目拖得不能再拖了,作为一个极端偏执的微软教徒(为什么要叫教徒呢,在java和.net的大战中,作为一个还算不错的coder,我自然知道java是非常的好的,但就是毫无理由地恨它,并拒绝接受一切和它有关的东西,比如android),我自然而然选择了ce平台,而把现在的手机拿去交作业看上去似乎太落伍,所以走了wp7路线,不过新手机倒还没买,先用电脑做开发还是可以的。

首先说下WP7 SDK在xp下安装的问题,因为学校的机房是xp,这个就比较纠结,sdk在xp下大家也都有破解的办法,就是把baseline.dat中两行从1改成0,网上都有,无需多说。这里主要说一下模拟器怎[……]

Read more