python如何填充这个字典返回has data属性

2024-04-29 18:25:00 发布

您现在位置:Python中文网/ 问答频道 /正文

    self.mem_writes = {}

def get_memory(self, address, size):
    try:
        return self.mem_writes[(address, size)].data
    except KeyError:
        pass
    return None

mem_writes除了这个函数之外,其他任何地方都没有使用过我想知道它是如何被数据填充的? 我假设它是一个以大小为键值的包含地址的字典,而数据是按值绑定的我错了吗?你知道吗

我仍然不知道它是如何被填充的我甚至不能在Python(命令行)上测试它 我犯了个错误

AttributeError: 'int' object has no attribute 'data'

但是原始脚本运行时没有任何错误

我在脚本里找任何有数据的东西,我只找到了这些

import struct

class DWORD(object):
    def __init__(self, value):
        self.data = struct.pack('<I', value)

但是与DWORDint之间没有任何联系将它们联系在一起。。是的,我知道DWORD的名字是一个无符号的int,但这意味着什么也没有,是的DWORD类没有在脚本中的任何地方使用,所以它必须以某种方式链接,但我不明白,它必须是一个尚未实现的类。你知道吗

我在看所有的记忆电话,他们看起来像这样

value = self.converter.get_memory(addr, 4)
value, = struct.unpack('<I', value)

data = self.converter.get_memory(ind_addr + ii, 1)
index, = struct.unpack('<B', data)

data = self.converter.get_memory(table_addr + ii*scale, 4)
addr, = struct.unpack('<I', data)

那昏迷是在手术前吗结构解包我觉得很奇怪,因为我从来没有在其他编程语言中遇到过这种情况。你知道吗

获取get\ U内存的值很容易找到。。看起来像这样

try:
    data = get_memory(address, 16)
except NotImplementedError, e:
    print 'Could not get memory for address %X' % address
    raise e

是的,上述情况下的数据应该变成16字节的字节数组。你知道吗

以下是原始脚本:https://github.com/matpow2/cuwo/blob/master/terraingen/converter.py


Tags: 数据self脚本datagetvalueaddressmem