Сейчас на форуме: johnniewalker, NIKOLA (+7 невидимых) |
eXeL@B —› Крэки, обсуждения —› Анализ кода ARM - расчет смещения (адреса) |
Посл.ответ | Сообщение |
|
Создано: 24 января 2017 17:52 · Поправил: Enclave · Личное сообщение · #1 Всем привет. Не очень хорошо понимаю, как рассчитывается смещение (адрес) для данных. Например по адресу 000FB404 имеем: Code:
Code:
Тогда как по адресу 000FB3A4 IDA выдает нам следующее: Code:
Почему так происходит и как можно вычислить адрес соответствующей строки? Подобное было, когда IDA автоматически не создавала функцию, но ведь тут она имеется. |
|
Создано: 24 января 2017 18:14 · Личное сообщение · #2 |
|
Создано: 24 января 2017 20:23 · Поправил: Enclave · Личное сообщение · #3 Ну хорошо. Может пример не совсем удачный. Вот другой. Тут хоть обликайся, никуда не перейдешь. В частности, адреса :00249818 и :00249820 Тут не совсем строки, но там аналогично. Специально искал код покороче, а то все функции довольно длинные. Code:
И после создания функции: Code:
|
|
Создано: 24 января 2017 20:50 · Поправил: reversecode · Личное сообщение · #4 |
|
Создано: 24 января 2017 21:45 · Поправил: Enclave · Личное сообщение · #5 Наверное, но все равно непонятно, как считать. Сегмент, где лежат данные: Code:
Code:
Или вот тоже самое, но с обычной строкой. DATA XREF сразу здесь сразу указывает на код, который адресует строку, но так не везде. Code:
Code:
Code:
Code:
|
|
Создано: 24 января 2017 22:25 · Поправил: reversecode · Личное сообщение · #6 у ида свое представление как что выводить допустим берем с ида Code:
берем онлайн дизассемблер и получаем Code:
https://www.onlinedisassembler.com/odaweb/w2DBYDCZ/0 Добавлено спустя 20 минут что такое 0x1d58 даже я не знаю ))) по опкодам 9F E5 это ldr r12,[pc] дальше идут 11 бит смещения т.е. 0x24(36) туда попадает, 0xC0 уже идет в доп биты Добавлено спустя 22 минуты возможно 0x1d58 это смешение от начала всего файла Добавлено спустя 24 минуты поищите в опциях IDA, возможно есть какая то опция для показа инструкций с PC relative offset и оно будет показывать так как вы хотите [pc,#36] |
|
Создано: 25 января 2017 11:15 · Поправил: Enclave · Личное сообщение · #7 reversecode Кажется, я понял. Указатель _ZTIN3tsd9bluetooth4core6status3stm13StatusStmDataE_ptr расположен по адресу .got:00501ea0 Code:
Этот адрес получается так: берем базовый адрес сегмента .got 00500148, добавляем к нему 0x1d58 (это смещение от его начала), получили 00501ea0. Только в случае со строкой чуть иначе, она расположена в другом сегменте. Здесь его адрес такой - .rodata 004045E8 Сама строка находится здесь .rodata:0042E504 45 56 54 5F+aEvt_start_inqu DCB "EVT_START_INQUIRY",0 Тут немного непонятно, как считать. Code:
|
eXeL@B —› Крэки, обсуждения —› Анализ кода ARM - расчет смещения (адреса) |