У меня возникли проблемы с сопоставлением смещений в стеке следов аварийных дампов iOS с смещениями при разборке двоичного файла как вывода otool.Сопоставление смещений в дампе сбоя iOS в дизассемблированном двоичном файле
Может кто-нибудь подтвердить, как в принципе я согласен с ними. Например, если я получаю строку в дампе:
0 myapp 0x00005b0a 0x1000 + 19210
я бы ожидать, что смещение инструкции нарушившей в бинарном файле, чтобы быть 0x5b0a, 0x4b0a .... или что-то еще?
В его декодировании информации заголовка, otool также дает, например, эта информация (фактический код начинается со смещением 0x0000224c в файле):
Section
sectname __text
segname __TEXT
addr 0x0000224c
size 0x00063ad2
offset 4684
align 2^2 (4)
reloff 0
nreloc 0
type S_REGULAR
attributes PURE_INSTRUCTIONS SOME_INSTRUCTIONS
reserved1 0
reserved2 0
Таким образом, я не был на 100% уверен, Я правильно интерпретировал это, но, похоже, он говорит, что код в файле + 0x224c в файле заканчивается со смещением 0x124c в памяти, но тогда я точно не знал, как это связано, например, с местоположением 0x1000.
Проблема, которую я имею, заключается в том, что данный, скажем, смещение 0x5b0a, ни инструкция там ни в 0x4b0a, ни в 0x6b0a не имеет смысла как фактическая инструкция, о которой идет речь (включая тот факт, что, например, места дальше по стеку, 't указывать на инструкции ветвления).
(я знаю, что, по крайней мере, на ранних воплощениях ARM, существует расхождение между значением ПК и соответствующим адресом памяти в связи с конвейером команд. Я был предполагая, что такая разница будет принято во внимание в смещениях, о которых сообщалось в дампе сбоя, или, во всяком случае, я видел бы инструкцию о филиале несколько инструкций с одной стороны от той, на которую указывалось, если такая разница не была учтена ...)
Может ли кто-нибудь проливать свет?
Есть ли причина, которую вы не можете просто символизировать? http://stackoverflow.com/questions/3832900/how-to-manually-symbolicate-ios-crash-to-view-crash-logs/8648232#8648232 –
Я не могу * просто * символизировать, потому что у меня нет файл символа (код компилируется третьей стороной). Однако, если это единственный вариант, то, я думаю, мне придется спросить, могут ли они предоставить файл символов. Таким образом, более того, если у меня есть способ вычислить смещение, это более быстрый процесс для меня в этом конкретном случае. –