1.å¦ä½äº¤åç¼è¯perl
2.perlå®ç½ä¸binariesåsourceçåºå«
3.服务器技术之Perl语言的源码库
4.perl如何避免反编译
å¦ä½äº¤åç¼è¯perl
å ä¸è½½Perlæºç ï¼/projects/perlcross.berlios/files/ï¼ ä¸è½½çæ¬æ¯ï¼perl-5..0-cross-0.3.tar.gzåå«è§£åè¿ä¸ªæ件å°åä¸ä¸ªç®å½ä¸ï¼
1å¨ubuntuä¸å®è£ perlbrewï¼
sudo apt-get install perlbrewperlbrew init
source ~/perl5/perlbrew/etc/bashrc
perlbrew install perl-5..1
23
4
5
çå¾ perlbrewå®è£ å®æ¯ï¼
23
1
å并 两个解ååºæ¥çperlç®å½,è¿å ¥perl-5..1çCrossç®å½ä¸ï¼
cp -rfv perl-5..0/* perl-5..1/cd perl-5..1/Cross
21
æ件å 容å¦ä¸æ³¨æå äºæå·çå 容ï¼
### Target Arch** ARCH = arm
**#ARCH = i-pc
#ARCH = sh4
#ARCH = mips
#ARCH = mipsel
#ARCH = ppc
## Specific arm
**#CONFIG_TARGET_ARM_SAX0 = 1
**#CONFIG_TARGET_ARM_XSCALE = 1
### Target OS
**OS = linux
**#OS = solaris2.8
1ä¿®æ¹perlçconfigæ件
gedit Cross/config ##æè vi gedit Cross/config 23
4
5
6
7
8
9
ä¸é¢å ç²åä½è¡¨ç¤ºæ³¨æçæè ä¿®æ¹çï¼
ä¿®æ¹å½åç®å½ï¼Crossç®å½ï¼ä¸çMakefileæ件ï¼
å æ¹åä¸ä¸ç®å½å 容çæéï¼
chmod /Cross/
*ä¿®æ¹çMakefileæ件å 容ï¼
export TOPDIR=${ shell pwd}include $(TOPDIR)/config
export CFLAGS
** export SYS=arm-linux
**** export CROSS=/stuff/bitbake/bin/tmp/sysroots/i- linux/usr/armv7a/bin/arm-angstrom-linux-gnueabi-
**** export LD_LIBRARY=/stuff/bitbake/bin/tmp/sysroots/i-linux/usr/lib:$(LD_LIBRARY_PATH)
**export FULL_OPTIMIZATION = -fexpensive-optimizations -fomit-frame-pointer -O2
export OPTIMIZATION = -O2
export CC = arm-angstrom-linux-gnueabi-gcc
export CXX = arm-angstrom-linux-gnueabi-g++
export LD = arm-angstrom-linux-gnueabi-ld
export STRIP = arm-angstrom-linux-gnueabi-strip
export AR = arm-angstrom-linux-gnueabi-ar
export RANLIB = arm-angstrom-linux-gnueabi-ranlib
make CC=arm-angstrom-linux-gnueabi-gcc ARCH=arm patch
make CC=arm-angstrom-linux-gnueabi-gcc ARCH=arm perl
ç¼è¯ä¼åºéï¼ä½æ¯æ²¡å ³ç³»ï¼ä¼å¨æ ¹ç®å½çæperlå¯æ§è¡æ件ï¼
perlå®ç½ä¸binariesåsourceçåºå«
binariesâäºè¿å¶æ件âçææSourceâæºâçææå³ï¼binariesæ¯é¡¹ç®å¼åæ¶ä½¿ç¨æ件ï¼sourceæ¯æºç çææï¼ä¹å°±æ¯å¯ä»¥æ¥çå°æºæ件æºç ï¼æå©äºæ´å¥½çç解ãè³äºsourceä¹å°±æ¯ç»éªä¸°å¯çå èè½çæç½ï¼ä¸è¬æ们åªä½¿ç¨binariesæ件ã
服务器技术之Perl语言的库
服务器技术之Perl语言的库
Perl支持对源代码的共享,通用于程序司以存放在文件中,源码并在程序中进行调用,源码这操作要通过require语句来实现,源码其格式如下:
require”cgi-lib.pl”:
它类似丁C语击中的源码#include预处理。Perl在查找源文件时,源码牌源码首先搜索缺省的源码库日录,然后搜索当前目录,源码也可以采用绝对路径指定文件名中的源码路径信息。
通过require函数的源码机制,可以把程序分割成多个文件并分别编写,源码以创建函数库。源码飘带软件源码例如,源码在filel.pl中自定义好的源码Perl函数,现需要在file2.pl中使用该函数,源码可以用语句require(”filel.pl“)将它包含进来。当Perl中解释器执行到这一语句时,就在指定的目录中寻找文件filel.pl,
如果找到则执行文件中的语句,否则程序终止并输出错误信息。
Perl中还支持包的概念。在Perl中,程序把变量和子程序的名称存储到符号表中,这个符号表中的qt 源码 实例变量和子程序的集合就称为包(package)。在一个程序中可以定义多个包,每个包有一个单独的符号表,它定义的格式为:
package
packname;
此语句定义个名为packname的包。在程序中,这个包定义语句以后的所有定义的变量和子程序名字,它们都存储在与该包关联的符号表中,直到遇到下一个package
语句为止。这样定义的好处是,与每个包相关的符号表有其自己的变量、子程序名空间,各个包中的php源码 apache变量是不相关的,因此可以在不同的包中使用相同的变量,而不会发生冲突。
在一个包中可以引用其它包中定义的变量或子程序,办法是在变量名前而加上包名和一个单引号。如:
$packname'var;
在Perl中还支持模块,模块就是包含了变量和子程序的程序集合。使用use语句可以将已经存在的模块导入程序中,其格式如下:
use
module:
它导入了module模块,这样在模块module中定义的子程序和变量就可以使用了。取消导入的模块使用no语句,其格式为:
no
mnodule;
它将取消module模块的竟拍源码导入。
Perl
5提供了些预定义模块,叫以用use导入并使用,下面是库中常用的一些模块:
Integer
整数运算模块
Diagnostics
诊断信息模块
Env
环境变量模块
POSIX
POSIX标准接口模块
Socket
网络套接字处理模块
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直接就对我的程序编译不通过,没戏唱了。{ ..更新:找到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-之类的临时文件夹,打开看看可以发现就是自己的源代码。这样不是没达到我想要的隐藏源代码的目的么?原来还需要启动过滤器:
$pp -f Bleach -o hello hello.pl
或者
$pp -f Bytecode -o hello hello.pl
前面的Bleach过滤器是PAR自己实现的,而Bytecode这种过滤方式是Perl的标准格式(需要Perl
5.8.1以上版本支持)。过滤之后,临时文件夹里面的文件就不是简单可读了。当然是有办法crack,
但这和恢复带初始变量名的源代码是两回事。