Exemplo n.º 1
0
    def encode(self):
        """
		将变量重新写入到字节数组中
		"""
        bytes = self.bytes

        bytes[0x00:0x04] = convertIntToBytes(self.method_id)
        bytes[0x04:0x08] = convertIntToBytes(self.annotations_off)
    def encode(self):
        """
        将变量重新写入到字节数组中
        """
        # 子项列表编码
        for item in self.item_list:
            item.encode()

        # 检测尺寸变化
        self.item_size = len(self.item_list)

        new_size = 0x04 + self.item_size * 0x04
        if self.getBytesSize() != new_size:
            self.setBytes(createBytes(new_size))

        # 编码
        bytes = self.getBytes()

        # 记录尺寸
        bytes[0x00:0x04] = convertIntToBytes(self.item_size)

        # 循环拷贝列表数据
        off = 0x04
        for item in self.item_list:
            bytes[off:off + 0x04] = item.bytes
            off += 0x04
Exemplo n.º 3
0
    def encode(self):
        """
        将变量重新写入到字节数组中
        """
        bytes = self.getBytes()

        bytes[0x00:0x02] = convertShortToBytes(self.class_id)
        bytes[0x02:0x04] = convertShortToBytes(self.proto_id)
        bytes[0x04:0x08] = convertIntToBytes(self.name_id)
Exemplo n.º 4
0
    def encode(self):
        """
        将变量重新写入到字节数组中
        """
        bytes = self.bytes

        bytes[0x00:0x04] = convertIntToBytes(self.start_addr)
        bytes[0x04:0x06] = convertShortToBytes(self.insn_count)
        bytes[0x06:0x08] = convertShortToBytes(self.handler_off)
Exemplo n.º 5
0
    def encode(self):
        """
        将变量重新写入到字节数组中
        """
        bytes = self.getBytes()

        bytes[0x00:0x04] = convertIntToBytes(self.class_id)
        bytes[0x04:0x08] = convertIntToBytes(self.access_flags)
        bytes[0x08:0x0c] = convertIntToBytes(self.super_class_id)
        bytes[0x0c:0x10] = convertIntToBytes(self.interface_off)
        bytes[0x10:0x14] = convertIntToBytes(self.source_file_id)
        bytes[0x14:0x18] = convertIntToBytes(self.annotation_off)
        bytes[0x18:0x1c] = convertIntToBytes(self.class_data_off)
        bytes[0x1c:0x20] = convertIntToBytes(self.static_value_off)
Exemplo n.º 6
0
    def encode(self):
        """
        将变量重新写入到字节数组中
        """
        bytes = self.getBytes()

        # 调整变量
        self.tries_size = len(self.tries)

        # 调整尺寸
        new_size = 0x10 + self.insns_size * 0x02

        if self.tries_size > 0 and (self.insns_size & 0x01) == 0x01:
            new_size += 0x02

        for item in self.tries:
            new_size += item.getBytesSize()

        if self.handlers:
            new_size += self.handlers.getBytesSize()

        if new_size % 0x04 != 0:
            new_size += 0x04 - (new_size % 0x04)

        if self.getBytesSize != new_size:
            self.setBytes(createBytes(new_size))
        else:
            # 考虑四字节对齐的影响
            zerosBytes(self.getBytes())

        # 编码
        bytes = self.getBytes()

        bytes[0x00:0x02] = convertShortToBytes(self.registers_size)
        bytes[0x02:0x04] = convertShortToBytes(self.ins_size)
        bytes[0x04:0x06] = convertShortToBytes(self.outs_size)
        bytes[0x06:0x08] = convertShortToBytes(self.tries_size)
        bytes[0x08:0x0c] = convertIntToBytes(self.debug_info_off)
        bytes[0x0c:0x10] = convertIntToBytes(self.insns_size)

        off = 0x10

        if self.insns_size > 0:
            bytes[off:off +
                  self.insns_size * 0x02] = self.insns[0x00:self.insns_size *
                                                       0x02]
            off += self.insns_size * 0x02

        if self.tries_size > 0 and (self.insns_size & 0x01) == 0x01:
            bytes[off + 0x00] = 0
            bytes[off + 0x01] = 0
            off += 0x02

        for item in self.tries:
            bytes[off:off + item.getBytesSize()] = item.getBytes()
            off += item.getBytesSize()

        if self.handlers:
            bytes[off:off +
                  self.handlers.getBytesSize()] = self.handlers.getBytes()
            off += self.handlers.getBytesSize()