예제 #1
0
파일: loader.py 프로젝트: mikalv/cle
    def find_object_containing(self, addr):
        """
        Return the object that contains the given address, or None if the address is unmapped.
        """
        for obj in self.all_objects:
            if not obj.min_addr <= addr < obj.max_addr:
                continue

            if isinstance(obj.memory, str):
                return obj
            elif isinstance(obj.memory, Clemory):
                if AT.from_va(addr, obj).to_rva() in obj.memory:
                    return obj
            else:
                raise CLEError('Unsupported memory type %s' % type(obj.memory))

        return None
예제 #2
0
파일: loader.py 프로젝트: mikalv/cle
    def describe_addr(self, addr):
        """
        Returns a textual description of what's in memory at the provided address
        """
        o = self.find_object_containing(addr)

        if o is None:
            return None

        off = AT.from_va(addr, o).to_rva()
        nameof = 'main binary' if o is self.main_object else o.provides

        if isinstance(o, ELF):
            if addr in o._plt.values():
                for k,v in o._plt.iteritems():
                    if v == addr:
                        return "PLT stub of %s in %s (offset %#x)" % (k, nameof, off)

        if off in o._symbols_by_addr:
            name = o._symbols_by_addr[off].name
            return "%s (offset %#x) in %s" % (name, off, nameof)

        return "Offset %#x in %s" % (off, nameof)
예제 #3
0
def test_invalid_va_raw():
    nose.tools.assert_equal(AT.from_va(0xa1b6ed4, owner).to_raw(), None)
예제 #4
0
def test_valid_va_raw_translations():
    nose.tools.assert_equal(AT.from_raw(0x1b3260, owner).to_va(), 0xa1b4260)
    nose.tools.assert_equal(AT.from_va(0xa1b6ed3, owner).to_raw(), 0x1b5ed3)
예제 #5
0
def test_va_rva_translation():
    nose.tools.assert_equal(AT.from_rva(0, owner).to_va(), 0xa000000)
    nose.tools.assert_equal(AT.from_va(0xa1b9a1b, owner).to_rva(), 0x1b9a1b)
예제 #6
0
def test_invalid_va_raw():
    nose.tools.assert_equal(AT.from_va(0xa1b6ed4, owner).to_raw(), None)
예제 #7
0
def test_valid_va_raw_translations():
    nose.tools.assert_equal(AT.from_raw(0x1b3260, owner).to_va(), 0xa1b4260)
    nose.tools.assert_equal(AT.from_va(0xa1b6ed3, owner).to_raw(), 0x1b5ed3)
예제 #8
0
def test_va_rva_translation():
    nose.tools.assert_equal(AT.from_rva(0, owner).to_va(), 0xa000000)
    nose.tools.assert_equal(AT.from_va(0xa1b9a1b, owner).to_rva(), 0x1b9a1b)