存档
mindmanager is a great tool, but it has a bug (or they the devlopers may think it’s a feature) not fixed for years. That is, the fuzzy text problem. Just search mindmanager fuzzy text , there are many results about this bug and some patches for the old versions of mindmanager. Just as what is [...]
vs有比较完善的unicode支持,从2005(或更早?)开始就支持源文件是utf-8,并且可以用中文做变量名函数名。(可以是可以,不推荐) 不过,也有一点很让人生气,就算源文件是utf-8编码的,编译时,他也会把utf-8转成主机的编码。所以,对于中文编码而言,如果源文件是 utf-8的并且有这样的内容,编译还是一样出问题: const char * test = “®”; tt.cpp(10) : warning C4566: character represented by universal-character-name ‘\u00AE’ cannot be represented in the current code page (936) c++0x草案中有 u8″string literal” 形式的字符串,如果可以用这个,则问题解决,可惜的是,vs2010并不支持 u8-prefix string literal。当然,u和U也不支持。不过由于windows本身所说的unicode是utf-16 le,所以vc里L”string”就是u”string”。 如果才能让vc以持u8呢?写一个宏和字符串转化的类,在运行期转化是一个可行但比较折中的办法,这个办法最大的问题是依然不能在代码里写”®”这样的字串,因为编译期转成中文编码失败成?号,运行期转成utf-8还是问号。 当然,可以写 L”®”,这样这个u8类可以这样写: string to_utf8(const wchar_t*); #define U8(string) to_utf8(string).c_str() 然后在用的地方写: U8(L”®”); 这样基本能用,但带来了一些运行期消耗。并且L的字符串也比较大。当然宏本身还可以改改,使得不需要写L,而是在预处理后加入L,但会带来额外的限制(想想U8(“hello” “world”))。 能不能hack编译器加入u8的支持呢?经过一番研究,发现了点眉目。 首先,vc编译器编译的主要功能代码在c1xx.dll中。这个dll的x86版本位于 C:\Program Files (x86)\Microsoft Visual Studio [...]
hdtune扫硬盘坏道,很慢。为了让它可以从某个位置开始,调了一下: 004089F5 . 57 PUSH EDI ; /lParam 004089F6 <blockpos> . 8B7C24 1C MOV EDI,DWORD PTR SS:[ESP+1C] ; | 004089FA . 8946 1A MOV DWORD PTR DS:[ESI+1A],EAX ; | 004089FD . 57 PUSH EDI ; |wParam 004089FE . 68 0E040000 PUSH 40E ; |Message = WM_USER+14. 00408A03 . 51 PUSH ECX ; |hWnd 00408A04 . [...]
好久没写了,今天再灌一篇。 一个flash小游戏里的TEA算法,hack一把,结果发现,decompile出来的as,改成js运行后,得到的结果跟原游戏运算出的结果是不一样的。 心想难道js跟as有些差别?不得已,去下了一个adobe flash cs3。 发现自己快不会用flash了,还是flash5时学了几天,做了点皮毛,主要也是那时为了应付交了一下某堂课的作业。想起来当时那老师也很好心,这个flash作业给了我满分。 不过今天对flash cs3感觉 很不顺手了。一开始就遇到个问题 ,在cs3中如何使用外部类?直接写一个,报错误“类不能嵌套”,搜了一把是写在一个.as文件里,就写在一个TEA.as里。 加入代码 import TEA; 结果又报错,说TEA没有实现,查文档,原来说是要放到一个包(package)里。那就放吧,放完发现还是不对,最后看了一下flash自己的实现,终于整明白了。先建一个crypto的文件夹,在里面建个TEA.as,代码这样: package crypto{ //crypto要跟文件夹名一致。 public class TEA{ //TEA跟文件名即TEA.as一致。public好像不能少。 …//省略 } } OK,可以运行了,然后发现,其实另存为flash 8的文档,就可以直接用不放在包里的TEA.as!晕倒。 运行发现,这个flash得到的结果跟html里的js算出来是一样的。敢情从下载flash起,事情就白做了。 最后没办法,回到sothink swf decompiler中,仔细看,看到一个疑点: var _loc11 = 2.671213E+009; 为什么是这样呢?算法中不应有这样的代码。打开raw code,找到这一行: //96 09 00 06 ef e6 e3 41 00 00 20 37 _push 2.67121e+009 对比一下其它的_push语句,发现ef e6 e3 41 00 [...]