delphi程序优化至500字节

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

编译最小的delphi程序500字节下

载:/article.asp?articleid=4668

0.VCL的力量

1.KOL的力量

2.自修改核心库

3.导入表的优化

4.进一步优化

[0].VCL的力量...

这里我说的VCL不是说窗体VCL...例如SysUtils,Classes等单元也都是属于VCL部分

system,sysinit也是属于吧?我也不太清楚,这两个单元是Delphi默认加载的... 想取消不编译到工程中...不在本章讨论范围中

给各位的建议是...除了system,sysinit以外的Delphi自带VCL单元都不要使用...

system中其实已经有许多函数了...

由于这两个单元是默认的所以想不用也没办法...

复制内容到剪贴板

代码:

program Project1;

uses

Windows;

begin

MessageBox(0, 'Hello World!', 'By Anskya', 0);

end.

写下以下代码,编译后...15k For Delphi7(Delphi 6 这份代码编译出是8k)

为什么这么大?和VC一样的原因,系统默认库,编译器底层干了许多不为人所知

的事情

看看导入表...

看到没有?除了user32和kernel32,还有advapi32??还是操作注册表函数.

我们并没有操作注册表呀?

IDA逆向分析一下发现是读取

复制内容到剪贴板

代码:

unknown_libname_13 proc near

cbData= dword ptr -0Ch

Data= byte ptr -8

hKey= dword ptr -4

push ebp

mov ebp, esp

add esp, 0FFFFFFF4h

movzx eax, ds:word_40400C

mov dword ptr [ebp+Data], eax

lea eax, [ebp+hKey]

push eax ; phkResult

push 1 ; samDesired

push 0 ; ulOptions

push offset SubKey ; "SOFTWARE\\Borland\\Delphi\\RTL"

push 80000002h ; hKey

call RegOpenKeyExA

test eax, eax

jnz short loc_402A84

.

.

.

好了这个就是大家平时所编译的Delphi最小化程序...

[1]KOL的力量

KOL是俄罗斯的一群Delphi fans有感于VCL的庞大而创造的一个framework工程

内部与VCL一样包含了大量的窗体等等操作封装的控件...不熟悉的朋友

可以去官方主页上看一下KOL+MCK,官方主页:/

我们这里主要使用到的是KOL的sysdcu库.这个是一个优化的核心库.Delphi7优化的很好

还是上面的代码我们进行优化设置...使用指定的核心库

菜单选择->Project->Options->Directories/Conditionals-Search path

在这个选项中选择核心库的位置(其实一般也是用于设置..控件的源代码或者dcu路径)

设置好编译后 5.5k

查看导入表发现,居然只有kernel32和user32这两个库...

体积居然缩减了这么多

其实仔细对比一下system.pas就可以发现其中的奥秘

许多不必要的函数操作单元函数和过程被取消掉了...

下场非常悲惨(比如几个函数都没办法用了...Write,Writeln函数等等Readln 函数等)

不过对于写Windows程序来说不大.KOL库中有专门的console函数

是不是想说什么?配合VCL试试?我建议大家放弃这个想法,因为VCL本身需要这些不知名和知名

的一些函数和声明,不信你可以试试编译一下~Delphi就会大量提示你编译错误,

VCL本身需要的东西都被优化掉了...

好了继续我们的优化之旅

[2]自修改核心库

看完上面的两个试验后是不是有感,user32是我们需要的那个函数,但

是..kernel32中还是有

大量的我们不需要的函数...

是的,kol虽然进行的优化,但是他必须保证一些基本的操作函数存在

例如string...string这个类型以后的其他文章我会详细介绍的...

string的暗藏操作也是许多的.和MFC的CString其实差不多~类似的性质而已只是string做的很好让许多人误认为那个就是一个字符串类型...

关于取舍问题在这里我就不多废话了...说说优化吧...

对于我们来说string也是不需要的因为我们有了PChar(别说不知道是什么其实就是char *)

由于我们要最终打造一个只有一个迷你化的库,迷你到什么程度?

需要什么函数他就给我们保留什么函数其他的什么都不需要.好的为了这个目的我们继续

相信有些人看过潘爱民老师的Delphi源码分析这本书,说实话我没有看过,

只是在CSDN上看了一下目录,发现其中的许多东西都是大家应该知道的常识

自己穷也没钱买,Google可以搜一下电子版(电子版我也没有.太懒~有时间我宁可看漫画)

文中提到Nico大牛的MiniDExe这个自己优化的迷你EXE演示

/SoftView/SoftView_1011.html

我们来看一下基本的代码.其实system,sysinit中的代码已经被删除的差不多了

只保留了最基本的...

复制内容到剪贴板

代码:

unit SysInit;

interface

var

TlsIndex: Integer;

TlsLast : Byte;

PtrToNil: Pointer;

相关文档
最新文档