Сейчас на форуме: subword, rtsgreg1989, zds (+9 невидимых)

 eXeL@B —› Основной форум —› вопрос для знатоков IDA PRO
Посл.ответ Сообщение

Ранг: 2.0 (гость)
Активность: 0=0
Статус: Участник

Создано: 15 мая 2008 09:45 · Поправил: at0s
· Личное сообщение · #1

Есть образ с ПЗУ, проц 80С188 - это тоже самое что и 80188/80186
1.
IDA неправильно расставляет JMP и CALL, например
seg000:200D3 jbe short near ptr unk_200D9 ; здесь должно стоять jbe loc_200d9
seg000:200D5 xor ax, ax
seg000:200D7 pop bp
seg000:200D8 retn
seg000:200D9 ; ---------------------------------------------------------------------------
seg000:200D9 mov ax, ds:0Eh ; здесь loc_200d9:
seg000:200DC les bx, ds:4
seg000:200E0 sub ax, es:[bx]
seg000:200E3 add ds:0Ch, ax
seg000:200E7 mov al, 0FFh
seg000:200E9 pop bp
seg000:200EA retn
seg000:200EA sub_20082 endp

а unk_200D9 просто адрес в памяти, т.е. адрес 200D9 высчитывает правильно, но метку не ставит
то же самое с CALL- ами
Как заставить эту прогу сделать правилный листинг
2. сегменты: при любом проце (и 8086 и 286) сегменты 32-х битные (200E9 > 0xFFFFh), перебрал все опции - не помогает
как заставить его сегментировать на 16 битные сегменты ?




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

Создано: 15 мая 2008 09:59
· Личное сообщение · #2

при загрузке образа IDA спрашивает какой сегмент программы? 16/32 ?
спрашивает если
- не распознает формат файла
- видит в заголовке формат 16
итд




Ранг: 527.7 (!), 381thx
Активность: 0.160.09
Статус: Участник
Победитель турнира 2010

Создано: 15 мая 2008 10:32
· Личное сообщение · #3

уже бы давно выложил образ, а то в двух топах одно и то-же (приходится лечить по фотографии)

-----
127.0.0.1, sweet 127.0.0.1




Ранг: 2.0 (гость)
Активность: 0=0
Статус: Участник

Создано: 15 мая 2008 10:39
· Личное сообщение · #4

спрашивает
the loaded binary file can be disassmbled in 2 modes
1. 16 bit mode
1. 32
do you want disasm. as 32
отвечаю нет, не находит точку входа, предлагает самому (фигня)
и выдает
seg000:0000 ; File Name : C:\dizasm\m27c4001.bin
seg000:0000 ; Format : Binary file
seg000:0000 ; Base Address: 0000h Range: 0000h - 80000h Loaded length: 80000h
seg000:0000
seg000:0000 .8086
seg000:0000 .model flat



Ранг: 2.0 (гость)
Активность: 0=0
Статус: Участник

Создано: 15 мая 2008 10:58
· Личное сообщение · #5

ОКОВ

>Alt+S - change segment attributes
>- (x) 16-bit segment
>- ( ) 32-bit segment
seg000 00000000 00080000 ? ? ? . . byte 0001 public 16 0000 0000 0000
он так и принимает, но это не помогает



Ранг: 310.8 (мудрец), 29thx
Активность: 0.430
Статус: Участник

Создано: 15 мая 2008 11:49
· Личное сообщение · #6

at0s У тебя образ больше 64 Кб. Значит, либо должны определится(быть определены) сегменты, либо все-таки сегменты(адресация) 32-битные. Судя по 1 посту - 32-битные. Почему ? Надо смотреть начало. Точка входа в бинари задается вручную : выходишь на адрес(в БИОС-е например где-то в конце) и тюкаешь "С" - превратить в код. Далее либо все раскодируется, либо придется искать остальное.
Не надейся что ИДА все сама сделает. Даже на экзешниках приходится долго "рихтовать".
ПЗУ - все в твоих руках, ИДА только дерево вызовов строит, если ты правильно задал адрес загрузки ПЗУ и адрес входа. В любом другом случае построит "ахинею". Возможно у тебя вообще смесь : есть boot-блок в реал режиме, а все остальное 32-протектед.



Ранг: 38.6 (посетитель)
Активность: 0.020
Статус: Участник

Создано: 15 мая 2008 16:04
· Личное сообщение · #7

at0s
Провой кнопкой мышы на unk_200D9 нажимал?!



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

Создано: 16 мая 2008 03:59
· Личное сообщение · #8

Порежь на сегменты по 64К или меньше (Edit-Segments-Create Segment).


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


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