鱼C论坛

 找回密码
 立即注册
查看: 1697|回复: 5

[已解决]如何用python获取bin文件的值

[复制链接]
发表于 2023-3-31 11:28:07 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
如图bin文件信息

如何根据一个BLOCK或者一片BLOCK拿到我想要的值?
最佳答案
2023-3-31 11:36:25
你先参考一下这个,再说说跟你的需求有所出入的地方

你可以使用Python实现类似于Linux上的hexdump -C命令的效果。

下面是一个简单的Python程序,它读取一个二进制文件并将其十六进制内容打印到控制台上,类似于hexdump -C命令的输出:
import sys

def hexdump(file_path):
    with open(file_path, 'rb') as f:
        offset = 0
        while True:
            chunk = f.read(16)
            if not chunk:
                break

            hex_data = ' '.join(['{:02X}'.format(byte) for byte in chunk])
            text_data = ''.join([chr(byte) if 32 <= byte <= 126 else '.' for byte in chunk])
            padding = ' ' * (3 * (16 - len(chunk)))
            print('{:08X}  {}{} {}'.format(offset, hex_data, padding, text_data))
            offset += 16

if __name__ == '__main__':
    if len(sys.argv) < 2:
        print('Usage: python hexdump.py <file>')
        sys.exit(1)

    file_path = sys.argv[1]
    hexdump(file_path)

要使用它,请在命令行中运行以下命令:
python hexdump.py <file_path>

其中,<file_path>是您要打印十六进制内容的文件的路径。该程序将打印文件的十六进制内容,类似于hexdump -C命令的输出。
Snipaste_2023-03-31_11-25-23.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-3-31 11:36:25 | 显示全部楼层    本楼为最佳答案   
你先参考一下这个,再说说跟你的需求有所出入的地方

你可以使用Python实现类似于Linux上的hexdump -C命令的效果。

下面是一个简单的Python程序,它读取一个二进制文件并将其十六进制内容打印到控制台上,类似于hexdump -C命令的输出:
import sys

def hexdump(file_path):
    with open(file_path, 'rb') as f:
        offset = 0
        while True:
            chunk = f.read(16)
            if not chunk:
                break

            hex_data = ' '.join(['{:02X}'.format(byte) for byte in chunk])
            text_data = ''.join([chr(byte) if 32 <= byte <= 126 else '.' for byte in chunk])
            padding = ' ' * (3 * (16 - len(chunk)))
            print('{:08X}  {}{} {}'.format(offset, hex_data, padding, text_data))
            offset += 16

if __name__ == '__main__':
    if len(sys.argv) < 2:
        print('Usage: python hexdump.py <file>')
        sys.exit(1)

    file_path = sys.argv[1]
    hexdump(file_path)

要使用它,请在命令行中运行以下命令:
python hexdump.py <file_path>

其中,<file_path>是您要打印十六进制内容的文件的路径。该程序将打印文件的十六进制内容,类似于hexdump -C命令的输出。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-3-31 11:42:59 | 显示全部楼层
isdkz 发表于 2023-3-31 11:36
你先参考一下这个,再说说跟你的需求有所出入的地方

你可以使用Python实现类似于Linux上的hexdump -C命 ...

有点不太明白,hexdump.py在哪里
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-3-31 11:48:05 | 显示全部楼层
liyuping-fisher 发表于 2023-3-31 11:42
有点不太明白,hexdump.py在哪里

就是我写的那个程序呀
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-3-31 11:59:56 | 显示全部楼层
isdkz 发表于 2023-3-31 11:48
就是我写的那个程序呀

这个文件运行没问题,打印出了内存地址对应的值,但是我用python怎么去获取值呢,我shell熟练一些,shell的话我感觉awk等方法都可以根据内存地址拿,但是python我就不会了,比如我想拿00029150这个地址的某一列或者是同时几列这样子
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-3-31 12:06:02 | 显示全部楼层
本帖最后由 isdkz 于 2023-3-31 12:07 编辑
liyuping-fisher 发表于 2023-3-31 11:59
这个文件运行没问题,打印出了内存地址对应的值,但是我用python怎么去获取值呢,我shell熟练一些,shell ...


就是用二进制打开就行了呀,用 seek 把指针移动到偏移量那里开始读取

还有你说的 00029150 指的是?你要读取哪部分内容是根据当前指针相对于文件开头的偏移量来说的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-9-24 01:22

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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