当我读取PE文件时,如何将字节转换为手动输出

时间:2017-09-08 11:57:30

标签: python-3.x byte decode

我的代码:

# -*- coding: utf-8 -*- #

if __name__ == "__main__":
    try:
        f = open("test.dll", 'rb')
        context = f.read()
        f.close()
        print(context)
    except Exception as e:
        print(e)

当我使用python3:

时,输出是这样的字节
  

B' b \' MZ \ X90 \ X00 \ X03 \ X00 \ X00 \ X00 \ X04 \ X00 \ X00 \ X00 \ XFF \ XFF \ X00 \ X00 \ XB8 \ X00 \ X00 \ X00 \ X00 \ X00 \ X00 \ X00 @ \ X00 \ X00 \ X00 \ X00 \ X00 \ X00 \ X00 \ X00 \ X00 \ X00 \ X00 \ X00 \ X00 \ X00 \ X00 \ X00 \ X00 \ X00 \ X00 \ X00 \ X00 \ X00 \ X00 \ X00 \ X00 \ X00 \ X00 \ X00 \ X00 \ X00 \ X00 \ X00 \ X00 \ X00 \ X00 \ XF0 \ X00 \ X00 \ X00 \ x0e \ X1F \ XBA \ x0e \ X00 \ XB4 \牛逼\ XCD!\ XB8 \ x01L \ XCD!这   程序无法在DOS模式下运行。\ r \ n \ n \ n $ \ x00 \ x00 \ x00 \ x00

当我使用python2时,输出就像我想要的那样:

  

MZ? ? @? ?   ??? L?该程序无法在DOS模式下运行。

     

$ 2!跪v @住v @住v @住8B@住8 ^@住8T‰@住8D

如何使用python3获取python2的输出?

PS: 我尝试像这样解码输出:

context = f.read().decode("utf-8")

但是有这样的错误:

  

' UTF-8'编解码器不能解码位置2中的字节0x90:无效的起始字节

另一种解码类型具有相同的错误。

如何获得正确的输出?非常感谢。

1 个答案:

答案 0 :(得分:2)

哦,对不起 我有方法:

代码:

combined_list = list1 + list2
final_dict = {tuple(i[:2]):tuple(i[2:]) for i in combined_list}
> {('A', 14): ('Y', 0, 200),
  ('B', 15): ('M', 0, 400),
  ('C', 16): ('F', 50, 60),
  ('C', 17): ('G', 0, 600)}
merged_list = [list(k) + list (final_dict[k]) for k in final_dict]
> [['C', 16, 'F', 50, 60],
   ['B', 15, 'M', 0, 400],
   ['C', 17, 'G', 0, 600],
   ['A', 14, 'Y', 0, 200]]

使用'ignore'param

这是事实:enter link description here