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