Сейчас на форуме: rmn, _MBK_ (+7 невидимых)

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

Ранг: 590.4 (!), 408thx
Активность: 0.360.18
Статус: Модератор

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

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

-----
старый пень





Ранг: 2014.5 (!!!!), 1278thx
Активность: 1.340.25
Статус: Модератор
retired

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

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



Ранг: 101.0 (ветеран), 344thx
Активность: 1.150
Статус: Участник

Создано: 17 августа 2010 17:26
· Личное сообщение · #3

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




Ранг: 2014.5 (!!!!), 1278thx
Активность: 1.340.25
Статус: Модератор
retired

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

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



Ранг: 590.4 (!), 408thx
Активность: 0.360.18
Статус: Модератор

Создано: 20 августа 2010 18:27
· Личное сообщение · #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 (ветеран), 65thx
Активность: 0.120
Статус: Участник
Волшебник

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

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

-----
Следуй за белым кроликом




Ранг: 481.4 (мудрец), 109thx
Активность: 0.180
Статус: Участник
Тот самый :)

Создано: 20 августа 2010 20:25
· Личное сообщение · #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 должен быть код, куда оно переходит. Видимо база иды составлена не до конца: не догружены нужные куски, или не найден ремаппинг и не созданы все сегменты.

-----
Реверсивная инженерия - написание кода идентичного натуральному




Ранг: 590.4 (!), 408thx
Активность: 0.360.18
Статус: Модератор

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

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

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

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

-----
старый пень




Ранг: 481.4 (мудрец), 109thx
Активность: 0.180
Статус: Участник
Тот самый :)

Создано: 21 августа 2010 13:12 · Поправил: Hexxx
· Личное сообщение · #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. В общем без примера гадать можно долго.

-----
Реверсивная инженерия - написание кода идентичного натуральному





Ранг: 1053.6 (!!!!), 1078thx
Активность: 1.060.81
Статус: Участник

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

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

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



Ранг: 590.4 (!), 408thx
Активность: 0.360.18
Статус: Модератор

Создано: 21 августа 2010 18:53
· Личное сообщение · #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 (новичок)
Активность: 0.010
Статус: Участник

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

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



Ранг: 78.7 (постоянный), 43thx
Активность: 0.070
Статус: Участник

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

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



Ранг: 481.4 (мудрец), 109thx
Активность: 0.180
Статус: Участник
Тот самый :)

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

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

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

-----
Реверсивная инженерия - написание кода идентичного натуральному




Ранг: 590.4 (!), 408thx
Активность: 0.360.18
Статус: Модератор

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

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

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

-----
старый пень




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

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

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




Ранг: 748.2 (! !), 390thx
Активность: 0.370
Статус: Участник
bytecode!

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

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

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

-----
Флэш, ява, дотнет - на завтрак, обед и ужин. Unity3D на закуску.




Ранг: 101.0 (ветеран), 344thx
Активность: 1.150
Статус: Участник

Создано: 27 августа 2010 15:19
· Личное сообщение · #18

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




Ранг: 355.4 (мудрец), 55thx
Активность: 0.320
Статус: Uploader
5KRT

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

int
Не доступно нихрена, столько времени прошло, а еще нет в сети.

-----
Gutta cavat lapidem. Feci, quod potui. Faciant meliora potentes



 eXeL@B —› Основной форум —› Нужен ARM7 специалист
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати