|
|
| Посл.отвђт | Сообщенiе |
|
|
Дата: Июн 21, 2004 15:45:08 Известно, что некоторые инструкции проца могут быть двояко закодированы (в смысле 2мя способами). Так вот заметил, что если взять прогу и откомпилить ее фасмом 2 раза подряд, то некоторые места ее будут различаться. Теперь собственно вопрос: можно ли как-нибудь управлять этим процессом, т.е. чтобы я заранее знал, как он (фасм)зокодирует ту или иную инструкцию. ЗЫ. Похоже с масмом похожая ситуация. |
|
|
Дата: Июн 21, 2004 20:16:23 Вероятно, используются макросы? Если просто чистый код, то это что-то странное. У меня ниразу такого не было. Хотя, иногда в коде указываю je/jne, а Оля говорит, что там jz/jnz.. Думается, это можно пофиксить изучением техники оптимизации, хотя все-равно могут быть разногласия. Для полной уверенности можно изучить кодогенератор фасма, но надо ли? |
|
|
Дата: Июн 21, 2004 20:32:11 n0p Хотя, иногда в коде указываю je/jne, а Оля говорит, что там jz/jnz У этих микроинструкций один опкод. Откуда Оле знать какой мнемоник уместнее применить? Хотя, конечно, всегда можно исправить вручную. jekyll спрашивает о противоположной ситуации. jekyll Известно, что некоторые инструкции проца могут быть двояко закодированы И даже тремя и т.д. Какие инструкции имеются в виду? если взять прогу и откомпилить ее фасмом 2 раза В два прохода? Тогда имеет место оптимизация, т.е. замена длинных переходов на короткие и т.д. |
|
|
Дата: Июн 21, 2004 20:57:27 Quantum Хмм.. Заглянул в Большой мануал и убедился.. Ну тогда, как я и предполагал, фиксится более брутальной оптимизацией. |
|
|
Дата: Июн 21, 2004 21:13:20 Quantum Какие инструкции имеются в виду? Я точно не помню, надо мануал от интела поднять. Если я не ошибаюсь там от какого-то бита все зависит, вроде w называеться. Но это не суть дела. В два прохода? Тогда имеет место оптимизация, т.е. замена длинных переходов на короткие и т.д. Да нет, количество проходов может быть и 4 и 6 и 8 и ... Вопрос в том, что берем прогу и компилим, получаем екзешник с одними опкодами, переименовываем его в что нибудь, компилим еще раз - разница бывает в 2 - 4 байта, все зависит от размера программы, и от количества тех инструкций, которые можно двояко кодировать. |
|
|
Дата: Июн 21, 2004 21:47:16 Quantum > В два прохода? Тогда имеет место оптимизация, т.е. замена длинных переходов на короткие и т.д. А ты не путаешь fasm с tasm'ом? Помоему fasm количество проходов выбирает сам и это скрыто от программиста ;-) |
|
|
Дата: Июн 21, 2004 22:21:05 · Поправил: jekyll Asterix А ты не путаешь fasm с tasm'ом? Э........ а что такое tasm? =))) Помоему fasm количество проходов выбирает сам и это скрыто от программиста ;-) Так и есть, но количество он пишет! =) Ладно, я разобрался, сжался в комок и приготовился к тотальному избиению. Мне бы на смещения взглянуть, а я - ох какой крутой компилер, такие фокусы выдает :) Вобщем ламер я поганый, это в PE время компиляции менялось. Хотя теоретически я мог быть прав, но лезть в сырцы фасма лень, думаю что там каждая инструкция жестко закодирована, поэтому из 2х или даже из 3х случаев кодирования инструкции он не выбирает, а жаль. |
|
|
Дата: Июн 21, 2004 22:48:49 > думаю что там каждая инструкция жестко закодирована, поэтому из 2х или даже из 3х случаев кодирования инструкции он не выбирает, а жаль. Как же.. как же.. с подачи S.T.A.S.'а он по разному кодирует команду test ;-) > Так и есть, но количество он пишет! =) Это где он пишет, это "4 passes" в моём скрине что ли ;-) _984755728__fasm.png |
|
|
Дата: Июн 22, 2004 00:59:02 Asterix ага а насчет test я забыл -) хотя на форума фасма читал |
|
|
Дата: Июн 22, 2004 02:21:59 Asterix А ты не путаешь fasm с tasm'ом? Нет, их даже сравнить страшно, не то что спутать :-) |
|
|
Дата: Июн 22, 2004 15:14:36 От этой заморочки с TEST Privalov отказался - некоторым не понравилось (или не поняли они). Хотя короткими вариантами других инструкций (теми, что явно документированными) народ пользуется и не жужжит :). |
|
|
Дата: Июн 22, 2004 18:34:58 S_T_A_S_ От этой заморочки с TEST Privalov отказался А жаль, надо было вынести в опции - вкл/выкл. Кстати, что-то привалов сейчас фасм забросил, здает еще что-то что-ли? |
|
|
Дата: Июн 22, 2004 19:26:57 Privalov реализовал (в некоторых версиях 1.52) это очень грамотно: по умолчанию для аргументов 0..127, генерировался опкод соответствующий байтовому аргументу, а для принудительного указания размерности использовался оператор DWORD, как и с другими инструкциями. Но, под давлением, эта фича была убрана из релиза. |
|
|
Дата: Июн 22, 2004 20:11:02 Известно, что некоторые инструкции проца могут быть двояко закодированы (в смысле 2мя способами) Даже одна инструкция использующая определённую адресацию , может быть в отношении этой адресации закодированна до 7и различными способами имея при этом одинаковый code ID. например существует 7 способов закодировать: 8B08 8B48 00 8B88 00000000 8B0C20 8B4C20 00 8B8C20 00000000 8B0C05 00000000 Всё это: mov ecx,[eax] |
|
|
Дата: Июн 22, 2004 20:22:20 · Поправил: The Svin Похоже с масмом похожая ситуация. Дык на то это и трансляторы. И так с любым из них. Кодирование на асме просто даёт бОльший контроль, но никогда полный. |
|
Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.057 |