Определение длины машинной команды.
От: Demiurg  
Дата: 22.08.02 09:13
Оценка: 3 (1)
Привет всем!
Никто не подскажет алгоритм определения длины произвольной команды? Составлять таблицу соответсвий очень уж неохота...
Re: Определение длины машинной команды.
От: Edmond  
Дата: 22.08.02 10:23
Оценка:
Здравствуйте Demiurg, Вы писали:

D>Привет всем!

D> Никто не подскажет алгоритм определения длины произвольной команды? Составлять таблицу соответсвий очень уж неохота...

Вопрос задан не корректно.

Длинна команды зависит от

1. Самого КОП
2. Операндов
3. Адресации
3. Особенностей....другого характера

Тебе нужен словарь КОП
Система расшифровки други полей...

Однако лучше всего, сделать расширенный словарь, по первым двум байтам команды.
И анализ операндов, если приходиться

Так что вот так... Легко не отделаться
С уважением, Edmond
Re[2]: Определение длины машинной команды.
От: Demiurg  
Дата: 22.08.02 10:40
Оценка:
Здравствуйте Edmond, Вы писали:

D>> Никто не подскажет алгоритм определения длины произвольной команды? Составлять таблицу соответсвий очень уж неохота...


E>Вопрос задан не корректно.


E>Длинна команды зависит от


E>1. Самого КОП

E>2. Операндов
E>3. Адресации
E>3. Особенностей....другого характера

Ну почему же некорректно? Все эти зависимости я знаю, но очень трудно определить длину любой команды. Поэтому и спросил

E>Тебе нужен словарь КОП

E>Система расшифровки други полей...

Вот-вот. КОП — не проблема. Нужен алгоритм расшифровки других полей. Ну или посоветуйте какое-нибудь хорошее подробное описание структуры команды, а то я везде вкратце встречал.

E>Однако лучше всего, сделать расширенный словарь, по первым двум байтам команды.

E>И анализ операндов, если приходиться

E>Так что вот так... Легко не отделаться


Процессор именно так действует?
Re[3]: Определение длины машинной команды.
От: Edmond  
Дата: 22.08.02 10:55
Оценка:
Здравствуйте Demiurg, Вы писали:

D>Здравствуйте Edmond, Вы писали:


D>>> Никто не подскажет алгоритм определения длины произвольной команды? Составлять таблицу соответсвий очень уж неохота...


E>>Вопрос задан не корректно.


E>>Длинна команды зависит от


E>>1. Самого КОП

E>>2. Операндов
E>>3. Адресации
E>>3. Особенностей....другого характера

D> Ну почему же некорректно? Все эти зависимости я знаю, но очень трудно определить длину любой команды. Поэтому и спросил

Ну вот сам и ответил

E>>Тебе нужен словарь КОП

E>>Система расшифровки други полей...

D> Вот-вот. КОП — не проблема. Нужен алгоритм расшифровки других полей. Ну или посоветуйте какое-нибудь хорошее подробное описание структуры команды, а то я везде вкратце встречал.


???? Вкратце, а что куроводство интел уже вкратсе ???
Я вроде не жаловался.

Попробую завтра вынести если не в моготу.

Вообще говоря, дома у меня лежит книжечка 286 — архитектура !!!
Во!!!
Там очень подробное описание. По ней и учил кстати.

D> Процессор именно так действует?


Ты себя с процессором не сравнивай. Нет процессор действует не так, в некотором смысле.
Там анализ уже на схемотехническом уровне идёт, а не програмном. Это конечно то же, но не то.

А по смыслу да!!!

Разделка должна идти (на части), однако эта операция может выполяться на схеме, а значит за один такт....

Короче мы полезли не в ту степь... (это уже не асмь..)
С уважением, Edmond
Re[4]: Определение длины машинной команды.
От: Demiurg  
Дата: 22.08.02 11:40
Оценка:
Здравствуйте Edmond, Вы писали:

D>> Ну почему же некорректно? Все эти зависимости я знаю, но очень трудно определить длину любой команды. Поэтому и спросил :)

E>Ну вот сам и ответил :))

Эхххх... У меня уже полгода эта проблема... :shuffle:

E>>>Тебе нужен словарь КОП

E>>>Система расшифровки други полей...

D>> Вот-вот. КОП — не проблема. Нужен алгоритм расшифровки других полей. Ну или посоветуйте какое-нибудь хорошее подробное описание структуры команды, а то я везде вкратце встречал.


E>???? Вкратце, а что куроводство интел уже вкратсе ???

E>Я вроде не жаловался.

А я его не видел :) Надо глянуть.

E>Попробую завтра вынести если не в моготу.


Не понял! :)

E>Вообще говоря, дома у меня лежит книжечка 286 — архитектура !!!

E>Во!!!
E>Там очень подробное описание. По ней и учил кстати.

