Сейчас на форуме: vsv1, igorcauret, Rio (+5 невидимых) |
![]() |
eXeL@B —› Вопросы новичков —› Вопрос по инструкции JMP FAR |
Посл.ответ | Сообщение |
|
Создано: 21 ноября 2015 16:33 · Личное сообщение · #1 Исследую программу Advanced Virtual COM Port. Исследовал успешно, пока не наткнулся вот на такой прыжок: JMP FAR 0033:7321271 . Гуглил - одна теория. Не могу понять, как определить в Ollydbg, куда конкретно осуществляется прыжок? Знаю точно, в результате прыжка происходит сверка пробного периода и ключа! Очень прошу помощи, так как мучаю прогу больше месяца: вошел в азарт, а в этом деле, я только начинаю. ![]() |
|
Создано: 21 ноября 2015 16:40 · Поправил: deniskore · Личное сообщение · #2 Это прыжок в wow64cpu (в х64 режим). ![]() |
|
Создано: 21 ноября 2015 16:41 · Поправил: dosprog · Личное сообщение · #3 |
|
Создано: 21 ноября 2015 17:15 · Личное сообщение · #4 Уточню вопрос, что значит 0033:7321271, как вычислить адрес перехода? Ведь после прыжка по F8 или F7, попадаю совсем непонятно куда, при этом, где произошла остановка (ADD ESP, 4), бряка на инструкции - НЕТ!!!?. Нажимаю еще раз F7, эта инструкция вообще игнорируется, а вместо этого происходит выполнение явно не одной инструкции, в результате которой в дампе появляется байт, указывающий на кол-во оставшихся дней пользования программой. Что за "магия", не пойму. ![]() |
|
Создано: 21 ноября 2015 17:31 · Поправил: dosprog · Личное сообщение · #5 На какой ОС это всё запускается? Для какой ОС предназначена программа? IranR пишет: что значит 0033:7321271, как вычислить адрес перехода? А что же тут вычислять, если он задан в самой этой инструкции? --Добавлено-- #define X64_Start() X64_Start_with_CS(0x33) //Селектор 33h #define X64_End() X64_End_with_CS(0x23) //Селектор 23h ![]() |
|
Создано: 21 ноября 2015 17:34 · Личное сообщение · #6 |
|
Создано: 21 ноября 2015 17:37 · Личное сообщение · #7 |
|
Создано: 21 ноября 2015 17:40 · Поправил: dosprog · Личное сообщение · #8 IranR пишет: Отладку веду на Win 64. Прога предназначена как для 64, так и для 32. Сперва нужно разобраться под x32 OC. Там не должно быть этих межсегментных прыжков. --Добавлено-- К следующему посту: reversecode пишет: должно быть ..ну тогда под х32 ОС Odbg должен верно отработать такой прыжок. Теоретически.. Или исключение. ![]() |
|
Создано: 21 ноября 2015 17:46 · Личное сообщение · #9 |
|
Создано: 21 ноября 2015 17:49 · Личное сообщение · #10 dosprog пишет: Сперва нужно разобраться под x32 OC Вот тоже склоняюсь к этому, иначе видимо забуксую... dosprog пишет: А что же тут вічислять, если он задан в самой этой инструкции? Когда инструкция например JMP 14514545, я конечно пониманию, что прыгну в 14514545 и не куда иначе, но как насчет интерпретации 0033:7321271 для новичка хотя бы? ![]() |
|
Создано: 21 ноября 2015 17:52 · Поправил: dosprog · Личное сообщение · #11 IranR пишет: Когда инструкция например JMP 14514545, я конечно пониманию, что прыгну в 14514545 и не куда иначе, но как насчет интерпретации 0033:7321271 для новичка хотя бы? Туда же. В 7321271. Но в 64-битном сегменте кода, описанном дескриптором с селектором 33h. Под x32 такое обращение вызовет исключение, так наверное и задумано. В общем, надо пробовать. И кстати, не факт, что того же самого не произойдёт и под х64 ОС. ![]() |
|
Создано: 21 ноября 2015 17:57 · Личное сообщение · #12 reversecode пишет: а тс только в ольке кнопки умеет жать, да выспрашивать что это за jmp Это наверно самая смешная шутка в твоей жизни... Добавлено спустя 8 минут dosprog пишет: ну тогда под х32 ОС Odbg должен верно отработать такой прыжок. Теоретически.. Или исключение. Вот это больше похоже на правду. Проверю, отпишусь. ![]() |
|
Создано: 21 ноября 2015 18:09 · Поправил: dosprog · Личное сообщение · #13 |
|
Создано: 21 ноября 2015 18:17 · Личное сообщение · #14 |
|
Создано: 21 ноября 2015 18:17 · Поправил: reversecode · Личное сообщение · #15 )) ТС бы для начала не одну голую инструкцию тыкал а сразу пучек, которые идут перед джампом )) тогда было бы понятно просто отбалды прыжек или прыжек в стаб ![]() |
|
Создано: 21 ноября 2015 18:43 · Личное сообщение · #16 |
|
Создано: 21 ноября 2015 18:49 · Личное сообщение · #17 |
|
Создано: 21 ноября 2015 18:52 · Поправил: IranR · Личное сообщение · #18 |
|
Создано: 21 ноября 2015 20:22 · Личное сообщение · #19 IranR, читай про сегментную адресацию в защищённом режиме. JMP FAR выполняет переход по адресу в сегмент, указанный селектором (в данном случае - 0x33). Этот адрес вполне может не соответствовать адресному пространству, которое ты видишь в отладчике. Как вариант, в ольке назначь (временно, потом надо вернуть как было) какому-нибудь сегментному регистру (ds,fs,es,gs) значение 0x33, олька покажет базовый адрес сегмента. Приплюсуй к этому базовому адресу относительный (на который выполняется джамп) и увидишь, куда уходит управление при джампе. И да, там вполне может быть х64 код, который олька даже адекватно отобразить не сможет, не то что отладить. ![]() |
|
Создано: 21 ноября 2015 20:49 · Поправил: dosprog · Личное сообщение · #20 -=AkaBOSS=- пишет: Приплюсуй к этому базовому адресу относительный (на который выполняется джамп) Интересно. Откуда это там относительный? Если уже гадать, так гадать - то вообще может быть и не адрес, а код действия для обработчика ошибки обращения к несуществующему сегменту. Пробовать надо, в общем. ![]() |
|
Создано: 21 ноября 2015 21:10 · Поправил: -=AkaBOSS=- · Личное сообщение · #21 dosprog пишет: Интересно. Откуда это там относительный? относительный относительно базового адреса сегмента - не совсем правильно, но выразился чтоб понятнее было. добавлено уже после закрытия темы: Я, на самом деле, не считаю тему сегментной адресации настолько лёгкой и понятной. Для начала - новичкам, столкнувшимся с подобным вопросом, лучше всё же сходить почитать про GDT и дескрипторы, её составляющие (отчасти освещено на васме в цикле статей "Процессоры Intel в защищённом режиме"), а потом уже более опытным взглядом смотреть на селекторы сегментов и содержимое сегментных регмстров. Для старых виндов (ХП и ранее) еще работала прожка DumpXDT - можно было черпать инфо о сегментах из неё. Для современных систем ничего не советую - сам не в курсе, отстал от моды... ![]() |
|
Создано: 21 ноября 2015 21:45 · Личное сообщение · #22 dosprog, твои подозрения были обоснованны. На 32 ОС до этого аномального джампа дело не дошло, а пошло все логичным путем до инструкции INT 2e, после которой в дамп упал байт с оставшимся количеством дней. Спасибо! AkaBOSS, мозайка в голове сложилась ![]() Спасибо всем за ответы! ![]() |
![]() |
eXeL@B —› Вопросы новичков —› Вопрос по инструкции JMP FAR |
Эта тема закрыта. Ответы больше не принимаются. |