seg000:E001FFF7 jmp far ptr 0F000h:0E83Bh Почему эта инструкция находится тут а не по смещению F000:FFF0h. Грузил с базой F000FFFFh и смещением E000FFFF, пробовал также грузить так: база F000h и смещение E000h. Результат не лучше. IDA 5.2. Поделитесь скриптами пожалуйсто для анализа бивисов.
Вроде отпало пока. Загрузил по_умолчанию, но там на точке входа не far jmp, а jmp loc_E7C8, где уже: Код (Text): seg000:E7C8 loc_E7C8: ; CODE XREF: seg000:FFF0j seg000:E7C8 cli seg000:E7C9 shl edx, 10h seg000:E7CD mov fs, ax seg000:E7CF ror eax, 10h seg000:E7D3 mov gs, ax seg000:E7D5 jmp $+3 seg000:E7D8 mov si, 0F000h seg000:E7DB mov ds, si seg000:E7DD assume ds:nothing seg000:E7DD mov si, 0FFF0h seg000:E7E0 mov bl, [si] seg000:E7E2 cmp bl, 0E9h ; 'щ' seg000:E7E5 jnz short loc_E7EC seg000:E7E7 jmp far ptr 0F000h:0E7F1h seg000:E7EC ; --------------------------------------------------------------------------- seg000:E7EC seg000:E7EC loc_E7EC: ; CODE XREF: seg000:E7E5j seg000:E7EC jmp far ptr 0F000h:0E05B Интересно...
Куета какаято. Гружу в иду: Тот самы первый аттач с настройками: база F000h и смещение E000h. Почему не по адресу F000:FFF0h не точка входа.
Что то я не так делаю. Прсто когда с 0 сегментом и смещение грузишь неудобно ходить в иде по джампам, так как там пишется F000:траляля, а если грузишь типа как описано, то точки входа нет на месте, там 0x0. Как это дело настроить правильно?
В чём проблема я догнал. Размер этого бутблока 64кб. Как его грузонуть так чтобы ида понимала jmp xxxx:xxxx, (все такие прыжки что я идел пока, были в локальном сегменте.)
Ещё такой вопрос))) Да заустал я знаю. )) seg000:E7E7 jmp far ptr 0F000h:0E7F1h Так почему ида на распознаёт прыжок. Короче перейти не получается мышью. Как изменить данные сегмента чтоб место перехода было известно иде.
Я думаю ты имешь ввиду криса...пробовал давно как литературу и досуг, теперь пробую как тех. лит.)) n0name судя по отсутствию ответов ты тоже не пробовал...
попробуй просто скачать исходники BIOS. Они были в какойто теме на WASM. И почитай книгу "BIOS Дизассемблирование моделирование программирование" там много интересного.
>Так почему ида на распознаёт прыжок. IDA не может знать, что находится по адресу '0F000h:0E7F1h' в момент выполнения. Уже упомянутый известный автор предлагает ставить на этой строчке комментарий с целевым адресом. Переход по нему (нажатие Enter) будет работать. В некоторых случаях приходится писать несколько адресов (т.е. все значения переменной).
Ну не надо так плохо об интеллекте IDA отзываться... это она знает, просто нужно добиться того, чтобы файл, загруженный в базу, располагался так же, как и при настоящей работе - иначе F000:E7F1 указывает в никуда. Mika0x65: а Вы, наверное, спутали прямой jmp far с косвенным jmp xxx ptr [yyy] (у которого, кстати, нет формы [F000:E7F1]).
diamond Ой, весьма вероятно, часто на глаз путаю. В смысле, нет? 0xEA -- смещение:сегмент кодируются в самой инструкции, 0xFF /5 -- modrm кодирует адрес "дальнего" указателя. Если у punxer 0xEA, то IDA посчитает. Иначе придется самому.
diamond И что ввести в сегмент : смещение для сего? Ещё не понимаю хачем там межсегментный прыжок в одном сегменте?