python NTFS runlistのコードの解釈


コードは次のとおりです.
#!/usr/bin/python3
#http://www.frombyte.com   
import os
import sys
import random
import hashlib
import struct
import zlib
import re
 
def help_exit():
    print("      :")
    print("  python3 %s    :" % sys.argv[0])
    print("      File name:      runlist     ")
    print("      Start bytes:      runlist     ")
    print("      Start LCN:runlist     LCN ,        runlist,     0.")
    print("      Start VCN:runlist     VCN ,       0x20 runlist,      0.")
    print("      *   :      ,    。
")     exit() # A-F def is_num_by_except(s):     try:         a=int(s,16)         if (a>0 and a<=16): return True         else: return False     except ValueError:         return False      if len(sys.argv)!= 5 :     print("  *** !")     help_exit() if sys.argv[2].isdigit():     spoi = int(sys.argv[2])     if spoi<0:       print("*** , ")       help_exit() else:     print("*** , ")     help_exit() if sys.argv[3].isdigit():     slcn = int(sys.argv[3])     if slcn<0:       print("*** , LCN ")       help_exit() else:     print("*** , LCN ")     help_exit() if sys.argv[4].isdigit():     svcn = int(sys.argv[4])     if svcn<0:       print("*** , VCN ")       help_exit() else:     print("*** , VCN ")     help_exit() def get_i(vl,ilen):     q=0     for i in range(0,ilen):         q = q | ( vl[0][i] < 0x80:         q = q - (1 <> 4   v1_l = (v1 &0xF)   if (v1_l >=8) or (v1_p >=8) or (v1_l == 0):     print("*** %d:run list !***"%(i+spoi))     break   i = i+1   if (i+8) >= 1024:     break   t = struct.unpack_from('8s',data,i)   v1_dl = get_i(t,v1_l)   if v1_dl = 1024:     break   t = struct.unpack_from('8s',data,i)   v1_dp = get_i(t,v1_p)   slcn = slcn + v1_dp   lists.append([slcn,v1_dl])   i = i + v1_p   #print("%x,%x:%x,%x"%(v1_l,v1_p,v1_dl,slcn)) print("Runlist( %d ):"%len(lists)) print("%20s%20s%20s"%("VCN","LCN","LEN")) for i in lists:   print("%20d%20d%20d"%(svcn,i[0],i[1]))   svcn += i[1] f.close()

実行効果は次のとおりです.
root@zhangyu-VirtualBox:~/NTFS-5# python3 read_runlist.py mft_source.img
***パラメータの数またはフォーマットが間違っています.
コマンド形式:
  python3 read_runlist.py :
File name:説明するrunlistを含むファイル名
Start bytes:runlistの開始位置をファイルで説明する
Start LCN:runlistから始まる参照LCN値は、完全なrunlistである場合、この値は0であるべきである.
Start VCN:runlistから始まる参照VCN値は、0 x 20のないrunlistのセグメントであれば、この値の多くは0である.
*戻り値:2 Dキューで結果を印刷します.
root@zhangyu-VirtualBox:~/NTFS-5# python3 read_runlist.py mft_source.img 5688 0 0
Runlist(合計18個の断片):
                 VCN                 LCN                 LEN
                   0               32212                   1
                   1              157952                   2
                   3              207115                   3
                   6              244046                   3
                   9              122523                   1
                  10              157991                   1
                  11              170296                   3
                  14               40552                   5
                  19              149853                   2
                  21              122721                   2
                  23              141674                   1
                  24              145783                   3
                  27              158109                   3
                  30              145820                   1
                  31              240236                   1
                  32              154081                   1
                  33              166379                   3
                  36              178711                   3