Мое почтение всем. Читаю сейчас "ОБРАЗ МЫШЛЕНИЯ – ДИЗАССЕМБЛЕР IDA Pro", возникла пара вопросов. В главе №1 содержится такой пример: Не совсем понятно, почему переход условный, он, вроде, безусловный. Но, самое главное, не ясно, почему нельзя использовать клавишу "С", поставив курсор на строку 0x106? Почему неизвестно куда указывает 'jmp si' если известно, что si содержит к этому моменту 0х100? И почему не известно, откуда код, расположенный по адресу 0х106 получит управление (вроде, это адрес 0х103. Или подразумевается, что возможны еще адреса?) И чуть дальше: Почему 'from 0x122'? Это опечатка? Не совсем уверен, что пишу сообщение в тот форум. Пожалуйста, перенесите куда надо (WASM.BOOKS?). Буду рад, если ответит автор книги . Заранее благодарен.
Вроде, в .com файлах после загрузки si всегда содержит 0x100. И что насчет клавиши "С", это тоже, получается, опечатка? Скорее, это несостыковка...
опечаток там действительно много, но до переиздания руки никак не дойдут, хотя уже готово несколько глав, где вместо com файлов рассматриваются эльфы, но IDA развивается быстрее, чем я успеваю ее описывать. вообще же говоря, "образом мышления" я пользоваться не рекомендую. скоро в bhv выйдет новая книга по дизассемблированию (мыщъх + кокорева). там ошибок должно быть уже меньше. теперь по теме. переход действительно безусловный. адрес по которому он передает управление формально известен, но это же его каждый раз в уме вычислять надо, что напрягает. лучше вставить комментарий, чтобы потом не повторять одни и те же вычисления по десять раз подряд. клавиша C конечно хорошая штука, но без перекрестной ссылки листинг теряет наглядность. мы не можем _быстро_ сказать откуда данный код получает управления, не можем строить графы и т.д. перекрестные ссылки очень сильно упрощают разбор листингов (особенно больших). в приведенном в книге примере это не столь очевидно (листинг слишком мал), но если код напичкан вызовами в стиле call ebx, где ebx извлекается из памяти по указателю, переданному функции, то чтобы разобраться что именно здесь вызывается необходимо отследить все вызовы данной функции (а они ведь тоже могут вызываться через call ebx), так что статический анализ отдыхает и значение указателей приходится смотреть под отладчиком. вот это я и пытался продемонстрировать (кстати, отладчик так упоминается > Почему 'from 0x122'? Это опечатка? почему опечатка?
Другой литературы нет. Я все равно прочитаю . Нет, это было уточнение, опечатка ли это. М.б. я что-то не уловил. Назрел еще один вопрос. В .id1 файле общее количество страниц описывается словом. Виртуальная память IDA 0xFF000000 байт. Т.е. общее кол-во страниц не описывает всю вирт. память, отводимую IDA?..