eXeLab
eXeL@B ВИДЕОКУРС !

ВИДЕОКУРС
выпущен 4 ноября!


УЗНАТЬ БОЛЬШЕ >>
Домой | Статьи | RAR-cтатьи | FAQ | Форум | Скачать | Видеокурс
Новичку | Ссылки | Программирование | Интервью | Архив | Связь

Русский / Russian English / Английский

Сейчас на форуме: (+3 невидимых)
 · Начало · Статистика · Регистрация · Поиск · ПРАВИЛА ФОРУМА · Язык · RSS · SVN ·

 eXeL@B —› Основной форум —› Нужен ARM7 специалист
Посл.ответ Сообщение

Ранг: 575.6 (!)
Статус: Модератор

Создано: 17 августа 2010 15:17 New!
Цитата · Личное сообщение · #1

Разовая работа, помочь разобраться в коде. ПМ


Ранг: 1993.2 (!!!!)
Статус: Модератор
retired

Создано: 17 августа 2010 17:18 New!
Цитата · Личное сообщение · #2

Закрою. Кому нужно-пишите автору в личку.


Статус: Пришелец

Создано: 17 августа 2010 17:26 New!
Цитата #3

Арчеру лишь бы закрыть, никто бы не стал здесь флудить, я гарантирую это.


Ранг: 1993.2 (!!!!)
Статус: Модератор
retired

Создано: 20 августа 2010 15:34 New!
Цитата · Личное сообщение · #4

Обратно открыл по просьбе автора.

Ранг: 575.6 (!)
Статус: Модератор

Создано: 20 августа 2010 18:27 New!
Цитата · Личное сообщение · #5

Есть кусок кода
Code:
  1. ROM:00005A7C 06 10 A0 E1                 MOV     R1, R6
  2. ROM:00005A80 05 00 A0 E1                 MOV     R0, R5
  3. ROM:00005A84 C9 EC FF EB                 BL      dword_DB0

при этом
Code:
  1. ROM:00000DB0 00 00 00 28 dword_DB0       DCD 0x28000000

блок данных, что противоречит коду. Переход должен быть на код.

Где искать ошибку?


Ранг: 164.6 (ветеран)
Статус: Участник
Волшебник

Создано: 20 августа 2010 20:22 · Поправил: neomant New!
Цитата · Личное сообщение · #6

Возможно, конечно, неправильно считаю(даже на пальцах), но у меня получается смещение -4CDCh.
И полный адрес DA8 = 5A84 + (-4CDC)


Ранг: 481.4 (мудрец)
Статус: Участник
Тот самый :)

Создано: 20 августа 2010 20:25 New!
Цитата · Личное сообщение · #7

r_e пишет:
Есть кусок кода

Code:


ROM:00005A7C 06 10 A0 E1                 MOV     R1, R6ROM:00005A80 05  00 A0 E1                 MOV     R0, R5ROM:00005A84 C9 EC FF EB                  BL      dword_DB0


при этом

Code:


ROM:00000DB0 00 00 00 28 dword_DB0       DCD 0x28000000


блок данных, что противоречит коду. Переход должен быть на код.Где искать ошибку?

В ДНК

Это вызов функции через указатель. По адресу 28000000 должен быть код, куда оно переходит. Видимо база иды составлена не до конца: не догружены нужные куски, или не найден ремаппинг и не созданы все сегменты.

Ранг: 575.6 (!)
Статус: Модератор

Создано: 20 августа 2010 22:30 New!
Цитата · Личное сообщение · #8

neomant
C9 EC FF EB : Offset = (-0xFFECC9 << 2) => Addr = 0xDA8
Думаю, что ида корректно адресацию считает.

Hexxx
Шутник, в каком руководстве имеется информация по вызовам в арме через указатель? Видел только
B[cond] label
B[cond] Rm
Ремаппинг там только sdram в нулевую базу, но это в базе иды видно. По поводу остальных кусков - поищу, но код там не прослеживается. Может содрали бинарь криво.

p.s. Стучал тебе в асю, но как-то глухо.


Ранг: 481.4 (мудрец)
Статус: Участник
Тот самый :)

Создано: 21 августа 2010 13:12 · Поправил: Hexxx New!
Цитата · Личное сообщение · #9

r_e пишет:
в каком руководстве имеется информация по вызовам в арме через указатель?

В руководстве под названием "я реверсил Си и видел как оно выглядит в ARM ассемблере"

