Какой компилятор и где хелп?

Тема в разделе "WASM.BEGINNERS", создана пользователем Mika0x65, 30 июл 2005.

Статус темы:
Закрыта.
  1. Mika0x65

    Mika0x65 New Member

    Публикаций:
    0
    Регистрация:
    30 июл 2005
    Сообщения:
    1.384
    Всем здравия.



    Ситуация: читаю книгу по архитектуре и ассемблеру x86. Чую, что бз практики уложить все это в голове не просто. Требуется компилятор для ассемблера.



    Что надо: самый простой компилятор, где все делается руками, т.е. без наворотов, дабы прочувствовать все "изнутри". Также, нужен хелп к нему, причем, хотелось бы "голый", т.е. без объяснений, что такое сегменты и т.д. Еще хотелось бы, чтобы в нем была возможность просмотреть опкоды, а то надоело уже лазать фаром в исполняемый :).



    И заодно теритический вопросик:



    Насколько я правильно понял, сегментная организация памяти, в защищенном режиме не гарантирует защиты задач с одинаковым уровнем привелегий друг от друга Т.е. я могу запросто сменить селектор в сегментом регистре и покопаться, например, в памяти другой задачи. Собственно, вопрос: верно ли понят материал? :)
     
  2. cresta

    cresta Active Member

    Публикаций:
    0
    Регистрация:
    13 июн 2004
    Сообщения:
    2.257
    Самый простой компилятор наверное не самый лучший, в т.ч и для анализа.



    Руками можно работать практически с любым компилятором из распростаненных на сегодняшний день. Самые распространенные - masm и fasm. И с тем, и с другим можно работать руками. Масм можно взять тут:

    http://website.masmforum.com//masm32/m32v82r.zip

    В этом же пакете есть примерчики, хэлпы (хотя непонятно, что значит голый хэлп), разные утилитки, исходники и простенький редактор, который может сгодится в качестве просмотрщика кода exe-файлов.



    А вообще-то ковыряться в exe лучше с чем-нибудь вроде OllyDbg.



    Что касается fasm'a - это на flatassembler.com.
     
  3. S_T_A_S_

    S_T_A_S_ New Member

    Публикаций:
    0
    Регистрация:
    27 окт 2003
    Сообщения:
    1.754
  4. Mika0x65

    Mika0x65 New Member

    Публикаций:
    0
    Регистрация:
    30 июл 2005
    Сообщения:
    1.384
    Спасибо всем, думаю, пока остановлюсь на fasm'e -- предельно прост, по крайней мере на первый взгляд. Пугает, правда, что он сам что-то там оптимизировать собирается, но, думаю, это возможно отключить.





    Такой, как в fasm'e, если убрать вторую главу :).
     
  5. S_T_A_S_

    S_T_A_S_ New Member

    Публикаций:
    0
    Регистрация:
    27 окт 2003
    Сообщения:
    1.754
    fasm оптимизирует по размеру команды переходов. практически во всех случаях, где возможен 2х байтный опкод он его и сгенерирует, в отличае от masm.



    если нужен обязательно шестибайтный опкод, то можно это указать явно:

    jnz DWORD label
     
  6. R_NEW

    R_NEW New Member

    Публикаций:
    0
    Регистрация:
    6 май 2005
    Сообщения:
    86
    Адрес:
    Россия


    Понял ты правильно, и такое действительно возможно, но:

    1. В реальной системе неизвестно конкретное значение селектора.

    2. Если включена страничная переадресация, и каждая программа имеет своё адресное пространство, то это полностью исключается.
     
  7. Mika0x65

    Mika0x65 New Member

    Публикаций:
    0
    Регистрация:
    30 июл 2005
    Сообщения:
    1.384




    В смысле? Разве оно не загружено в сегментный регистр?.. Насколько я верно понял, я могу выполнить инструкцию sgdt и получу кол-во сегментов в системе. А потом просто пробежаться от значения "7" до передела, полученного из sgdt, с шагом == 4, выполняя инструкцию verw. Мне кажется, должно сработать...*







    * Пардон, конечно, при выключенном страничном преобразовании.
     
  8. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine


    В компиляторе? Есть модификация фасм с возможностью генерации листинга.

    В хелпе? Ищи opcodes.hlp,x86eas.hlp.
     
  9. Mika0x65

    Mika0x65 New Member

    Публикаций:
    0
    Регистрация:
    30 июл 2005
    Сообщения:
    1.384




    Я знал, что компиляторы асма не такие уж низкоуровневые (сейчас), как мне казалось. FASM, например, все время норовит генерировать 16битный код, если ему явно об этом не сказать, у МАСМа, наверняка, свои тонкости. И мне хочется посмотреть потом в исполняемый, дабы убедиться, что там все, как я имел ввиду. Собственно, хотелось бы иметь встроенный простенький hex-вьюер. У FASM'а такого нт, пока что использую FAR.
     
  10. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    Mika0x65



    А какой бы ты хотел? Какой код низкоуровневее, 12-битный?





    да, mov hInstance,eax вместо mov [hInstance],eax





    если страшно смотреть файл листинга фасма, можно кроме фара смотреть в hiew или в RadASM, причём последний весьма хорош в качестве редактора и/или среды разработки для ассемблера.
     
  11. Mika0x65

    Mika0x65 New Member

    Публикаций:
    0
    Регистрация:
    30 июл 2005
    Сообщения:
    1.384


    Я бы хотел именно тот, который бы я хотел. А чтобы удостовериться, что код сгенерирован именно "мой" мне и нужен встроенный вьюер (коего в FASM нет, и придется пользоваться
    ).





    Хотя бы это. Об этом тоже надо прочитать.
     
  12. yureckor

    yureckor New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2004
    Сообщения:
    494
    Адрес:
    Russia
    два основных отличия синтаксиса fasm от masm:

    1) в masm ячейка памяти указывается просто, или в скобках. Адрес указывается через оператор OFFSET.
    Код (Text):
    1.  
    2. mov eax, [x1] ;значение из переменной x1
    3. mov eax, x1 ;значение из переменной x1
    4. mov ebx, OF x1 ;адрес x1
    5.  




    в fasm'е ячейка памяти всегда в скобках, без скобок- адрес.
    Код (Text):
    1.  
    2. mov eax, [x1];значение
    3. mov eax, x1 ;адрес x1
    4.  




    2) разница в указании значений типа: mov eax, "abc"

    masm размещает в памяти как .."c","b","a"

    fasm решил упростить задачу, и вместо стандартного пишет перевернуто, т.е. как в тексте программы.
     
  13. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    Mika0x65



    О, ну что ж, патентуй идею: интеллектуальный ассемблер, генерирующий любой код по первому желанию программиста.





    шедевр
     
  14. S_T_A_S_

    S_T_A_S_ New Member

    Публикаций:
    0
    Регистрация:
    27 окт 2003
    Сообщения:
    1.754
    Mika0x65 >




    Используй директиву format

    или use16\use32
     
  15. Mika0x65

    Mika0x65 New Member

    Публикаций:
    0
    Регистрация:
    30 июл 2005
    Сообщения:
    1.384




    Честно говоря, думал, что их намного больше...





    Нееее, шедевр это вот что: компилируешь чисто 32битный (по смыслу) код, а он идет с префиксами замены размера адреса и операнда.







    Да, спасибо, уже дотуда дочитал :).
     
Статус темы:
Закрыта.