<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>风过明岚,雁过留痕 &#187; Computer</title>
	<atom:link href="http://blog.kingse.org/category/computer/feed" rel="self" type="application/rss+xml" />
	<link>http://blog.kingse.org</link>
	<description>杂七杂八,想啥说啥</description>
	<lastBuildDate>Fri, 07 Oct 2011 03:31:51 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>CxImage库Resample函数插值优化</title>
		<link>http://blog.kingse.org/2011/09/410.html</link>
		<comments>http://blog.kingse.org/2011/09/410.html#comments</comments>
		<pubDate>Wed, 14 Sep 2011 00:04:26 +0000</pubDate>
		<dc:creator>coolspace</dc:creator>
				<category><![CDATA[Computer]]></category>
		<category><![CDATA[Bicubic]]></category>
		<category><![CDATA[bilinear]]></category>
		<category><![CDATA[CxImage]]></category>

		<guid isPermaLink="false">http://blog.kingse.org/?p=410</guid>
		<description><![CDATA[最近用了下图像操作库cximage。这库不错，免费开源。修改下bcb，vc都能用。 唯一的主要毛病可能就算是优化不给力了。 使用中，对其resample函数的插值算法尤其头痛，随便一个pdg图像，200%缩放，花费10-20s是常事。因此不得不硬着头皮对其进行优化。 优化中能想起来的使用过 定点替换浮点，循环展开，区域缓存，查表等等。 优化后效果还不错。 bicubic 24bit图像能实现2178&#215;2976 2倍放大耗时 1.8s左右 bicubic 1bit 图像能实现2178&#215;2976 2倍放大耗时 2.6s左右 bilinear 24bit图像能实现2178&#215;2976 2倍放大耗时 0.78s左右 bilinear 1bit 图像能实现2178&#215;2976 2倍放大耗时 1.31s左右 以上测试数据基于T6400 CPU，优化基于cximage 7.02. 当然肯定还有优化空间，例如源码进一步优化以及mmx，sse优化等等，不过暂时本人是没啥辙了，能力有限，只能到这个地步。 这里贴出改过之后的ximatran.cpp PS：KernelBSpline函数也改成了定点版本，所以这个函数需要自己去改下，不在ximatran.cpp里 修改后的ximatran.cpp]]></description>
		<wfw:commentRss>http://blog.kingse.org/2011/09/410.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>CxImage bicubic插值算法优化</title>
		<link>http://blog.kingse.org/2011/09/409.html</link>
		<comments>http://blog.kingse.org/2011/09/409.html#comments</comments>
		<pubDate>Tue, 06 Sep 2011 01:57:51 +0000</pubDate>
		<dc:creator>coolspace</dc:creator>
				<category><![CDATA[Computer]]></category>
		<category><![CDATA[Bicubic]]></category>
		<category><![CDATA[CxImage]]></category>

		<guid isPermaLink="false">http://blog.kingse.org/?p=409</guid>
		<description><![CDATA[CxImage是个好东西，开源，支持图片种类多，操作花样多，如果非要说缺点的话，那估计只有1个，效率低下，尤其某些图形处理算法效率更低，无任何优化。 这里说到的是CxImage的bicubic插值算法的优化。 Bicubic插值，对与目标图形的某个点，需要其源图像对应点周围的16个点参与计算，因此计算量很大，并且还是浮点运算。 就优化而言，有多种途径，浮点转定点，浮点数转整数，sse等。这里说到的优化方法是浮点转定点，浮点数转整数。 基本思想是，用整数近视替代浮点数，精度是1/256，即将任一浮点数向精度1/256的整数倍靠近，之后计算bicubic函数的权重数据，存到表格里。bicubic插值时查表即可。 CxImage的原bicubic插值函数片段是 // float f_x, f_y, a, b, rr, gg, bb, r1, r2; // int32_t i_x, i_y, xx, yy; // RGBQUAD rgb; // uint8_t* iDst; // for(int32_t y=0; y&#60;newy; y++){ // info.nProgress = (int32_t)(100*y/newy); // if (info.nEscape) break; // f_y = (float) y * yScale - 0.5f; // i_y = (int32_t) [...]]]></description>
		<wfw:commentRss>http://blog.kingse.org/2011/09/409.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>EndNoteRenamer2 sourcecode</title>
		<link>http://blog.kingse.org/2011/05/406.html</link>
		<comments>http://blog.kingse.org/2011/05/406.html#comments</comments>
		<pubDate>Wed, 25 May 2011 15:50:54 +0000</pubDate>
		<dc:creator>coolspace</dc:creator>
				<category><![CDATA[Computer]]></category>
		<category><![CDATA[Study]]></category>
		<category><![CDATA[EndNote]]></category>
		<category><![CDATA[Plugin]]></category>

		<guid isPermaLink="false">http://blog.kingse.org/?p=406</guid>
		<description><![CDATA[最开始写这个插件主要目的是为了满足自己在使用EndNote过程中的不便，目前为止已经满足了我的需求，也就没啥可升级的了。正好也没啥空闲时间继续折腾这个了。这里放出源代码。大家随意参考使用，如分发源码希望注明原始作者。 下载链接： 点我下载 EndNoteRenamer2 plugin for endnote windows version &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;- E-Mail: coolspace#qq.com http://blog.kingse.og &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;- &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212; IMPORTANT NOTE: This software is provided &#8216;as-is&#8217;, without any expressed or implied warranty. Permission is granted to anyone to use this source for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following [...]]]></description>
		<wfw:commentRss>http://blog.kingse.org/2011/05/406.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>EndNoteRenamer ver 2.0 released</title>
		<link>http://blog.kingse.org/2011/02/405.html</link>
		<comments>http://blog.kingse.org/2011/02/405.html#comments</comments>
		<pubDate>Wed, 09 Feb 2011 14:43:30 +0000</pubDate>
		<dc:creator>coolspace</dc:creator>
				<category><![CDATA[Computer]]></category>
		<category><![CDATA[Study]]></category>
		<category><![CDATA[EndNote]]></category>
		<category><![CDATA[EndNoteRenamer]]></category>

		<guid isPermaLink="false">http://blog.kingse.org/?p=405</guid>
		<description><![CDATA[好久没写过新日志了。。。。惭愧 以新版本的EndNoteRenamer来代替日志吧。 下载链接 ChangeLog: 相比1.5，做了以下调整 1、核心更新，重命名规则由之前的单一设置，统一为选取EndNote的output style方式，利用此方式，可以很方便的扩充想要支持的记录类型，例如book，journal article等。 2、校验output style 输出字串的长度，满足windows平台上 文件名全名 &#60;= 256的限制，如果输出长度超过此值，则该记录不会更改。（解决之前版本在fat32分区上容易出现的文件消失现象） 3、Other small improvements. 注： 1、由于从此版本开始，命名规则改由output style提供，因此需要注意output style的选取，output style选取不当，会照成无法重命名，最好自己新建style。附件中我提供了一个自己的实例，大家可以在这基础进行更改，得到合适自己的style。另外由于EndNote的bug，style必须放在endnote安装目录的styles文件夹中。 2、如使用过上一版本，那么需要删除plugins目录下的Endnoterenamer.dll和EndNoteRenamer.ini。以防和新版本冲突。 3、推荐初次使用前，备份数据库(直接copy记录和相应的文件夹)，然后设置规则后，用插件进行重命名尝试，如无其他问题，再进行使用，毕竟数据才是第一位的。   4、关于bug反馈，最好说明系统版本，endnote版本，数据库所在盘文件系统格式，同时如有 出错数据库的备份(就是出错数据库的原始记录，而非出错以后的记录)更好。 压缩包中自带的style的具体命名规则如下图]]></description>
		<wfw:commentRss>http://blog.kingse.org/2011/02/405.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>EndNote插件EndNoteRenamer发布~~[原创]</title>
		<link>http://blog.kingse.org/2010/11/400.html</link>
		<comments>http://blog.kingse.org/2010/11/400.html#comments</comments>
		<pubDate>Sun, 21 Nov 2010 13:59:46 +0000</pubDate>
		<dc:creator>coolspace</dc:creator>
				<category><![CDATA[Computer]]></category>
		<category><![CDATA[Study]]></category>
		<category><![CDATA[EndNote]]></category>
		<category><![CDATA[EndNoteRenamer]]></category>

		<guid isPermaLink="false">http://blog.kingse.org/?p=400</guid>
		<description><![CDATA[EndNote是个好东西。尤其是FindFullText 但是FindFullText默认下回来的文件的命名规则实在是难看，基本上脱离了endnote，没有任何文献管理的便利可言。 同时，你是否相对现有记录的全文进行批量重命名？ 本插件EndNoteRenamer满足以上的需求。 插件版本：v1.5 插件作者：coolspace 插件功能：根据规则批量重命名全文，包括pdf文件名及文件路径 插件授权：Free 下载地址：http://files.kingse.org/EndNoteRenamer.rar 免责申明：插件未做大规模测试，注意备份 致谢：插件基于WTL,TinyXML，RDK构建，UPX压缩，对WTL,TinyXML，RDK,UPX的贡献者致以崇高的敬意 未来规划：。。。待定，看兴趣 使用说明： 1、将插件dll放入endnote的plugins文件夹，启动endnote，会看到tools菜单下会多出两个endnoterenamer的菜单项。进入config，设定命名规则，命名规则是全文pdf的文件名部分(不包括扩展名)，文件夹名自动设置为文件名+一串数字 2、选中需要重命名的记录，点击rename菜单项进行重命名。 如有bug，欢迎反馈。]]></description>
		<wfw:commentRss>http://blog.kingse.org/2010/11/400.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>在dll中嵌入WTL窗体</title>
		<link>http://blog.kingse.org/2010/11/398.html</link>
		<comments>http://blog.kingse.org/2010/11/398.html#comments</comments>
		<pubDate>Thu, 18 Nov 2010 06:11:26 +0000</pubDate>
		<dc:creator>coolspace</dc:creator>
				<category><![CDATA[Computer]]></category>
		<category><![CDATA[dll]]></category>
		<category><![CDATA[WTL]]></category>
		<category><![CDATA[窗体]]></category>

		<guid isPermaLink="false">http://blog.kingse.org/?p=398</guid>
		<description><![CDATA[WTL全称Windows Template Library，是基于模板的window界面库，架构在ATL只上，由于其基于模板，没有MFC那么多继承以及相互引用，因此静态链接出来的exe十分短小精悍。WTL自带app wizard,但是这个app wizard仅支持生成exe型的应用程序，而不支持生成嵌入WTL窗体的dll。 经过摸索，并查阅wtl新闻组上的相关资料，最终有了下面的在dll中嵌入wtl窗口的例子。例子很简单只导出了一个函数ShowDlg，调用这个函数会生成一个模态的对话框。 源码如下： DLL中嵌入WTL窗体简单示例]]></description>
		<wfw:commentRss>http://blog.kingse.org/2010/11/398.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[原创]delphi dcu逆向编译漫谈</title>
		<link>http://blog.kingse.org/2010/09/385.html</link>
		<comments>http://blog.kingse.org/2010/09/385.html#comments</comments>
		<pubDate>Sat, 04 Sep 2010 11:58:50 +0000</pubDate>
		<dc:creator>coolspace</dc:creator>
				<category><![CDATA[Computer]]></category>
		<category><![CDATA[dcu]]></category>
		<category><![CDATA[decompile]]></category>
		<category><![CDATA[delphi]]></category>

		<guid isPermaLink="false">http://blog.kingse.org/?p=385</guid>
		<description><![CDATA[提起这个话题，主要是从前不久自己的一次实际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的过程中的经验做下总结。 一、工具，俗话说欲善其事，必先利其器： dede——优秀的delphi反编译工具，并且自带dcu反编译器dcu32int dcu2pas——国内作者编写的dcu反编译器，这里既然有了dede，我还要提及他的主要目的是因为dede中的dcu32int在函数参数识别上有很大的不足，例如无法区分var参数和out参数，同时无法区分const参数等等。但是dcu2pas可以。但是dcu2pas无法在反汇编代码中无法用参数名代替偏移量。所以dcu2pas和dede可以互补使用 IDA与hexrays——这是现在搞逆向破解人的必备工具之一，ida的强大的反汇编以及调试功能和hexrays的强大的反编译功能可以大大的节省逆向的成本 delphi——这里delphi的作用是在代码初步逆向完成后，用delphi编译后，进行源码级别对比，进行排错时需要用到的。 二、dcu逆向的一般步骤： 1、用dede或者dcu2pas反编译dcu文件，取得所有类型声明以及类声明和函数原型，对照这些结果，给出dcu所对应的pas文件的完整类型声明，类声明，函数声明等。 2、用delphi编译一个使用此控件的exe，之后用ida反编译。留作将函数逆向为源码时所用 3、依次阅读dede给出的dcu反编译结果中每个函数的汇编代码，并采用二进制字串搜索方法在IDA中定位出这个函数，之后相互参照dede的结果和IDA的结果，对函数参数进行命名，这里需要提及的是，dcu中连函数内部参数的参数名和类型信息都有保存，因此对照dede结果可以很方便的对IDA的结果进行信息补充，并最终参照Hexrays插件给出的伪代码，写出大致的函数源码。 4、在完成所有函数的汇编代码向源码转换的过程之后，对逆向出来的源码进行编译，注意，编译参数要与原始的dcu完全一致，例如f-in-box控件的demo版用的是debug编译，没有优化，因此我们对源码也采取这种方式进行编译。 5、用dede反编译 我们通过逆向dcu得到的pas文件的编译得到的dcu文件，并将结果与原始dcu的反编译结果进行比较，关于比较，这里推荐editplus编辑器，用其去掉反编译结果中的一些注释之后，可以直接用winhex的文件比较结果进行分段比较，快速的定位哪些函数反编译出来的和原始的不一样。之后一一修正这些函数。 6、多次重复5步骤，直到最终原始dcu和我们自己编译出来的dcu没有实质上的差别后，就可以进行后续处理了。 7、逆向结果的后续处理，众所周知，delphi历史版本很多，仅广泛使用的就有delphi7，delphi2007，delphi2010等版本，并且每个版本的dcu文件格式以及vcl和rtl都有一定差别。因此每个控件实际上在发布的过程中都会发布对应各个版本的dcu。这最后一步就是需要对比各个不同版本delphi使用的控件的dcu文件的不同之处，并用条件编译语句在逆向出来的代码中体现出来。拿f-in-box控件来说，其中最明显的是和tstream相关的函数，delphi5之前tstream函数的size之后integer，也就是4个字节，但是delphi5之后的版本，size是int64，也就是8个字节，因此在控件中delphi5之前的版本和之后的版本，和此相关的函数都有不小的差别，这点对比delphi4或delphi5用的dcu和delphi7用的dcu就能看出来。后续处理的另外一部分内容是尽量还原出控件原始的条件编译指令，这点比较难，也比较麻烦，因为dcu中压根就没这部分信息，那我们怎么办呢？靠猜和结合控件安装包里面定义的预编译指令进行处理。一般逆向编译可以不考虑此部分，如果 有“洁癖”，可以尝试按照此法进行处理。 三、结语： 以上大致给出了逆向编译一个dcu到pas文件的步骤概要以及其所用到的一般工具。这里关于第5步的比较不同并修正的时候，就需要有不少经验的积累了。举个例子，一般的delphi函数中如果用到的string类型的变量作为参数，那么在函数的汇编代码的开始时，肯定有对这个string的引用数进行+1的函数调用，也就是addref，体现在反编译结果中，一般是“call    System.@LStrAddRef”或者“call    System.@WStrAddRef”，具体是哪个取决于是ansistring还是widestring，如果在某个用到了string类型的参数的delphi函数的汇编代码中没有addref，那么就要考虑，这里的string类型的参数是否用const修饰了。const修饰后的string类型的参数编译后，函数内部一般是不会出现addref调用的。 另外，虽然理论上，任何一个delphi的dcu都能理想成员吗，但这里就涉及到一个逆向成本的问题，我所逆向的f-in-box控件只有一个pas文件，代码集中，所以便于处理，如果是多个pas文件，那么劳动量就要加大了，只能依次处理。]]></description>
		<wfw:commentRss>http://blog.kingse.org/2010/09/385.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>内存中载入DLL并执行(C代码，兼容vc,bcb)</title>
		<link>http://blog.kingse.org/2010/08/381.html</link>
		<comments>http://blog.kingse.org/2010/08/381.html#comments</comments>
		<pubDate>Tue, 10 Aug 2010 06:59:27 +0000</pubDate>
		<dc:creator>coolspace</dc:creator>
				<category><![CDATA[Computer]]></category>
		<category><![CDATA[dll]]></category>
		<category><![CDATA[内存]]></category>

		<guid isPermaLink="false">http://blog.kingse.org/?p=381</guid>
		<description><![CDATA[系统载入dll的整体过程可以分为以下几个步骤： 1、将dll文件内容载入内存，并按照对齐粒度进行对齐并设置对应的各个内存区间的权限属性； 2、如果dll有重定位表，则进行重定位操作； 3、填充dll的导入表； 4、用ATTACH参数调用dll的入口函数进行初始化，之后返回imagebase即可。 因此了解了系统载入dll的整体流程，也就可以自己实现将dll载入内存并执行，这种方法对于加密等有一定意义。 但由于自己载入内存后，系统api GetProcAddress函数失效，因此在自己实现loadlibrary函数的同时必须自己实现此函数。 下面附上参考网上现有代码原理后写的代码。 进过少量测试，暂未发现bug，如发现bug，欢迎提出。 DLLLoader.h文件内容如下 //--------------------------------------------------------------------------- &#160; #ifndef DLLLoaderH #define DLLLoaderH &#160; #ifdef __cplusplus extern &#34;C&#34; &#123; #endif &#160; #include &#60;stdio.h&#62; #include &#60;windows.h&#62; //--------------------------------------------------------------------------- &#160; //public functions &#160; DWORD LoadDllFromMemory&#40;LPVOID lpBuffer,__int64 BufferSize&#41;; DWORD FreeDllFromMemory&#40;LPVOID lpBaseAddress&#41;; FARPROC GetDllProcAddress&#40;LPVOID imagebase,char * FuncName&#41;; &#160; // private functions &#160; DWORD AlignDllToMemory&#40;LPVOID lpBuffer,PIMAGE_DOS_HEADER &#38;dosHeader,PIMAGE_NT_HEADERS [...]]]></description>
		<wfw:commentRss>http://blog.kingse.org/2010/08/381.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

