プロフィール水中雁的个人空间フォトブログリスト ツール ヘルプ

程 虎

職業
好きなもの/好きなこと
人生如梦,
率性而行。
心清如水,
随遇而安。 知足者常乐
全 11 枚中 1 枚目
他のアルバム (1 件)
7月19日

剑网2

最近陪老婆玩剑网2,突然发现外挂也并非一无是处,它比较适合我们这些上班族。
期待公司的三国游戏。。。
7月5日

无题

5月,天气嘈杂,太阳炎热。
送走老婆,依依不舍。
6月,轻风徐徐,细雨绵绵
思念,等待,盼着地球快转。
7月,天气晴朗,碧空白云。
快乐的老婆,就要从上海启程。
漫长的两个月的等待,幸福终于到来。
以后,我们永远不分开。
7月3日

“经济学家”

最近,看到不少新闻如是说,国内经济学家的名声不好,主要是道德问题。
关于批评经济学家的新闻,可以随便在网上的新闻里找找。
其实让我忍俊不禁的是想到了一句脏话,在台湾最脏的骂人的话,是骂他“政府官员”——出自《东厂仅一位》。于是,是不是可以骂那些没有道德的人为“经济学家”。
6月23日

VC6.0的Release版调试

终于用ATL实现了自己第一个com组件,就是把刚进公司时罗老师布置得日志程序改写了一下。
接下来准备不用ATL,再写一遍这个功能的com组件,来加深印象。
 
终于发现vc6.0也可以调试Release版本的应用程序,尽管haha同学罗列出一大堆理由来说明该方法存在的问题。但事物的存在就有它的合理性,不考虑某些极端的情况下,还是可以使用的,不过推出正式Release版时记得把设置改回去就是了。当然,Release版本最好还是用OllyDbg来进行调试。
 
引用:
     VII. 将Project Settings" 中 "C++/C " 项目下优化选项改为Disbale(Debug)。编
译器的优化可能导致许多意想不到的错误,请参考http://www.pgh.net/~newcomer/deb
ug_release.htm
1. 此外对RELEASE版本的软件也可以进行调试,请做如下改动:
在"Project Settings" 中 "C++/C " 项目下设置 "category" 为 "General" 并且将"D
ebug Info"设置为 "Program Database"。
在"Link"项目下选中"Generate Debug Info"检查框。
"Rebuild All"
如此做法会产生的一些限制:
无法获得在MFC DLL中的变量的值。
必须对该软件所使用的所有DLL工程都进行改动。
6月17日

对RFA同学的指针研究的实现

引用
 
在RFA的大作中提到了实现使用指针偷取父函数的数据及调到父函数中执行的理论,在此写出程序实现之。
 
//偷取父函数数据
//Release版,设置POptimizations为Disable(Debug)
#include <Stdio.h>
int papa()
{
 int *ptr;
 int i = 2;
 int dwEBP = 0;
 ptr = &i;
 dwEBP = *(ptr+5); 
 
 printf("dwEBP is %d\n", dwEBP);
 return 1;
 
}
int main()
{
 int ret = 0;
 int e = 99999;
 ret = papa();
 
 printf("I'm in main()!\ne == %d", e);
 return ret;
}
 
执行结果:
dwEBP is 99999
I'm in main()!
e == 99999
 
//debug版
#include <Stdio.h>
int papa()
{
 int *ptr;
 int i = 2;
 int dwEBP = 0;
 ptr = &i;
 dwEBP = *(ptr+5 + 0x12); 
 //+0x12 是由于debug版本的main函数在开始的时候在栈中分配了0x48个字节的空间

 printf("dwEBP is %d\n", dwEBP);
 return 1;
 
}
int main()
{
 int ret = 0;
 int e = 99999;
 ret = papa();
 
 printf("I'm in main()!\ne == %d", e);
 return ret;
}
 
执行结果:
dwEBP is 99999
I'm in main()!
e == 99999
 
由此可见,papa函数通过指针ptr偷取了main函数的局部变量e的值。
 
//跳到父函数执行
#include <Stdio.h>
int papa(int a)
{
 int *ptr;  //这里将ptr指针移到前面,是为了使debug版和Release版一致。
              //在VC中,debug版声明的按顺序压栈,而Release版先压指针。
 int i = 2;
 int dwEBP = 0;
 i = a;
 ptr = &i;
 dwEBP = *(ptr+3);
 _asm
 {
  jmp dwEBP  //跳转到父函数执行
 }
 
 printf("I'm in papa()");
 return 1;
 
}
 
//因为跳转会引起堆栈不平衡,声明全局变量来维护寄存器。
int e = 3;
int dwEsp, dwEax, dwEbx, dwEcx, dwEdx, dwEbp, dwEdi, dwEsi;
int main()
{
 int ret = 0;
_asm                          //现场保护
{
 mov dwEsp, esp
 mov dwEax, eax
 mov dwEbx, ebx
 mov dwEcx, ecx
 mov dwEdx, edx
 mov dwEbp, ebp
 mov dwEdi, edi
 mov dwEsi, esi
}
 ret = papa(e);
 
_asm                        //恢复现场
{
 mov esp, dwEsp
 mov eax, dwEax
 mov ebx, dwEbx
 mov ecx, dwEcx
 mov edx, dwEdx
 mov ebp, dwEbp
 mov edi, dwEdi
 mov esi, dwEsi
}
 printf("I'm in main()!");
 return ret;
 
执行结果是
I'm in main()!
并没有经过
I'm in papa()

赞阿根廷

bing, bing, bing, bing, bing,
bing, bing, bing, bing, bing,
bing, bing, bing, bing, bing,
bing, bing, bing, bing, bing,
bing, bing, bing, bing, bing, bong.
"Goal"!
6月14日

可恶的韭菜馅

昨天韩国2:1力克多哥队,巴西也赢球了,虽然不尽兴。
 
今天早上风风火火来到公司食堂吃饭。我竟然是第一个,看到窗口里有一盘蒸饺,口水都流出来了,心想今天没白起早。吃了五六个,突然发现,好不爽啊,这么好看的蒸饺肚子里竟然是韭菜和肉,我最不喜欢吃韭菜馅的任何东西了,如果吃了,还会引起消化不良。怀着失望的心情,愤愤地吃了两碗皮蛋瘦肉粥,看来今天中午又要吃不下饭了。
6月13日

com编程学习启动

也要开始学习com编程了,加油。
6月6日

手动升级天下霸图第九式补丁

这款游戏正版几乎绝版了,盗版也很难下载到了。
 
由于盗版,补丁可能打不上,但补丁文件会释放到windows\temp目录下,可以按照update.ini文件中CopyFileList中描述的那样,将文件全部拷过去,应该就可以玩第九式了。