Базовые адреса (программные счетчики) символов (методов и функций) не совпадают. Выкл 1

У меня есть некоторый код в моем приложении, который посылает мне трассировку стека необработанных исключений.

"0   CoreFoundation   0x3ad073ff  + 186",
"1   libobjc.A.dylib  0x39412963 objc_exception_throw + 30",
"2   CoreFoundation   0x3ad0729d  + 0",
"3   Foundation       0x39f3b7b3  + 90",
"4   UIKit            0x34a3ae29  + 4184",
"5   MyApp            0x0001feab -[MAMyClassA firstMethod:withParameter1:andParameter2:] + 374",
"6   MyApp            0x000f76b5 -[MAMyClassB secondMethod:withParameter1:andParameter2:] + 164",
"7   UIKit            0x34bd0fe1  + 84",
"8   UIKit            0x34af2047  + 70",
"9   UIKit            0x34af1ffb  + 30",
"10  UIKit            0x34af1fd5  + 44",
...

Как видите, большая часть Apples методы заменены на, Мне удалось извлечь символы и соответствующие им базовые адреса из Apple 'библиотеки с использованиемnm, но адреса не совпадают. Они выключены на 1.

Я рассчитал адрес, как описано здесь:Отчеты о сбоях iOS: atos не работает должным образом.

Symbol address = (base address of framework) - (base address of symbol from crash report) + (virtual memory slide [vmaddr]).

Например, яm получает 0xC2345, но фактический адрес символа возвращаетсяnm 0xC2344. Я знаю, что это правильный символ. Я пробовал это с разными адресами в разных платформах (UIKit, Foundation, CoreFoundation и т. Д.) В разных отчетах о сбоях, и результат один и тот же: значение всегда отключено на 1. Я должен вычесть 1 из того, что получаю в отчет о сбое, чтобы получитьправо" адрес, указанный.nm

Когда я набираю этот вопрос, я нашел это:Неправильный метод реализации адреса из otool для armv7 ?.

Означает ли это, что каждый раз, когда у меня есть адрес для поиска, я должен выполнить следующую логику?

if ((symbol address) mod 2 == 1) {
  // This is a thumb instruction so it may be 2 or four bytes
  Subtract 1 from the symbol address and then use it to lookup the symbol.
}
else {
  // This is a standard 4-byte ARM instruction.
  Perform symbol lookup with the address as is.
}

Заранее спасибо за любую помощь или направление.

Ответы на вопрос(1)

Ваш ответ на вопрос