Здравствуйте Demiurg, Вы писали:
D>Привет всем! D> Никто не подскажет алгоритм определения длины произвольной команды? Составлять таблицу соответсвий очень уж неохота...
Вопрос задан не корректно.
Длинна команды зависит от
1. Самого КОП
2. Операндов
3. Адресации
3. Особенностей....другого характера
Тебе нужен словарь КОП
Система расшифровки други полей...
Однако лучше всего, сделать расширенный словарь, по первым двум байтам команды.
И анализ операндов, если приходиться
Здравствуйте Edmond, Вы писали:
D>> Никто не подскажет алгоритм определения длины произвольной команды? Составлять таблицу соответсвий очень уж неохота...
E>Вопрос задан не корректно.
E>Длинна команды зависит от
E>1. Самого КОП E>2. Операндов E>3. Адресации E>3. Особенностей....другого характера
Ну почему же некорректно? Все эти зависимости я знаю, но очень трудно определить длину любой команды. Поэтому и спросил
E>Тебе нужен словарь КОП E>Система расшифровки други полей...
Вот-вот. КОП — не проблема. Нужен алгоритм расшифровки других полей. Ну или посоветуйте какое-нибудь хорошее подробное описание структуры команды, а то я везде вкратце встречал.
E>Однако лучше всего, сделать расширенный словарь, по первым двум байтам команды. E>И анализ операндов, если приходиться
E>Так что вот так... Легко не отделаться
Здравствуйте Demiurg, Вы писали:
D>Здравствуйте Edmond, Вы писали:
D>>> Никто не подскажет алгоритм определения длины произвольной команды? Составлять таблицу соответсвий очень уж неохота...
E>>Вопрос задан не корректно.
E>>Длинна команды зависит от
E>>1. Самого КОП E>>2. Операндов E>>3. Адресации E>>3. Особенностей....другого характера
D> Ну почему же некорректно? Все эти зависимости я знаю, но очень трудно определить длину любой команды. Поэтому и спросил
Ну вот сам и ответил
E>>Тебе нужен словарь КОП E>>Система расшифровки други полей...
D> Вот-вот. КОП — не проблема. Нужен алгоритм расшифровки других полей. Ну или посоветуйте какое-нибудь хорошее подробное описание структуры команды, а то я везде вкратце встречал.
???? Вкратце, а что куроводство интел уже вкратсе ???
Я вроде не жаловался.
Попробую завтра вынести если не в моготу.
Вообще говоря, дома у меня лежит книжечка 286 — архитектура !!!
Во!!!
Там очень подробное описание. По ней и учил кстати.
D> Процессор именно так действует?
Ты себя с процессором не сравнивай. Нет процессор действует не так, в некотором смысле.
Там анализ уже на схемотехническом уровне идёт, а не програмном. Это конечно то же, но не то.
А по смыслу да!!!
Разделка должна идти (на части), однако эта операция может выполяться на схеме, а значит за один такт....
Короче мы полезли не в ту степь... (это уже не асмь..)
Здравствуйте Edmond, Вы писали:
D>> Ну почему же некорректно? Все эти зависимости я знаю, но очень трудно определить длину любой команды. Поэтому и спросил :) E>Ну вот сам и ответил :))
Эхххх... У меня уже полгода эта проблема... :shuffle:
E>>>Тебе нужен словарь КОП E>>>Система расшифровки други полей...
D>> Вот-вот. КОП — не проблема. Нужен алгоритм расшифровки других полей. Ну или посоветуйте какое-нибудь хорошее подробное описание структуры команды, а то я везде вкратце встречал.
E>???? Вкратце, а что куроводство интел уже вкратсе ??? E>Я вроде не жаловался.
А я его не видел :) Надо глянуть.
E>Попробую завтра вынести если не в моготу.
Не понял! :)
E>Вообще говоря, дома у меня лежит книжечка 286 — архитектура !!! E>Во!!! E>Там очень подробное описание. По ней и учил кстати.
Такую книжку я тоже могу достать. Но мучает вопрос — полностью ли описание старых команд соответсвует новым проуам. Я знаю, что обратная совместимость и все такое... Но мне нужны все команды! Причем нужно находить длину со 100% точностью, иначе плохо будет... :) У меня книжка Михаила Гука есть "Процессоры...", так там вроде сказано, что у новых команд могут поменяться значения некторых полей...
D>> Процессор именно так действует?
E>Ты себя с процессором не сравнивай. Нет процессор действует не так, в некотором смысле. E>Там анализ уже на схемотехническом уровне идёт, а не програмном. Это конечно то же, но не то.
Хорошо, дизассемблеры как действуют? Подозреваю, что у них специальные базы команд, но мне так нельзя (объем большой получится). Нужен именно алгоритм. Спасибо за внимание :)
D> Такую книжку я тоже могу достать. Но мучает вопрос — полностью ли описание старых команд соответсвует новым проуам. Я знаю, что обратная совместимость и все такое... Но мне нужны все команды! Причем нужно находить длину со 100% точностью, иначе плохо будет... У меня книжка Михаила Гука есть "Процессоры...", так там вроде сказано, что у новых команд могут поменяться значения некторых полей...
Вово!!!!
И теперь Интель руководство + и всё!!! Тебе большего не надо!!!
D>>> Процессор именно так действует?
E>>Ты себя с процессором не сравнивай. Нет процессор действует не так, в некотором смысле. E>>Там анализ уже на схемотехническом уровне идёт, а не програмном. Это конечно то же, но не то.
D> Хорошо, дизассемблеры как действуют? Подозреваю, что у них специальные базы команд, но мне так нельзя (объем большой получится). Нужен именно алгоритм. Спасибо за внимание
Ты куда убежал? Я только начал.
Вопросик интересный. А я поясняю, что не алгоримт это, а система алгоритмов.. (
Итак. Проблемма вся кроеться в том, что в Интель КОП занимает от четырёх бит до 2 байт...
При этом эти два байта -- по сути можно назвать базовым КОП (такое не в доках Интел)
Двух байтный КОП содержиться только в безоперандных сложных командах.... типа SYSENTER или что там ещё....
Однобайтные -- и часть КОП в другом байте в "тяжёлых командах", со сложной адресацией...
Поскольку архитектура такова, то и анализ проходит:
1. Сперва 4 бита -- это точно КОП!!!
2. Делаються предположения...
2.1 Выявить двухбайтный КОП легко, такие команды не многочисленны
2.2 Если это команда с однобайтным КОП..., проверить след четыре бита...
3. После того как КОП определён, будет легче..
То есть вся тонкость в определении КОП.. сдесь без мини БД или словаря не обойтись
Или, создать побитовый анализинг...
В любом случае, первый твой шаг:
Выписать все команды, ипопытаться усмотреть зависимоть в определении КОП.
Удачи...
Если появяться вопросы мыль на EdmondXASM@mail.ru
E>Итак. Проблемма вся кроеться в том, что в Интель КОП занимает от четырёх бит до 2 байт...
А вы случаем не забываете про кучу возможных перфиксов? Типа максимальная длина ia32 инстррукции == 16 байт...
E>Выписать все команды, ипопытаться усмотреть зависимоть в определении КОП.
И снова нее — сначала стоит посмотреть готовый дизассемблер длин:
Здравствуйте Dr.Golova, Вы писали:
E>>Итак. Проблемма вся кроеться в том, что в Интель КОП занимает от четырёх бит до 2 байт...
D.G>А вы случаем не забываете про кучу возможных перфиксов?
Ой, кучу, их где-то не более десяти
Типа максимальная длина ia32 инстррукции == 16 байт...!!! Так и есть!!!
E>>Выписать все команды, ипопытаться усмотреть зависимоть в определении КОП.
D.G>И снова нее — сначала стоит посмотреть готовый дизассемблер длин:
D>> Такую книжку я тоже могу достать. Но мучает вопрос — полностью ли описание старых команд соответсвует новым проуам. Я знаю, что обратная совместимость и все такое... Но мне нужны все команды! Причем нужно находить длину со 100% точностью, иначе плохо будет... У меня книжка Михаила Гука есть "Процессоры...", так там вроде сказано, что у новых команд могут поменяться значения некторых полей...
E>Вово!!!! E>И теперь Интель руководство + и всё!!! Тебе большего не надо!!!
Вот и хорошо
D>> Хорошо, дизассемблеры как действуют? Подозреваю, что у них специальные базы команд, но мне так нельзя (объем большой получится). Нужен именно алгоритм. Спасибо за внимание
E>Ты куда убежал? Я только начал.
Да здесь я. Никуда не убегал. А ты разве не закончил? Что еще можешь предложить?
E>Однобайтные -- и часть КОП в другом байте в "тяжёлых командах", со сложной адресацией...
E>Поскольку архитектура такова, то и анализ проходит:
E>1. Сперва 4 бита -- это точно КОП!!!
E>2. Делаються предположения...
Ага. Вот это не люблю я. Эх, был бы RISC!
E>Удачи... E>Если появяться вопросы мыль на EdmondXASM@mail.ru
Здравствуйте Dr.Golova, Вы писали:
E>>Итак. Проблемма вся кроеться в том, что в Интель КОП занимает от четырёх бит до 2 байт...
D.G>А вы случаем не забываете про кучу возможных перфиксов? Типа максимальная длина ia32 инстррукции == 16 байт...
Так это всей инструкции, а он КОП имел ввиду. Хотя я точно и не помню максимальную длину инструкции, разве не больше 16 байт?
Здравствуйте Demiurg, Вы писали:
D>Здравствуйте Dr.Golova, Вы писали:
E>>>Итак. Проблемма вся кроеться в том, что в Интель КОП занимает от четырёх бит до 2 байт...
D.G>>А вы случаем не забываете про кучу возможных перфиксов? Типа максимальная длина ia32 инстррукции == 16 байт...
D> Так это всей инструкции, а он КОП имел ввиду. Хотя я точно и не помню максимальную длину инструкции, разве не больше 16 байт?
Не больше.... (хотя и я не помню, но это просто)
Нет, не больше.
Есть библиотека Detours (http://research.microsoft.com/sn/detours/)
и у нее в исходниках функция CDetourDis::CopyInstruction().
Так вот, она как раз и возвращает длину инструкции.
Здравствуйте, Demiurg, Вы писали:
D>Привет всем! D> Никто не подскажет алгоритм определения длины произвольной команды? Составлять таблицу соответсвий очень уж неохота...
Не совсем понятно...
произвольная команда выглядит как?
как кусок уже готового кода
или, типа, пользователь пишет "mov eax,ebx", а ты ему: 1 байт длина.
если готовый код — так запускаем его на исполнение и смотрим как изменяется регистр EIP...
Особенно классно мы будет испольнять инструкции типа int хх, также хорошо пойдет mov CR0, mov CR3 и т.п.
LV>если готовый код — так запускаем его на исполнение и смотрим как изменяется регистр EIP...
Здравствуйте, Leonid V. Volnin, Вы писали:
LV>Здравствуйте, Demiurg, Вы писали:
LV>Не совсем понятно... LV>произвольная команда выглядит как? LV>как кусок уже готового кода LV>или, типа, пользователь пишет "mov eax,ebx", а ты ему: 1 байт длина.
LV>если готовый код — так запускаем его на исполнение и смотрим как изменяется регистр EIP...
При чем здесь EIP? Воспользоваться услугами процессора я не могу, при всем желании Вопрос был, собственно такой: есть программный (машинный) код где-то в памяти, нужно получить массив длин всех команд, которые там есть, естественно, что число елементов массива равно числу команд в этом куске кода (машинного!) Так понятнее? А вообще я хамски решил эту проблему, воспользовавшись куском кода одного дизасма, который друг давно написал Времени не было... Правда работает это все только на простых командах, но большего и не требовалось...
Как-нить выберу время и напишу универсальную программу