Такую книжку я тоже могу достать. Но мучает вопрос — полностью ли описание старых команд соответсвует новым проуам. Я знаю, что обратная совместимость и все такое... Но мне нужны все команды! Причем нужно находить длину со 100% точностью, иначе плохо будет... :) У меня книжка Михаила Гука есть "Процессоры...", так там вроде сказано, что у новых команд могут поменяться значения некторых полей...

D>> Процессор именно так действует?


E>Ты себя с процессором не сравнивай. Нет процессор действует не так, в некотором смысле.

E>Там анализ уже на схемотехническом уровне идёт, а не програмном. Это конечно то же, но не то.

Хорошо, дизассемблеры как действуют? Подозреваю, что у них специальные базы команд, но мне так нельзя (объем большой получится). Нужен именно алгоритм. Спасибо за внимание :)
Re[5]: Определение длины машинной команды.
От: Edmond  
Дата: 23.08.02 07:00
Оценка:
D> Не понял!

Тутсы Интела есть.... Предлагал принести...


D> Такую книжку я тоже могу достать. Но мучает вопрос — полностью ли описание старых команд соответсвует новым проуам. Я знаю, что обратная совместимость и все такое... Но мне нужны все команды! Причем нужно находить длину со 100% точностью, иначе плохо будет... У меня книжка Михаила Гука есть "Процессоры...", так там вроде сказано, что у новых команд могут поменяться значения некторых полей...


Вово!!!!
И теперь Интель руководство + и всё!!! Тебе большего не надо!!!

D>>> Процессор именно так действует?


E>>Ты себя с процессором не сравнивай. Нет процессор действует не так, в некотором смысле.

E>>Там анализ уже на схемотехническом уровне идёт, а не програмном. Это конечно то же, но не то.

D> Хорошо, дизассемблеры как действуют? Подозреваю, что у них специальные базы команд, но мне так нельзя (объем большой получится). Нужен именно алгоритм. Спасибо за внимание



Ты куда убежал? Я только начал.

