Perl编程实践:单词统计与文本处理

19、编写一个程序,它读取一系列单词(每行一个单词)直到输入结束,然后打印出每个单词出现次数的摘要。(提示:记住,当一个未定义的值被当作数字使用时,Perl 会自动将其转换为 0。回顾前面记录累计总数的练习可能会有帮助。)因此,如果输入的单词是 fred、barney、fred、dino、wilma、fred(都在不同的行上),输出应该告诉我们 fred 出现了 3 次。额外加分项:在输出中按代码点顺序对摘要中的单词进行排序。

my %count;
while (<>) {
    chomp;
    $count{$_}++;
}
foreach my $word (sort keys %count) {
    print "$word was seen $count{$word} times.\n";
}

这段代码首先定义了一个哈希 %count 用于存储每个单词及其出现的次数。 while (<>) 循环会逐行读取输入, chomp 函数用于去掉每行末尾的换行符,然后将单词作为键,其出现次数作为值存储在 %count 哈希中。最后,使用 sort keys %count 按代码点顺序对单词进行排序,并打印出每个单词及其出现的次数。

20、编写一个程序,打印出输入中提到“fred”的每一行。(对于其他行输入不做任何处理。)如果输入字符串是“Fred”、“frederick”或“Alfred”,它会匹配吗?创建一个包含几行提到“fred flintstone”及其朋友的小文本文件,然后将该文件作为此程序的输入。

以下是实现该功能的Perl代码:

while (<>) {
    if (/fred/) {
        print;
    }
}

对于输入字符串“Fred”,由于正则表达式是区分大小写的,所以不会匹配;而“frederick”和“Alfred”会匹配,因为它们都包含字符串“fred”。

你可以创建一个小文本文件,例如命名为 test.txt ,内容如下:

fred flintstone is a great character.
Wilma is fred's wife.
Barney is fred's friend.
This line has no mention of fred.

然后使用命令 perl your_script.pl test.txt 来运行程序,其中 your_script.pl 是上述代码保存的文件名。程序将会打印出包含“fred”的行。

21、修改一个原程序,使其能匹配Fred。若输入字符串是Fred、frederick或Alfred,修改后的程序是否能匹配这些字符串?(可将这些名字添加到文本文件中进行测试)

正则表达式是区分大小写的,原程序不匹配 Fred 。修改程序的一种方法是将使用的模式更改为 /[fF]red/ ,也可以尝试 /(f|F)red/ /fred|Fred/ ,但字符类更高效。修改后,能匹配 Fred frederick Alfred ,因为这三个字符串都包含四个字母的字符串 fred (后面会介绍只匹配整个单词的功能,那样 frederick Alfred 就不会匹配了)。

22、编写一个程序,打印输入中包含句点(.)的每一行,忽略其他行。用包含 ‘Mr. Slate’ 的小文本文件测试它,程序能识别出 ‘Mr. Slate’ 吗?

以下是实现该功能的Python代码示例:

while True:
    try:
        line = input()
        if '.' in line:
            print(line)
    except EOFError:
        break

对于是否能识别出 Mr. Slate ,如果将包含 Mr. Slate 的行作为输入,程序会将其打印出来,因为这一行中包含句点(.)。

23、编写一个程序,打印出每行中包含一个首字母大写但并非全大写的单词的行。该程序是否能匹配“Fred”,而不匹配“fred”和“FRED”?

以下是一个用Python实现的程序示例:

import re
# 假设输入文本存储在一个列表中,这里模拟从文件读取
input_lines = [ "Fred is a good name.", "fred is not capitalized.", "FRED is all capitalized." ]
# 正则表达式模式,匹配首字母大写但并非全大写的单词
pattern = r'\b[A-Z][a-z]+\b'
for line in input_lines:
    if re.search(pattern, line):
        print(
内容概要:本文详细记录了对一个Android ARM64静态ELF文件中字符串加密机制的逆向分析过程。该ELF文件的所有字符串均被加密,无法通过常规strings命令或IDA直接识别。作者通过分析发现,加密字符串存储在.rodata段,其解密所需信息(包括密文地址、长度和16位密钥)保存在.data.rel.ro段的40字节描述符中。核心解密函数sub_10F408采用自反的双pass流密码算法,结合固定密钥KEY_TERM(由.data段24字节数据计算得出),实现字节级非线性、位置长度相关的加密。文章还复现了完整的Python解密脚本,并揭示了该保护机制的本质为代码混淆而非强加密,最终成功批量解密全部956条字符串,暴露程序真实行为,如shell命令模板、设备标识篡改、网络重置等操作。此外,文中还提及未启用的自定义壳框架及其反dump设计。; 适合人群:具备逆向工程基础的安全研究人员、二进制分析人员及对ELF保护技术感兴趣的开发者。; 使用场景及目标:①学习ELF二进制中字符串加密的典型实现方式逆向突破口;②掌握从结构识别、函数追踪到算法还原的完整逆向流程;③理解“绑定二进制”的完整性校验设计及其局限性;④实践编写IDAPython脚本自动化提取解密敏感数据。; 阅读建议:此资源以实战案例驱动,不仅展示技术细节,更强调逆向思维验证方法,建议读者结合IDA调试环境,逐步跟随文中步骤进行动态分析算法验证,深入理解每一步的推理依据。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值