[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

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

比如,我有一个可执行文件:
C:\Windows\System32\clip.exe
怎样查看它的十六进制编码?就像用UE打开那样

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. }
复制代码

TOP

  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);
复制代码

TOP

回复 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. }
复制代码

TOP

本帖最后由 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);
复制代码

TOP

把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. }
复制代码
SOS --- >> lllsoslll@163.com

TOP

  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. }
复制代码
SOS --- >> lllsoslll@163.com

TOP

返回列表