Вопросик интересный. А я поясняю, что не алгоримт это, а система алгоритмов.. (

Итак. Проблемма вся кроеться в том, что в Интель КОП занимает от четырёх бит до 2 байт...

При этом эти два байта -- по сути можно назвать базовым КОП (такое не в доках Интел)

Двух байтный КОП содержиться только в безоперандных сложных командах.... типа SYSENTER или что там ещё....

Однобайтные -- и часть КОП в другом байте в "тяжёлых командах", со сложной адресацией...

Поскольку архитектура такова, то и анализ проходит:

1. Сперва 4 бита -- это точно КОП!!!

2. Делаються предположения...

2.1 Выявить двухбайтный КОП легко, такие команды не многочисленны

2.2 Если это команда с однобайтным КОП..., проверить след четыре бита...

3. После того как КОП определён, будет легче..

То есть вся тонкость в определении КОП.. сдесь без мини БД или словаря не обойтись
Или, создать побитовый анализинг...

В любом случае, первый твой шаг:

Выписать все команды, ипопытаться усмотреть зависимоть в определении КОП.

Удачи...
Если появяться вопросы мыль на EdmondXASM@mail.ru
С уважением, Edmond
Re[6]: Определение длины машинной команды.
От: Dr.Golova  
Дата: 23.08.02 22:32
Оценка:
E>Итак. Проблемма вся кроеться в том, что в Интель КОП занимает от четырёх бит до 2 байт...

А вы случаем не забываете про кучу возможных перфиксов? Типа максимальная длина ia32 инстррукции == 16 байт...

E>Выписать все команды, ипопытаться усмотреть зависимоть в определении КОП.


И снова нее — сначала стоит посмотреть готовый дизассемблер длин:

http://z0mbie.host.sk/lde106.zip

BTW, сишную версию могу замылить если нада.
Re[7]: Определение длины машинной команды.
От: Edmond  
Дата: 27.08.02 07:43
Оценка:
Здравствуйте Dr.Golova, Вы писали:

E>>Итак. Проблемма вся кроеться в том, что в Интель КОП занимает от четырёх бит до 2 байт...


D.G>А вы случаем не забываете про кучу возможных перфиксов?


Ой, кучу, их где-то не более десяти

Типа максимальная длина ia32 инстррукции == 16 байт...!!! Так и есть!!!

E>>Выписать все команды, ипопытаться усмотреть зависимоть в определении КОП.


D.G>И снова нее — сначала стоит посмотреть готовый дизассемблер длин:


ЭЭЭЭ!!! Он не дизасм пишет!!!

D.G>http://z0mbie.host.sk/lde106.zip


D.G>BTW, сишную версию могу замылить если нада.


Мыль EdmondXASM@mail.ru
Всё надо!!!
С уважением, Edmond
Re[6]: Определение длины машинной команды.
От: Demiurg  
Дата: 27.08.02 15:32
Оценка:
Здравствуйте Edmond, Вы писали:


D>> Такую книжку я тоже могу достать. Но мучает вопрос — полностью ли описание старых команд соответсвует новым проуам. Я знаю, что обратная совместимость и все такое... Но мне нужны все команды! Причем нужно находить длину со 100% точностью, иначе плохо будет... У меня книжка Михаила Гука есть "Процессоры...", так там вроде сказано, что у новых команд могут поменяться значения некторых полей...


E>Вово!!!!

E>И теперь Интель руководство + и всё!!! Тебе большего не надо!!!

Вот и хорошо

D>> Хорошо, дизассемблеры как действуют? Подозреваю, что у них специальные базы команд, но мне так нельзя (объем большой получится). Нужен именно алгоритм. Спасибо за внимание



E>Ты куда убежал? Я только начал.


Да здесь я. Никуда не убегал. А ты разве не закончил? Что еще можешь предложить?

E>Однобайтные -- и часть КОП в другом байте в "тяжёлых командах", со сложной адресацией...


E>Поскольку архитектура такова, то и анализ проходит:


E>1. Сперва 4 бита -- это точно КОП!!!


E>2. Делаються предположения...


Ага. Вот это не люблю я. Эх, был бы RISC!


E>Удачи...

E>Если появяться вопросы мыль на EdmondXASM@mail.ru

Спасибо.
Re[7]: Определение длины машинной команды.
От: Demiurg  
Дата: 27.08.02 15:34
Оценка:
Здравствуйте Dr.Golova, Вы писали:

E>>Итак. Проблемма вся кроеться в том, что в Интель КОП занимает от четырёх бит до 2 байт...


D.G>А вы случаем не забываете про кучу возможных перфиксов? Типа максимальная длина ia32 инстррукции == 16 байт...


Так это всей инструкции, а он КОП имел ввиду. Хотя я точно и не помню максимальную длину инструкции, разве не больше 16 байт?
Re[8]: Определение длины машинной команды.
От: Edmond  
Дата: 29.08.02 06:15
Оценка:
Здравствуйте Demiurg, Вы писали:

D>Здравствуйте Dr.Golova, Вы писали:


E>>>Итак. Проблемма вся кроеться в том, что в Интель КОП занимает от четырёх бит до 2 байт...


D.G>>А вы случаем не забываете про кучу возможных перфиксов? Типа максимальная длина ia32 инстррукции == 16 байт...


D> Так это всей инструкции, а он КОП имел ввиду. Хотя я точно и не помню максимальную длину инструкции, разве не больше 16 байт?


Не больше.... (хотя и я не помню, но это просто)
Нет, не больше.
С уважением, Edmond
Re[9]: Определение длины машинной команды.
От: Snax Россия  
Дата: 10.01.03 02:00
Оценка: 12 (1)
Есть библиотека Detours (http://research.microsoft.com/sn/detours/)
и у нее в исходниках функция CDetourDis::CopyInstruction().
Так вот, она как раз и возвращает длину инструкции.

Павел.
Re: Определение длины машинной команды.
От: Leonid V. Volnin Россия  
Дата: 10.01.03 04:30
Оценка:
Здравствуйте, Demiurg, Вы писали:

D>Привет всем!

D> Никто не подскажет алгоритм определения длины произвольной команды? Составлять таблицу соответсвий очень уж неохота...

Не совсем понятно...
произвольная команда выглядит как?
как кусок уже готового кода
или, типа, пользователь пишет "mov eax,ebx", а ты ему: 1 байт длина.

если готовый код — так запускаем его на исполнение и смотрим как изменяется регистр EIP...
best regards, Leonid
Re[2]: Определение длины машинной команды.
От: Andrew S Россия http://alchemy-lab.com
Дата: 10.01.03 08:19
Оценка: 3 (1)
Особенно классно мы будет испольнять инструкции типа int хх, также хорошо пойдет mov CR0, mov CR3 и т.п.

LV>если готовый код — так запускаем его на исполнение и смотрим как изменяется регистр EIP...
http://www.rusyaz.ru/pr — стараемся писАть по-русски
Re[2]: Определение длины машинной команды.
От: Demiurg  
Дата: 16.01.03 15:32
Оценка:
Здравствуйте, Leonid V. Volnin, Вы писали:

LV>Здравствуйте, Demiurg, Вы писали:


LV>Не совсем понятно...

LV>произвольная команда выглядит как?
LV>как кусок уже готового кода
LV>или, типа, пользователь пишет "mov eax,ebx", а ты ему: 1 байт длина.

LV>если готовый код — так запускаем его на исполнение и смотрим как изменяется регистр EIP...


При чем здесь EIP? Воспользоваться услугами процессора я не могу, при всем желании Вопрос был, собственно такой: есть программный (машинный) код где-то в памяти, нужно получить массив длин всех команд, которые там есть, естественно, что число елементов массива равно числу команд в этом куске кода (машинного!) Так понятнее? А вообще я хамски решил эту проблему, воспользовавшись куском кода одного дизасма, который друг давно написал Времени не было... Правда работает это все только на простых командах, но большего и не требовалось...
Как-нить выберу время и напишу универсальную программу
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.