找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 21388|回复: 6

[问题求助] Perl怎样查看可执行文件的十六进制编码?

[复制链接]
发表于 2011-10-24 15:21:58 | 显示全部楼层 |阅读模式
比如,我有一个可执行文件:
C:\Windows\System32\clip.exe
怎样查看它的十六进制编码?就像用UE打开那样
发表于 2011-10-24 17:35:58 | 显示全部楼层
cmd命令行下 "seehex C:\Windows\System32\clip.exe"
  1. :: seehex.bat <file>
  2. @perl -x -S %~s0 %*&goto:eof

  3. #!perl
  4. open EXE,"@ARGV" or die "$!";
  5. binmode EXE;
  6. while (<EXE>) {
  7.     print &asc2hex($_);
  8. }

  9. sub asc2hex {
  10.     ($s = shift) =~ s/./sprintf("%02lx", ord $&)/egs;
  11.     return $s;
  12. }
复制代码
发表于 2011-10-24 20:14:50 | 显示全部楼层

  1. #!/usr/bin/perl
  2. use strict;
  3. use warnings;
  4. open(FH,"<",'C:\Windows\System32\clip.exe') or die;
  5. my $a;
  6. my $buffer;
  7. while (read(FH,$buffer,16)) {
  8.     $a=unpack("H*",$buffer);
  9.         $a=~s/../$& /g;
  10.         print $a;
  11.         }
  12. close(FH);
复制代码
 楼主| 发表于 2011-10-24 23:12:20 | 显示全部楼层
回复 3# sxw


多谢。用unpack和ord得到的结果有点差异,请问是为什么?
  1. open EXE,'C:\Windows\System32\clip.exe';
  2. binmode EXE;
  3. while (<EXE>) {
  4.     print &asc2hex($_);
  5. }

  6. sub asc2hex {
  7.     ($s = shift) =~ s/./sprintf("%02lx ", ord $&)/egs;
  8.     return $s;
  9. }
复制代码
发表于 2011-10-25 16:54:16 | 显示全部楼层
本帖最后由 sxw 于 2011-10-25 17:17 编辑

回复 4# Perl


    呵呵,不清楚,plp26的结果比3楼的多了1kb,下面的也可以吧

  1. #!/usr/bin/perl
  2. use strict;
  3. use warnings;
  4. open(FH,"<",'C:\Windows\System32\clip.exe') or die;
  5. my @a;
  6. my $buffer;
  7. while (read(FH,$buffer,16)) {
  8.     @a=unpack("H*",$buffer);#@a中只有一个元素
  9.          print $a[0],"\n";
  10.         }
  11. close(FH);
复制代码
发表于 2011-10-29 00:22:24 | 显示全部楼层
把2楼精简下:
  1. :: seehex.bat <file>
  2. @perl -x -S %~s0 %*&goto:eof

  3. #!perl
  4. open EXE,"@ARGV" or die $!;
  5. binmode EXE;
  6. while (<EXE>) {
  7.    $_ =~ s/./sprintf("%02lx", ord $&)/egs;
  8.    print;
  9. }
复制代码
发表于 2011-10-29 00:28:15 | 显示全部楼层
  1. open EXE,'C:\Windows\System32\clip.exe' or die $!;
  2. binmode EXE;
  3. while (<EXE>) {
  4.    $_ =~ s/./sprintf("%02lx", ord $&)/egs;
  5.    print;
  6. }
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-17 01:14 , Processed in 0.015621 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表