yafare

  C++博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  0 随笔 :: 0 文章 :: 0 评论 :: 0 Trackbacks
给人的感觉怎么跟0bug似得……
re: 豆瓣FM 测试版放出 yafare 2011-06-10 19:01
shdocvw.dll,上面写错了
re: 豆瓣FM 测试版放出 yafare 2011-06-10 18:57
崩溃了,在这个地方:


0042DF6B |. 8D55 F8 lea edx, dword ptr [ebp-8]
0042DF6E |. 8975 F4 mov dword ptr [ebp-C], esi
0042DF71 |. 8975 F0 mov dword ptr [ebp-10], esi
0042DF74 |. 8975 F8 mov dword ptr [ebp-8], esi
0042DF77 |. 8B08 mov ecx, dword ptr [eax]
0042DF79 |. 52 push edx
0042DF7A |. 50 push eax
0042DF7B |. 8B41 48 mov eax, dword ptr [ecx+48]
0042DF7E |. FFD0 call eax
0042DF80 |. 85C0 test eax, eax
0042DF82 |. 75 63 jnz short 0042DFE7
0042DF84 |. 8B45 F8 mov eax, dword ptr [ebp-8]
0042DF87 |. 8B08 mov ecx, dword ptr [eax] //

调用了shdocw里面的一个函数,传入了一个指针。调用完毕只是判断了返回值是否为0,并没有判断返回的指针是否有效导致崩溃

OnTimer => Function1 => Function2崩溃
Function1可供参考的函数跟字符串有:
KillTimer,RedrawWindow,登录失败
re: FanType 0.20版本 yafare 2011-05-28 21:28
@megax
HUIANG说的应该是类似BCB的那种虚拟空格,vc也可以开启这个功能,空白的地方也可以把光标移过去
re: FanType 0.20版本 yafare 2011-05-28 21:20
发现一个bug,一行字数到65536之后就不显示了。当选中某个字的时候,会显示这个选中的字跟它前面的,后面的依然没有显示。
re: 有时,你真的太自信了 yafare 2011-02-22 23:21
@by
只是对自己人保密了……对调试器来说一点区别都没有的
re: 有时,你真的太自信了 yafare 2011-02-21 13:24
0041573C 59 pop ecx
0041573D 58 pop eax
0041573E 5A pop edx
0041573F 51 push ecx
00415740 51 push ecx
00415741 51 push ecx
00415742 8B00 mov eax, dword ptr [eax]
00415744 2B02 sub eax, dword ptr [edx]
00415746 C3 retn
pascal,汉……

不过MASM那堆语法也跟高级语言差不多了
@feixuwu
Cloud是啥?
@feixuwu
没试过协程,hook了他lua脚本里面的一个timer,在那里面搞的外挂逻辑
@feixuwu

之前弄过剑侠世界的脚本,在luaL_loadBuffer断下之后,文件名是在堆栈里面可以找到的,当时dump了他的一套脚本,可以用来搞外挂了
hook他的lua.dll加载脚本的函数,文件名以及脚本缓冲区都可以在堆栈找到。这样更简单一些
re: 剑3资源格式分析(一) yafare 2010-07-16 08:57
@johndragon
以学习为目的的逆向工程是合法的
Good job.
为什么不用静态链接呢?
re: 自己实现的memcpy yafare 2009-04-18 15:54
@OwnWaterloo

=_=!!
re: 工作两年后的总结 yafare 2008-11-03 16:58
@abettor

物以类聚,人以群分。
如果你周围的人都是这样,建议你还是换个环境吧。
re: 工作两年后的总结 yafare 2008-11-03 16:55
呵呵,看你的列表,估计你每天真正集中精神写代码/学习的时间不超过2个小时。
re: 深圳华为 C++面试题 yafare 2008-09-30 10:22
题目出的真挫啊。
还不如汇编容易懂吧……
调用相关:函数调用约定带来的错误

不一定是调用约定错误,数组访问越界覆盖掉vc设置的cookie,也可能是这样的提示
@Kevin Lynx

没用过VEH,刚查了下msdn,发现VEH是这样定义的:

[quote]

Vectored exception handlers are not frame-based handlers. Therefore, you can add a handler and ensure that it gets called regardless of where you are in a call frame. The handlers are called in the order that they were added, after the debugger gets a first chance notification, but before frame-based dispatching occurs.


To add a handler, use the AddVectoredExceptionHandler function. The handler is called for all future exceptions for the process. To remove a handler, use the RemoveVectoredExceptionHandler function.

[/quote]

看他的意思就是VEH 优先级高于SEH的,但是必须得显式的用AddVectoredExceptionHandler 来添加。

VEH 的handler,跟 SetUnhandledExceptionFilter 参数是一样的,貌似除了被调用的顺序不同,别的也都差不多。
一般的做法都是在程序里面设置一下最终异常处理,就是 SetUnhandledExceptionFilter,没有设置 SEH 的异常最终就会转移到这里处理了。

这个函数的参数是个需要自己实现的回调函数,Windows会把 EXCEPTION_POINTERS 作为参数传给这个回调,然后就可以用你文章里面的代码打印相应的信息了。
re: 不怕无知,但怕无畏 yafare 2008-03-27 11:42
@Yule Snow

说话要经过大脑,别人批评的是什么你看清楚了么?
re: 不怕无知,但怕无畏 yafare 2008-03-27 11:39
@Fox

[quote]
@kacy16
主要就是字节对齐和DWORD(4B) copy。
字节对齐主要体现在首地址不是4的倍数和尾部不足4B的情况处理,这种情况下,你只能按Byte copy了。
[/quote]

[quote]
void *mymemcpy( void *src, void *des, size_t len )
{
char *tempsrc = (char *)src;
char *tempdes = (char *)des;

size_t offset = len / 4;
for( size_t i=0; i<offset; ++i )
{
*(unsigned long *)tempdes = *(unsigned long *)tempsrc;
tempdes += sizeof(unsigned long);
tempsrc += sizeof(unsigned long);
}

offset = len - len % 4;
for( size_t i=0; i<offset; ++i )
{
*tempdes++ = *tempsrc++;
}
return des;
}
[/quote]

你这个算法考虑首地址不是4的倍数,也就是地址是否对齐了么?既然没考虑那为什么要在回复特别提一下呢?

所有的crt实现里面 memcpy 都是不考虑 Overlapping 的。
如果觉得地址可能会重叠,那么你需要的是 memmove。
看来你是没看过vc的crt源码啊。
re: 不怕无知,但怕无畏 yafare 2008-03-21 12:37
看了文章感觉挺恶心的,写过mmx,sse2的是不是也要bs DWORD copy呢。

第一次面试别人心情激动可以理解,但是这样贬低别人表现自己的睿智就有问题了。