Exemple #1
0
    def testFillingFirstPage(self, MockEncodeAddressUnwinds):
        MockEncodeAddressUnwinds.return_value = EncodedAddressUnwind(
            0, b'\x00')

        self.assertEqual(
            [
                EncodedFunctionUnwind(page_number=0,
                                      page_offset=0,
                                      address_unwinds=REFUSE_TO_UNWIND),
                EncodedFunctionUnwind(page_number=0,
                                      page_offset=100 >> 1,
                                      address_unwinds=EncodedAddressUnwind(
                                          0, b'\x00')),
                EncodedFunctionUnwind(page_number=0,
                                      page_offset=200 >> 1,
                                      address_unwinds=EncodedAddressUnwind(
                                          0, b'\x00')),
                EncodedFunctionUnwind(page_number=0,
                                      page_offset=300 >> 1,
                                      address_unwinds=REFUSE_TO_UNWIND),
            ],
            list(
                EncodeFunctionUnwinds([
                    FunctionUnwind(address=1100, size=100, address_unwinds=()),
                    FunctionUnwind(address=1200, size=100, address_unwinds=()),
                ],
                                      text_section_start_address=1000)))
Exemple #2
0
    def testFillingGaps(self, MockEncodeAddressUnwinds):
        MockEncodeAddressUnwinds.return_value = EncodedAddressUnwind(
            0, b'\x00')

        self.assertEqual(
            [
                EncodedFunctionUnwind(page_number=0,
                                      page_offset=0,
                                      address_unwinds=EncodedAddressUnwind(
                                          0, b'\x00')),
                EncodedFunctionUnwind(page_number=0,
                                      page_offset=50 >> 1,
                                      address_unwinds=TRIVIAL_UNWIND),
                EncodedFunctionUnwind(page_number=0,
                                      page_offset=100 >> 1,
                                      address_unwinds=EncodedAddressUnwind(
                                          0, b'\x00')),
            ],
            list(
                EncodeFunctionUnwinds([
                    FunctionUnwind(address=0, size=50, address_unwinds=()),
                    FunctionUnwind(
                        address=100, size=PAGE_SIZE - 100, address_unwinds=()),
                ],
                                      text_section_start_address=0)))
Exemple #3
0
 def testOverlappedFunctions(self, _):
     self.assertRaises(
         # Eval generator with `list`. Otherwise the code will not execute.
         AssertionError,
         lambda: list(
             EncodeFunctionUnwinds([
                 FunctionUnwind(address=0, size=100, address_unwinds=()),
                 FunctionUnwind(address=50, size=100, address_unwinds=()),
             ])))
Exemple #4
0
 def testSuccessUnwind(self):
     self.assertEqual(
         [
             FunctionUnwind(address=0x100,
                            size=1024,
                            address_unwinds=(
                                AddressUnwind(
                                    address_offset=0x0,
                                    unwind_type=UnwindType.RETURN_TO_LR,
                                    sp_offset=0,
                                    registers=(),
                                ),
                                AddressUnwind(
                                    address_offset=0x200,
                                    unwind_type=UnwindType.RETURN_TO_LR,
                                    sp_offset=0,
                                    registers=(),
                                ),
                            ))
         ],
         list(
             GenerateUnwinds([
                 FunctionCfi(size=1024,
                             address_cfi=(
                                 AddressCfi(address=0x100,
                                            unwind_instructions='RETURN'),
                                 AddressCfi(address=0x300,
                                            unwind_instructions='RETURN'),
                             ))
             ],
                             parsers=[MockReturnParser()])))
Exemple #5
0
    def testEncodeOrder(self, MockEncodeAddressUnwinds):
        MockEncodeAddressUnwinds.return_value = EncodedAddressUnwind(
            0, b'\x00')

        self.assertEqual([
            EncodedFunctionUnwind(page_number=0,
                                  page_offset=0,
                                  address_unwinds=EncodedAddressUnwind(
                                      0, b'\x00')),
            EncodedFunctionUnwind(page_number=0,
                                  page_offset=100 >> 1,
                                  address_unwinds=EncodedAddressUnwind(
                                      0, b'\x00')),
        ],
                         list(
                             EncodeFunctionUnwinds([
                                 FunctionUnwind(address=100,
                                                size=PAGE_SIZE - 100,
                                                address_unwinds=()),
                                 FunctionUnwind(address=0,
                                                size=100,
                                                address_unwinds=()),
                             ])))