【发布时间】:2016-01-10 11:58:34
【问题描述】:
我编写了自己的小 Perl 调试器,它打印每个执行的行、当前文件名和相应的行号。如何检测当前 Perl 语句是否包含污染数据?
我知道模块 Scalar::Util 中有一个“被污染”的函数。但是它只接受变量名作为参数,而不接受 Perl 语句。
我已将 Taint 附加到一个词法变量以跟踪它。 如果我能够看到一个语句是否被污染,我只能打印那些包含我被污染的变量的行。 这是我的自定义污点脚本:
Taint.pl
use strict;
use warnings;
use Taint::Runtime qw(taint_start taint);
taint_start();
my $data = taint("abc"); --> interesting
my $noise = "noise"; --> not interesting
my $evil = $data . " evil"; --> interesting
Debugger.pl
sub DB::DB{
my($package, $filename, $line) = caller;
print $filename . ":" . $line . " ";
scalar <STDIN>;
}
1;
【问题讨论】:
-
用 eval() 捕获异常?
-
我找到了这段代码,它使用 eval 来捕获异常,但我不知道如何将 Perl 语句传递给它。本地 $@;返回 ! eval { eval("#" .substr(join("", @_), 0, 0)); 1 };
-
您到底想测试什么,为什么不能在其中使用变量?
-
我的主要目标是单步执行一个程序,并且只显示包含污染数据的 Perl 语句。
-
您应该将该信息添加到您的问题中。使用edit 链接来做到这一点。
标签: perl expression taint