Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/278.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python以python看到的格式将数据打印到stout。生的。_Python - Fatal编程技术网

python以python看到的格式将数据打印到stout。生的。

python以python看到的格式将数据打印到stout。生的。,python,Python,程序hex.py(代码来自hex.py)先前加载了一个hex.patch文件,该文件包含3项信息 1.要打开的目标文件(在本例中,tar=windows.exe文件) 2.old(要在exe中查找的数据) 3.new(exe中要替换旧数据的数据)。 旧的/新的将被写入十六进制(64000000或6400 0000)或以谁知道是什么格式UTF8 UTF16?的文本?。 我需要能够看到补丁文件'old'和'new'数据以及tar文件数据的格式与python相同(在python将其翻译给我之前),这样

程序hex.py(代码来自hex.py)先前加载了一个hex.patch文件,该文件包含3项信息 1.要打开的目标文件(在本例中,tar=windows.exe文件) 2.old(要在exe中查找的数据) 3.new(exe中要替换旧数据的数据)。 旧的/新的将被写入十六进制(64000000或6400 0000)或以谁知道是什么格式UTF8 UTF16?的文本?。 我需要能够看到补丁文件'old'和'new'数据以及tar文件数据的格式与python相同(在python将其翻译给我之前),这样我就可以编写校正因子例程。 十六进制:


到目前为止,它正在查找正确的数据,即'old'=数据(匹配的子字符串),并正在写入文件'bus',但'bus'文件的第一行不是,十六进制已被替换为'new'十六进制,它已将'new'替换为文本值。

就像您前面的问题一样,没有人知道您的实际意思“以与python相同的格式查看数据”,这就是您没有得到任何答案的原因。请给我们一个示例,说明您的程序的输入将是什么,以及您期望的输出是什么样子。您发布的代码非常糟糕,坦率地说,我不想费心去弄清楚它是做什么的。”一幅画抵得上千言万语编辑阿瑟·布里斯班。不幸的是,stackoverflow不允许我发布一个简单的10行hexedit png。这正好说明了这一点。在默认配置下使用hexedit打开windows exe程序时,左窗格显示8字节行,右窗格显示与文本相同的数据。问题:0x00和0x20在右侧窗格中显示相同。因此,有些实例将搜索字符串设置为要搜索的十六进制字符串,有些实例将搜索字符串设置为要搜索的文本字符串。看起来您仍在将编码为ASCII十六进制字符串的数据写入文件,而不是调用
unhexlify()
将其更改为由这些十六进制字符串表示的二进制数据。
    modcwd = os.getcwd() #assign var to modman dir
    patch = 'hex.patch' #hardcode patch to var
    patlst = [line.strip() for line in open(patch,'rb',1)] #Read Patch start
    tar = patlst[patlst.index('TAR:')+1];old = patlst[patlst.index('OLD:')+1];new = patlst[  pat.index('NEW:')+1]
    #start sub to determine if data hex or alpha
    a = old [:8]
    count = lambda l1, l2: len(list(filter(lambda c: c in l2, l1)))
    a_chars =  count(a, string.ascii_letters) 
    a_digits = count(a, string.digits) 
    if (a_chars/a_digits) > .45 : alphex = 'a'
    else: alphex = 'h'
    if alphex == 'h' : old = ''.join(old.split()); new = ''.join(new.split())
    oldlc = [o.lower() for o in old];old = ''.join(oldlc)
    newlc = [n.lower() for n in new];new = ''.join(newlc)
    #load open exe file
    pircwd = os.chdir('..'); pircwd = os.getcwd()
    fotar = open(tar,'rb')
    data = fotar.read(160)
    Hdata = (binascii.hexlify(data))
    bus = re.sub(old,new,Hdata)
    fobus = open ('newhex','wb')
    fobus.write(bus)
    fobus.close()
    fotar.close()

The complete hex.patch :
TAR: 
Hex!.exe
OLD:
2068 6572 652C 2073 7765 6574 6965 2E0A
NEW:
2068 6572 652C 2073 6578 792E 2E2E 2E0A
EOF: