当前位置: 首页 > news >正文

广州网站建设招标网站添加百度商桥

广州网站建设招标,网站添加百度商桥,做淘宝优惠网站步骤,百度商业账号登录这里的 AUTOLOAD可以理解为自动加载。具体来说就是,在正常情况下,我们不能调用一个尚未定义的函数(子例程)。不过,如果在未定义函数的包中有一个名为 AUTOLOAD的函数,那么对未定义函数的调用都会路由至这个…

这里的 AUTOLOAD可以理解为自动加载。具体来说就是,在正常情况下,我们不能调用一个尚未定义的函数(子例程)。不过,如果在未定义函数的包中有一个名为 AUTOLOAD的函数,那么对未定义函数的调用都会路由至这个 AUTOLOAD函数,并且会为该函数提供相同的参数。因此,我们可以在 AUTOLOAD函数里面针对未定义的函数进行特殊处理,比如实现未定义的函数,然后调用该函数,就好像这个函数一直都存在一样。

比如,下面的示例程序会在你调用未定义函数时发出警告,而不是直接退出:

#!/usr/bin/env perlsub AUTOLOAD {our $AUTOLOAD;warn "You attempt to call an undefined function: $AUTOLOAD\n";
}&foo; # $AUTOLOAD will be set to main::foo
print "Exit normally ...\n"

运行结果如下所示:

$ ./autoload.pl 
You attempt to call an undefined function: main::foo
Exit normally ...

下面是一个更加实用的例子,即我们在 AUTOLOAD中实现未定义的函数:

#!/usr/bin/env perlsub AUTOLOAD {my $name = our $AUTOLOAD;*$AUTOLOAD = sub { print "calling function $name(@_)\n"; };goto &$AUTOLOAD;
}foo(30);
goo(40);
hoo(50);

运行结果如下所示:

$ ./autoload_2.pl 
calling function main::foo(30)
calling function main::goo(40)
calling function main::hoo(50)

OpenSSL项目中的很多地方都有用到 perl语言,它主要负责项目建构和汇编代码的生成工作。其中,在生成加解密算法汇编优化代码的 perl脚本中,有很多架构都用到了 AUTOLOAD机制去简化汇编指令的书写。下面看一个 OpenSSLx86实现的例子,从 crypto/chacha/asm/chacha-x86_64.pl文件中节选出如下代码:

#!/usr/bin/env perlsub AUTOLOAD()          # thunk [simplified] 32-bit style perlasm
{ my $opcode = $AUTOLOAD; $opcode =~ s/.*:://;my $arg = pop;$arg = "\$$arg" if ($arg*1 eq $arg);$code .= "\t$opcode\t".join(',',$arg,reverse @_)."\n";
}@x=("%eax","%ebx","%ecx","%edx",map("%r${_}d",(8..11)),"%nox","%nox","%nox","%nox",map("%r${_}d",(12..15)));
@t=("%esi","%edi");sub ROUND {                     # critical path is 24 cycles per round
my ($a0,$b0,$c0,$d0)=@_;
my ($a1,$b1,$c1,$d1)=map(($_&~3)+(($_+1)&3),($a0,$b0,$c0,$d0));
my ($xc,$xc_)=map("\"$_\"",@t);
my @x=map("\"$_\"",@x);("&add   (@x[$a0],@x[$b0])",     # Q1"&xor   (@x[$d0],@x[$a0])","&rol   (@x[$d0],16)","&add  (@x[$a1],@x[$b1])",     # Q2"&xor  (@x[$d1],@x[$a1])","&rol  (@x[$d1],16)","&add   ($xc,@x[$d0])","&xor   (@x[$b0],$xc)","&rol   (@x[$b0],12)","&add  ($xc_,@x[$d1])","&xor  (@x[$b1],$xc_)","&rol  (@x[$b1],12)",)
}foreach (&ROUND(0, 4, 8,12)) { eval; }
foreach (&ROUND(0, 5,10,15)) { eval; }print "$code\n";

从上面的代码可以看到,表面上,add()xor()rol()这些函数并没有被声明和实现,但该脚本定义了 AUTOLOAD函数,并在 AUTOLOAD函数中进行了统一的处理,比如,将 &add(xx, yy)函数调用转换为了 add yy,xx指令字符串。
因此,上述脚本的运行结果如下所示:

$ ./autoload_3.pl add	%r8d,%eaxxor	%eax,%r12drol	$16,%r12dadd	%r9d,%ebxxor	%ebx,%r13drol	$16,%r13dadd	%r12d,%esixor	%esi,%r8drol	$12,%r8dadd	%r13d,%edixor	%edi,%r9drol	$12,%r9dadd	%r9d,%eaxxor	%eax,%r15drol	$16,%r15dadd	%r10d,%ebxxor	%ebx,%r12drol	$16,%r12dadd	%r15d,%esixor	%esi,%r9drol	$12,%r9dadd	%r12d,%edixor	%edi,%r10drol	$12,%r10d
http://www.yayakq.cn/news/803708/

相关文章:

  • 建设一个功能简单的网站手机网站设计手机壳尺寸一览表
  • 淄博手机网站建设报价电商网站开发人员人数
  • 食品网站建设 网站定制开发外贸网站 模板
  • 制作网站要花多少钱如何三河市建设厅公示网站
  • cms建站流程天津网站建设方案外包
  • 缘魁上海网站建设有没有专门做策划的公司
  • 网站建设公司黄页北京高端品牌网站建设
  • 公司网站开发费用计入哪个科目长春网站开发公司
  • 做起点说网站的服务器多少钱建设网站之前都需要准备什么东西
  • 网站内容建设整改工作网站建设公司的网站
  • 网站图标怎么换展厅装修设计公司有
  • 怎么让网站绑定域名沛县网络营销是什么
  • 在英特尔上建设网站可选择的方案有wordpress分类目录进不去
  • 网站建设与管理难学吗进口跨境电商网站制作
  • 给网站做网站基本配置
  • 浙江省住房城乡建设厅网站检测软件定制
  • wordpress json数据seo工具包
  • wordpress封采集站ip网站图片怎么做才有吸引力
  • 济南如何挑选网站建设公司互联网金融p2p网站建设
  • 中小型企业网站设计与开发wordpress网站乱码
  • 网站开发熬夜么目前网站在初级建设阶段 需要大量数据丰富
  • 自己怎么注册网站怎么做网站免费优化
  • 网站建设的进度安排和人员安排建设网站公司
  • wap版网站 加app提示wordpress首页文字广告框架
  • 盘锦网站建设哪家好网站建设咨询哪家性价比高
  • 广州网站设计皆赞乐云践新网络营销推广的作用
  • 潍坊网站制作多少钱东莞网站建设网络推广
  • 域名会跳转怎么进原网站网站对品牌的作用
  • 自己做的网站能被别人看到吗浙江专业网页设计免费建站
  • 前端响应式网站淮南网站开发