Этот кусок ассемблера аналогичен:
Code:
  1. typedef (*void)SomeFunc(int,int);
  2.  
  3. SomeFunc dword_DB0=(SomeFunc)0x28000000;
  4.  
  5. dword_DB0(R5, R6);


Я вообще о том, что там код инициализации должен копировать куски кода в RAM. И это ида не распознает. Это надо самому найти и создать правильный сегмент. Либо действительно дамп - неполный. Ну или просто сама база иды создана неправильно, код загружен на неправильный базовый адрес. Или вообще это может быть прыжок в IROM. В общем без примера гадать можно долго.


Ранг: 1013.7 (!!!!)
Статус: Участник

Создано: 21 августа 2010 17:30 New!
Цитата · Личное сообщение · #10

в армах я не специалист
но в mips есть такая мулька, что IDA не корректно вычисляет всякие под вызовы и переходы
там переходы вычисляются относительно текущей инструкции например + переход = правильно
а IDA хапает сразу переход = в космос

я к чему говорю
может и в ARM тоже так же криво IDA вычисляет переходы

Ранг: 575.6 (!)
Статус: Модератор

Создано: 21 августа 2010 18:53 New!
Цитата · Личное сообщение · #11

Hexxx
Твой код будет ассемблирован, скорее всего, в регистровый вызов. Как-то так
Code:
  1. LDR R1, =dword_DB0
  2. LDR R12,[R1]
  3. BL R12 ; BX R12

а в указанном выше
Code:
  1. BL dword_DB0

Код должен начинаться c DB0.

Смотри ПМ.

reversecode
В арме тоже смещения относительные. Считал руками - все правильно вычисленно.

Ранг: 20.0 (новичок)
Статус: Участник

Создано: 23 августа 2010 16:33 New!
Цитата · Личное сообщение · #12

хекс и прав и нет. то, что он говорил про указатель - чушь. а вот про то, что, скорее всего, ваш софт при инициализации себя ремапит по разному (например, в rv это называется scatter_load), это правда. смотрите самую инициализацию

Ранг: 78.7 (постоянный)
Статус: Участник

Создано: 23 августа 2010 17:48 New!
Цитата · Личное сообщение · #13

А Можно На Сам Файл Посмотреть ! По 3-м функциям сложно чтото сказать !


Ранг: 481.4 (мудрец)
Статус: Участник
Тот самый :)

Создано: 23 августа 2010 22:39 New!
Цитата · Личное сообщение · #14

gary_gray пишет:
то, что он говорил про указатель - чушь

старческий маразм

Ранг: 575.6 (!)
Статус: Модератор

Создано: 24 августа 2010 00:11 New!
Цитата · Личное сообщение · #15

gary_grayTyra
О ремапах было известно изначально. Сейчас проверяю спорные места.
Как оказалось (спасибо Hexxx) отсутствуют значительные куски памяти. Над этим и работаю.

Если кто может заделиться GreenHills INTEGRITY в каком-либо виде (для идентификации функций) - отзовитесь.

Ранг: 20.0 (новичок)
Статус: Участник

Создано: 24 августа 2010 13:33 New!
Цитата · Личное сообщение · #16

Hexxx
откройте любой референс по опкодам арма и посмотрите. bl не бывает по указателю (вы не путаете с константами из литералпула? ну которые в иде значком = в начале помечены?), в нем содержится чистый офсет до места перехода, деленый на 4. для вызовов по указателю используют bx.


Ранг: 748.2 (! !)
Статус: Участник
bytecode!

Создано: 27 августа 2010 15:08 · Поправил: 4kusNick New!
Цитата · Личное сообщение · #17

А никто не пробовал
http://hex-rays.com/video/arm_decompiler_beta.html
?

added
А, оно только под идой 5.7 работает..=\


Статус: Пришелец

Создано: 27 августа 2010 15:19 New!
Цитата #18

А оно вообще доступно для простых смертных?


Ранг: 355.4 (мудрец)
Статус: Uploader
5KRT

Создано: 28 августа 2010 15:29 New!
Цитата · Личное сообщение · #19

int
Не доступно нихрена, столько времени прошло, а еще нет в сети.
 eXeL@B —› Основной форум —› Нужен ARM7 специалист

Оригинальный DVD-ROM: eXeL@B DVD !

Вы находитесь на форуме сайта EXELAB.RU
Проект ReactOS