Beispiel #1
0
    def test_remove_nobits(self):
        for file_name in [
            "data/null_elf",
            "data/arm_exec",
            "data/arm_exec_nosect",
            "data/arm_object",
            "data/mips64_exec",
            "data/mips32_exec",
            "data/ia32_exec",
            "data/amd64_exec",
            "data/ia64_exec",
        ]:
            ef = PreparedElfFile(filename=file_name)
            if ef.segments:
                seg_sizes = []
                for segment in ef.segments:
                    seg_sizes.append((segment.get_memsz(), segment.get_filesz()))
                ef.remove_nobits()
                count = 0
                for segment in ef.segments:
                    self.assertEqual(segment.get_memsz(), segment.get_filesz())
                    self.assertEqual(segment.get_memsz(), seg_sizes[count][0])
                    count += 1

        ef = UnpreparedElfFile()
        sec = UnpreparedElfSection(section_type=SHT_NOBITS, data=10)
        self.assertEqual(sec.get_size(), 10)
        ef.add_section(sec)
        ef.remove_nobits()
        sec = ef.sections[1]
        self.assertEqual(sec.type, SHT_PROGBITS)
        self.assertEqual(sec.get_size(), 10)
        self.assertEqual(sec.get_file_data(), ByteArray("\0" * 10))
Beispiel #2
0
    def test_remove_nobits(self):
        for file_name in ["data/null_elf",
                          "data/arm_exec",
                          "data/arm_stripped_exec",
                          "data/arm_exec_nosect",
                          "data/arm_object",
                          "data/mips64_exec",
                          "data/mips32_exec",
                          "data/ia32_exec",
                          "data/amd64_exec",
                          "data/ia64_exec",
                          ]:
            ef = PreparedElfFile(filename=file_name)
            if ef.segments:
                seg_sizes = []
                for segment in ef.segments:
                    seg_sizes.append((segment.get_memsz(), segment.get_filesz()))
                ef.remove_nobits()
                for segment, seg_size in zip(ef.segments, seg_sizes):
                    self.assertEqual(segment.get_memsz(), segment.get_filesz())
                    self.assertEqual(segment.get_memsz(), seg_size[0])

        ef = UnpreparedElfFile()
        sec = UnpreparedElfSection(None, section_type=SHT_NOBITS, data=10)
        self.assertEqual(sec.get_size(), 10)
        ef.add_section(sec)
        ef.remove_nobits()
        sec = ef.sections[1]
        self.assertEqual(sec.type, SHT_PROGBITS)
        self.assertEqual(sec.get_size(), 10)
        self.assertEqual(sec.get_file_data(), ByteArray('\0' * 10))
Beispiel #3
0
    def test_get_size(self):
        sect = UnpreparedElfSection("test")
        self.assertEqual(sect.get_size(), 0)

        sect = UnpreparedElfSection("test", data=ByteArray("pants"))
        self.assertEqual(sect.get_size(), 5)

        sect = UnpreparedElfSection("test", SHT_NOBITS)
        sect.set_size(40)
        self.assertEqual(sect.get_size(), 40)
Beispiel #4
0
    def test_get_size(self):
        sect = UnpreparedElfSection("test")
        self.assertEqual(sect.get_size(), 0)

        sect = UnpreparedElfSection("test", data=ByteArray("pants"))
        self.assertEqual(sect.get_size(), 5)

        sect = UnpreparedElfSection("test", SHT_NOBITS)
        sect.set_size(40)
        self.assertEqual(sect.get_size(), 40)
Beispiel #5
0
    def test_set_size(self):
        sect = UnpreparedElfSection("test")
        sect.set_size(37)
        self.assertEqual(sect.get_size(), 37)

        sect = UnpreparedElfSection("test", SHT_NOBITS)
        sect.set_size(37)
        self.assertEqual(sect.get_size(), 37)

        sect = UnpreparedElfSection("test", data=ByteArray("pants"))
        sect.set_size(3)
        self.assertEqual(sect.get_size(), 3)

        sect = UnpreparedElfSection("test", data=ByteArray("pants"))
        sect.set_size(10)
        self.assertEqual(sect.get_size(), 10)

        sect = UnpreparedElfSection("test", data=ByteArray("pants"))
        sect = sect.prepare(0, 0, 0, 32, "<")
        sect.set_size(4)
        self.assertEqual(sect.get_size(), 4)

        sect = UnpreparedElfSection("test", data=ByteArray("pants"))
        sect = sect.prepare(0, 0, 0, 32, "<")
        self.assertRaises(InvalidArgument, sect.set_size, 14)

        sect = UnpreparedElfSection("test", SHT_NOBITS)
        sect.set_size(37)
        sect = sect.prepare(0, 0, 0, 32, "<")
        self.assertRaises(InvalidArgument, sect.set_size, 69)

        sect = UnpreparedElfSection("test", SHT_NOBITS)
        sect.set_size(37)
        sect = sect.prepare(0, 0, 0, 32, "<")
        sect.set_size(12)
        self.assertEqual(sect.get_size(), 12)
Beispiel #6
0
    def test_set_size(self):
        sect = UnpreparedElfSection("test")
        sect.set_size(37)
        self.assertEqual(sect.get_size(), 37)

        sect = UnpreparedElfSection("test", SHT_NOBITS)
        sect.set_size(37)
        self.assertEqual(sect.get_size(), 37)

        sect = UnpreparedElfSection("test", data=ByteArray("pants"))
        sect.set_size(3)
        self.assertEqual(sect.get_size(), 3)

        sect = UnpreparedElfSection("test", data=ByteArray("pants"))
        sect.set_size(10)
        self.assertEqual(sect.get_size(), 10)

        sect = UnpreparedElfSection("test", data=ByteArray("pants"))
        sect = sect.prepare(0, 0, 0, 32, '<')
        sect.set_size(4)
        self.assertEqual(sect.get_size(), 4)

        sect = UnpreparedElfSection("test", data=ByteArray("pants"))
        sect = sect.prepare(0, 0, 0, 32, '<')
        self.assertRaises(InvalidArgument, sect.set_size, 14)

        sect = UnpreparedElfSection("test", SHT_NOBITS)
        sect.set_size(37)
        sect = sect.prepare(0, 0, 0, 32, '<')
        self.assertRaises(InvalidArgument, sect.set_size, 69)

        sect = UnpreparedElfSection("test", SHT_NOBITS)
        sect.set_size(37)
        sect = sect.prepare(0, 0, 0, 32, '<')
        sect.set_size(12)
        self.assertEqual(sect.get_size(), 12)