Perl程序的打包和一个奇才

| | 评论(8)

我大概是用Perl写程序的人里头很怪的一个。大部分人都是用Perl写网站程序,可是我是用它来开发应用程序。大部分人都不害怕暴露他们的Perl源代码,可是我得保护我的源代码。不管这听起来有多荒谬,事实就是如此。

为了保护Perl源代码,常用的有三种方法。
1. 使用Perl自带的perlcc工具。这个工具有一个最大的弱点:它只能作用于一个perl文件。假如你和我一样写了十几二十几个perl包,主程序里倒是空空如也,估计要郁闷死。用也是可以用的,就是要把所有的源代码copy到一个文件,取消所有的package定义,把原来不同package下面同名的函数改名,不同的package里面的同名全局变量也要改名。然后
$perlcc -o hello hello.pl
得到可执行程序hello. Perlcc的原理是把perl程序转换成C程序,然后用GNU C编译器编译。它在Windows上也可以用,但需要额外安装C编译器,比如Intel C或者MS Microsoft Visual C。由于perlcc把代码先变C再变可执行程序,反编译出来的源码很难看懂,所以安全性很高。但是把所有的代码写一个文件,模块也不能用了,这简直是从地铁时代回到乌蓬船时代,我想不会有人觉得舒服。何况这样混杂后的代码该如何维护升级和做版本控制呢,头大。另外,perlcc有申明,不保证它编译出来的东西能用(参见$perldoc perlcc)。我没遇到这个情况,而是遇到了perlcc直接就对我的程序编译不通过,没戏唱了。{2006.12.15更新:找到perl不能编译我的程序的原因了:1. 只能用use 不能用require,模块文件名的后缀都改成.pm, use后跟不带后缀的文件名就可以。2. 所有的全局数组,必须用my, our, 或者local来定义,不可以用缺省作用范围。第二点其实应该是perlcc的一个bug了,因为关联数组和简单变量都没有这个问题。}

2. perl2exe,据说很好用,但令人沮丧的是要license, 而且据说跨平台还有问题。

3. PAR(Perl Archive Toolkit)。这个命名法则是类似于JAR(Java Archive)。下载下来以后还要从CPAN上下载一些依赖性模块。CPAN模块果然好装,每个模块都是
$perl Makefile.PL
$make
$make install
就能装好。最后安装PAR。装好以后会在/usr/bin/下面添加一些工具。我不关心别的,就要用pp:
$pp -o hello hello.pl
这样生成的hello就是可执行文件,而且把用到的perl模块文件也全打包进来了。运行的时候它会在/tmp/par-username/下生成一个叫cache-123456789之类的临时文件夹,打开看看可以发现就是自己的源代码。这样不是没达到我想要的隐藏源代码的目的么?原来还需要启动过滤器:
$pp -f Bleach -o hello hello.pl
或者
$pp -f Bytecode -o hello hello.pl
前面的Bleach过滤器是PAR自己实现的,而Bytecode这种过滤方式是Perl的标准格式(需要Perl 5.8.1以上版本支持)。过滤之后,临时文件夹里面的文件就不是简单可读了。当然是有办法crack, 但这和恢复带初始变量名的源代码是两回事。

* * * * * *
PAR这个工具很好用,出于景仰之情我看了一下作者,是一个叫Audrey Tang的人。看起来是一个华人,而且还是女性,在软件世界里很少见。于是我多事google了一下。原来她1981年出生,在Perl世界里却是个鼎鼎有名的人物,她在CPAN上维护的模块数量一直排名前列;此外还是有名的hacker。据说她初中就退学,能讲流利的汉语普通话和英文,做软件完全是靠自学成才。所有在网上找到对她的评价往往都是“极聪明”、“很有激情”、“有个性”、“博闻强记”等用于天才身上的词。我对她的一个作品印象最强烈,就是Perl文言文编程模块。谁能想到这样的Perl程序源代码?

#!/usr/local/bin/perl
use Lingua::Sinica::PerlYuYan;
用警兮用嚴。
印道
1..1
哉兮

印編曰雜申雜申矣
 又曰ok矣
   又曰1矣

亂曰
國無人莫我知兮 又何懷乎故都
既莫足與為美政兮 吾將從彭咸之所居

最令人惊讶地是,她出生之时本为男儿身,名叫唐宗漢,很男子汉气概的名字啊。2005年底他变性成为女性,名字改为唐鳳,英文名字从Autrijus Tang变为Audrey Tang。「唐鳳」在她的blog中把变性一事用“runtime type-casting"来形容,我真被这个小幽默逗笑了。她还贴出了自己的新照片。--很令人惊讶的一个人啊,不过我一向觉得天才往往会做出更多令人惊讶的选择,如果她自己觉得开心,又干别人什么事呢。

最后,加一个八卦文章链接:“AudreyT被輕薄了”

分类

评论(8)

lingming :

会perl的话 在美国很好找工作
可惜我不会 哎 我连C都写不好 所以我快要待业了 5555

mach :

你不会待业的,现在电子行业好像又景气了耶

lingming :

我industry的experience几乎等于0. 所以job hunting过程中很不attractive.
我大概投乐qualcomm近10个position, 上周终于有个hiring manager搭理我乐. 几轮email, 最后一个让我写code. 其实挺简单的,用C写个program to display last 'n' lines of an arbitrary length of file. 我琢磨着估计我写的code不规范吧, 所以发去以后, 老印hiring manager就不搭理我乐. 真是frustrated.

danzhu :

狂晕狂晕!
看前面的时候我说怎么没听过这个名字,好歹我也用过一点perl啊。直看到唐宗漢这个名字!我也使用过他/她的模块呢! 真是奇人奇事啊!
也仰慕一下Mach的八卦精神。。。
没用过PAR,用过perl2exe和另外一个类似的,就是转出来的东西体积有点庞大,其他还好。

mach :

这个hiring manager不厚道么,你又不应聘软件。。。而且他出的这个题其实是蛮复杂的,有很多exception要handle,要想写到80分都困难。加油加油,这是他们的损失,会有更好的位置等着你的。

lingming :

讨教一下mach 有些啥exception要handle啊 我每次想这些exception都想不全面
现在不管啥职位 C是一定必须的 这个position是embedded system (UMTS)的
不见得考我matlab吧 这也没啥好考的

mach :

啊,硬件的职位也要C啊,这个世道真是奇怪啊
这个题目最麻烦的就是如何处理大文件,fopen()只能处理小文件,有一些类似的函数是做大文件用的,但是有OS相关性。我考别人嵌入式系统最喜欢考Nand flash file system的结构,哈哈是不是更不厚道。

Specialists say that credit loans help people to live the way they want, because they can feel free to buy necessary stuff. Moreover, a lot of banks present auto loan for all people.

发表评论


关于此日记

此日记由mach发表于November 13, 2006 9:34 PM

此Blog上的上一篇日记巧克力

此Blog上的下一篇日记折腾守恒定律与雅黑字体

主索引归档页可以看到最新的日记和所有日记。

Powered by Movable Type 4.23-en