161e22cd85cd4c84fff391da67018c92bf21a8e19Gregory Szorcfrom .base import TestBase
261e22cd85cd4c84fff391da67018c92bf21a8e19Gregory Szorcfrom ..object import ObjectFile
361e22cd85cd4c84fff391da67018c92bf21a8e19Gregory Szorcfrom ..object import Relocation
461e22cd85cd4c84fff391da67018c92bf21a8e19Gregory Szorcfrom ..object import Section
561e22cd85cd4c84fff391da67018c92bf21a8e19Gregory Szorcfrom ..object import Symbol
661e22cd85cd4c84fff391da67018c92bf21a8e19Gregory Szorc
761e22cd85cd4c84fff391da67018c92bf21a8e19Gregory Szorcclass TestObjectFile(TestBase):
861e22cd85cd4c84fff391da67018c92bf21a8e19Gregory Szorc    def get_object_file(self):
961e22cd85cd4c84fff391da67018c92bf21a8e19Gregory Szorc        source = self.get_test_binary()
1061e22cd85cd4c84fff391da67018c92bf21a8e19Gregory Szorc        return ObjectFile(filename=source)
1161e22cd85cd4c84fff391da67018c92bf21a8e19Gregory Szorc
1261e22cd85cd4c84fff391da67018c92bf21a8e19Gregory Szorc    def test_create_from_file(self):
1361e22cd85cd4c84fff391da67018c92bf21a8e19Gregory Szorc        self.get_object_file()
1461e22cd85cd4c84fff391da67018c92bf21a8e19Gregory Szorc
1561e22cd85cd4c84fff391da67018c92bf21a8e19Gregory Szorc    def test_get_sections(self):
1661e22cd85cd4c84fff391da67018c92bf21a8e19Gregory Szorc        o = self.get_object_file()
1761e22cd85cd4c84fff391da67018c92bf21a8e19Gregory Szorc
1861e22cd85cd4c84fff391da67018c92bf21a8e19Gregory Szorc        count = 0
1961e22cd85cd4c84fff391da67018c92bf21a8e19Gregory Szorc        for section in o.get_sections():
2061e22cd85cd4c84fff391da67018c92bf21a8e19Gregory Szorc            count += 1
2161e22cd85cd4c84fff391da67018c92bf21a8e19Gregory Szorc            assert isinstance(section, Section)
2261e22cd85cd4c84fff391da67018c92bf21a8e19Gregory Szorc            assert isinstance(section.name, str)
2361e22cd85cd4c84fff391da67018c92bf21a8e19Gregory Szorc            assert isinstance(section.size, long)
2461e22cd85cd4c84fff391da67018c92bf21a8e19Gregory Szorc            assert isinstance(section.contents, str)
2561e22cd85cd4c84fff391da67018c92bf21a8e19Gregory Szorc            assert isinstance(section.address, long)
26dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines            assert len(section.contents) == section.size
2761e22cd85cd4c84fff391da67018c92bf21a8e19Gregory Szorc
2861e22cd85cd4c84fff391da67018c92bf21a8e19Gregory Szorc        self.assertGreater(count, 0)
2961e22cd85cd4c84fff391da67018c92bf21a8e19Gregory Szorc
3061e22cd85cd4c84fff391da67018c92bf21a8e19Gregory Szorc        for section in o.get_sections():
3161e22cd85cd4c84fff391da67018c92bf21a8e19Gregory Szorc            section.cache()
3261e22cd85cd4c84fff391da67018c92bf21a8e19Gregory Szorc
3361e22cd85cd4c84fff391da67018c92bf21a8e19Gregory Szorc    def test_get_symbols(self):
3461e22cd85cd4c84fff391da67018c92bf21a8e19Gregory Szorc        o = self.get_object_file()
3561e22cd85cd4c84fff391da67018c92bf21a8e19Gregory Szorc
3661e22cd85cd4c84fff391da67018c92bf21a8e19Gregory Szorc        count = 0
3761e22cd85cd4c84fff391da67018c92bf21a8e19Gregory Szorc        for symbol in o.get_symbols():
3861e22cd85cd4c84fff391da67018c92bf21a8e19Gregory Szorc            count += 1
3961e22cd85cd4c84fff391da67018c92bf21a8e19Gregory Szorc            assert isinstance(symbol, Symbol)
4061e22cd85cd4c84fff391da67018c92bf21a8e19Gregory Szorc            assert isinstance(symbol.name, str)
4161e22cd85cd4c84fff391da67018c92bf21a8e19Gregory Szorc            assert isinstance(symbol.address, long)
4261e22cd85cd4c84fff391da67018c92bf21a8e19Gregory Szorc            assert isinstance(symbol.size, long)
4361e22cd85cd4c84fff391da67018c92bf21a8e19Gregory Szorc
4461e22cd85cd4c84fff391da67018c92bf21a8e19Gregory Szorc        self.assertGreater(count, 0)
4561e22cd85cd4c84fff391da67018c92bf21a8e19Gregory Szorc
4661e22cd85cd4c84fff391da67018c92bf21a8e19Gregory Szorc        for symbol in o.get_symbols():
4761e22cd85cd4c84fff391da67018c92bf21a8e19Gregory Szorc            symbol.cache()
4861e22cd85cd4c84fff391da67018c92bf21a8e19Gregory Szorc
4961e22cd85cd4c84fff391da67018c92bf21a8e19Gregory Szorc    def test_symbol_section_accessor(self):
5061e22cd85cd4c84fff391da67018c92bf21a8e19Gregory Szorc        o = self.get_object_file()
5161e22cd85cd4c84fff391da67018c92bf21a8e19Gregory Szorc
5261e22cd85cd4c84fff391da67018c92bf21a8e19Gregory Szorc        for symbol in o.get_symbols():
5361e22cd85cd4c84fff391da67018c92bf21a8e19Gregory Szorc            section = symbol.section
5461e22cd85cd4c84fff391da67018c92bf21a8e19Gregory Szorc            assert isinstance(section, Section)
5561e22cd85cd4c84fff391da67018c92bf21a8e19Gregory Szorc
5661e22cd85cd4c84fff391da67018c92bf21a8e19Gregory Szorc            break
5761e22cd85cd4c84fff391da67018c92bf21a8e19Gregory Szorc
5861e22cd85cd4c84fff391da67018c92bf21a8e19Gregory Szorc    def test_get_relocations(self):
5961e22cd85cd4c84fff391da67018c92bf21a8e19Gregory Szorc        o = self.get_object_file()
6061e22cd85cd4c84fff391da67018c92bf21a8e19Gregory Szorc        for section in o.get_sections():
6161e22cd85cd4c84fff391da67018c92bf21a8e19Gregory Szorc            for relocation in section.get_relocations():
6261e22cd85cd4c84fff391da67018c92bf21a8e19Gregory Szorc                assert isinstance(relocation, Relocation)
6361e22cd85cd4c84fff391da67018c92bf21a8e19Gregory Szorc                assert isinstance(relocation.address, long)
6461e22cd85cd4c84fff391da67018c92bf21a8e19Gregory Szorc                assert isinstance(relocation.offset, long)
6561e22cd85cd4c84fff391da67018c92bf21a8e19Gregory Szorc                assert isinstance(relocation.type_number, long)
6661e22cd85cd4c84fff391da67018c92bf21a8e19Gregory Szorc                assert isinstance(relocation.type_name, str)
6761e22cd85cd4c84fff391da67018c92bf21a8e19Gregory Szorc                assert isinstance(relocation.value_string, str)
68