1. Если вы только начинаете программировать на ассемблере и не знаете с чего начать, тогда попробуйте среду разработки ASM Visual IDE
    (c) на правах рекламы
    Скрыть объявление

На каких ассемблерах вы пишете чаще всего?

Тема в разделе "WASM.ASSEMBLER", создана пользователем Jin X, 17 янв 2018.

?

На каких ассемблерах вы пишете ЧАЩЕ ВСЕГО? (читайте примечание в теме)

  1. Macro Assembler (MASM)

  2. Turbo Assembler (TASM)

  3. Flat Assembler (fasm)

  4. Netwide Assembler (NASM), YASM (включая NASM в SASM IDE с его макросами)

  5. GNU Assembler (GAS)

  6. WASM и его потомки: UASM/HJWASM, JWASM

  7. GoAsm (отдельно GoLink не считается)

  8. Pelle Orinius Assembler (PoAsm)

  9. Ассемблер, встроенный в языки высокого уровнях (C++, Delphi, etc... напишите!)

  10. Ассемблер в emu8086 (TASM-подобный, не fasm !!!)

  11. Flat Assembler G (fasmg) [укажите в теме – для каких архитектур используете !!!]

  12. Atmel AVR Assembler (или другой AVR-ассемблер, но не fasmg... напишите!)

  13. FASMARM и другие ARM-ассемблеры (напишите в теме – какой именно!)

  14. Другие ассемблеры для архитектур, совместимых с IA-32/Intel 64 (напишите!)

  15. Другие ассемблеры для архитектур, НЕ совместимых с IA-32/Intel 64 (для микроконтр, 8-бит, напишите!)

  16. Я не пишу на ассемблере :(

  17. High-level Assembler/Assembly (HLA, HLASM)

Можно выбрать сразу несколько вариантов.
Результаты будут видны только после голосования.
  1. Aoizora

    Aoizora Member

    Публикаций:
    0
    Регистрация:
    29 янв 2017
    Сообщения:
    125
    Что-то не получается его использовать вместе с директивой dd

    Код (Text):
    1. macro round value, align { rb (value-1)-($+value-1) mod value }
    dd round(filesize, sectalign) ; SizeOfImage
    --- Сообщение объединено, 1 июн 2019 ---
    Не до любой ближайшей степени двойки, а выравнивание до section alignment, который может быть единицей или степенью двойки. То есть если мы выравниваем значение 1 на границу 512, в результате будет 512, а не 2.
     
  2. f13nd

    f13nd Active Member

    Публикаций:
    0
    Регистрация:
    22 июн 2009
    Сообщения:
    727
    Потому что в фасме два процессора языка, не надо их мешать.

    (1+0x1FF)&FFFFFE00=0x200
     
  3. Aoizora

    Aoizora Member

    Публикаций:
    0
    Регистрация:
    29 янв 2017
    Сообщения:
    125
    >>Потому что в фасме два процессора языка, не надо их мешать.

    Звучит плохо. Макрос это процедура времени компиляции, ее результат должен подставляться, как выражение constexpr в C++. А здесь это не получается.
     
  4. f13nd

    f13nd Active Member

    Публикаций:
    0
    Регистрация:
    22 июн 2009
    Сообщения:
    727
    Просто надо знать как пользоваться макроязыком и тогда однопроходной C++ покажется детской игрушкой, макросы фасма несравнимо мощней.
    кстати говоря ты пытаешься директиве dd дать значение round, которое макрос не возвращает.
     
  5. Jin X

    Jin X Active Member

    Публикаций:
    0
    Регистрация:
    15 янв 2009
    Сообщения:
    332
    Адрес:
    Кольца Сатурна
    Макросы в fasm возвращать значения не могут, так что именно в таком виде использовать не получится.
    Как вариант, можно сделать так:
    Код (ASM):
    1. macro round n,r { @result = (n+r-1)/r*r }
    2.  
    3. round 23,16
    4. mov al,@result
    p.s. В fasmg макросы вроде могут возвращать значения.
     
  6. Intro

    Intro Member

    Публикаций:
    0
    Регистрация:
    29 авг 2009
    Сообщения:
    116
    UASM обновили до версии 2.49
    http://www.terraspace.co.uk/uasm.html
    Обнаружил пару неприятных багов, но пока не знаю исправили их в новых версиях.
    Ошибка №1
    .if (quote_open1==false && (quote_open2==false && !op_bracket)) генерирует не правильный код.
    .if (quote_open1==false && quote_open2==false && !op_bracket) код по сути тот же, но генерирует уже правильно.
    Ошибка №2
    Код (ASM):
    1. ;CWeaponMagazined__switch2_Empty
    2. org 102D07B3h - shift   ; 55 bytes
    3.    cmp     [esi+m_bAutoReload], 0
    4.    jz     short switch2_Empty_exit
    5.    mov     eax, [esi]
    6.    mov     edx, [eax+168h]
    7.    call   edx
    8.    mov     ecx, esi
    9.    call   CWeaponMagazined__TryReload
    10.    test   al, al
    11.    jnz     short switch2_Empty_exit
    12.    mov     eax, [esi]
    13.    mov     edx, [eax+1F4h]
    14.    mov     ecx, esi
    15.    pop     esi
    16.    jmp     edx
    17. switch2_Empty_exit:
    18.    lea     ecx, [esi+338h]
    19.    pop     esi
    20.    jmp     CWeapon__FireEnd
    Функции CWeaponMagazined__TryReload и CWeapon__FireEnd объявлены после этого кода.
    В результате функция ссылается саму на себя, т.е. overflow stack или зацикливания.
    Плюс, ещё, не работает функция возвращающая имя текущей функции.
     
  7. Rel

    Rel Well-Known Member

    Публикаций:
    0
    Регистрация:
    11 дек 2008
    Сообщения:
    2.220
    еслм так активно юзаешь макросы, то не проще ли на ЯВУ пересесть, типа пресловутой сишечки хотя бы? в любое место можешь асм инлайнить как бы, рантайм можно отключать, один и тот же кодец можно компилить под разные архитектуры и тд... одни плюсы...
     
    SadKo нравится это.
  8. SadKo

    SadKo Владимир Садовников

    Публикаций:
    8
    Регистрация:
    4 июн 2007
    Сообщения:
    1.545
    Адрес:
    г. Санкт-Петербург
    Человек - мазохист.
     
  9. f13nd

    f13nd Active Member

    Публикаций:
    0
    Регистрация:
    22 июн 2009
    Сообщения:
    727
    По-моему это дурной знак, если сами разработчики твоего ассемблера выбирают сишечку.
     
  10. Intro

    Intro Member

    Публикаций:
    0
    Регистрация:
    29 авг 2009
    Сообщения:
    116
    В проекте XRayExtensions затруднительно использовать С/С++. Может просто не разобрался, во обще на С/С++ шелкод можно делать? Вроде можно. Но по мне, проще ассемблер использовать, я даже сейчас не весь проект от рефакторил в новом высокоуровневом стиле, а тут всё на С/С++ переделывать.
     
  11. Rel

    Rel Well-Known Member

    Публикаций:
    0
    Регистрация:
    11 дек 2008
    Сообщения:
    2.220
    да, я делал, по сути ничего сложного, нужно отключить все рантайм библиотеки компилятора, все функции и данные поместить в одну секцию, точку входа положить в начало секции, все данные адресовать относительно точки входа, все апи получать через PEB и парсинг таблиц импорта, потом просто вырезать эту секцию и получишь шелл... большинство вещей работает, кроме само собой виртуальных методов классов (тк создается vtbl) и больших свичей (тк они оптимизируются в джамп таблицы)...
     
  12. njeen

    njeen Member

    Публикаций:
    0
    Регистрация:
    26 мар 2017
    Сообщения:
    65
    Адрес:
    Ташлинск
    tc> мой имхо выбор - fasm, но у него 2 огромных недостатка - нельзя задать через cmdline args его директорию инклюда (из-за этого нормально в билд pipeline студии не встроить), второй - он написан на ассемблере, а не на c, т.е ни на чем, кроме виндов и луникса его не запустить (неприятно удивило отсутствие возможности компилять fasm'ом под bsd).

    Из всего c++ максимум что можно использовать для шеллкода - это raii и классы (есть разве такие извращенцы?) . Самые плюшки языка нельзя использовать от слова совсем - ни stl, ни threading, ни filesystem, ни new (который не nothrow) , - гемора больше, чем выгоды, так что ну его нахой.
    Сишечка - да, ещё как-то можно, если забить на наличие нулей в теле бинаря. Только вот точка входа не обязана лежать в начале секции кода , в студии, например, зависит от фактического расположения функций в файле исходника, и тут тщательно нужно следить дизасмом, чтобы вперед ничего не вылезло. Да и если все сделано правильно, точка входа может быть смещена относительно начала секции на N байт (не помню, то ли 4, то ли 8) - приходится дополнительно бинарь конечный с начала обрезать или jmp делать . Это только со студией, что остальные компили делают - хз. Так что это не прям так просто.
     
  13. Rel

    Rel Well-Known Member

    Публикаций:
    0
    Регистрация:
    11 дек 2008
    Сообщения:
    2.220
    обязана, если назвать секцию для нее скажем .shell$000, а остальные функции скажем .shell$001... насколько я помню линкер студии, как и линкер мингв сортирует такие секции по строке и сливает их все в одну...

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

    раии в шелле - это очень удобно... лямбда в шелле - это очень удобно... более строгая типизация чем в сишечке - это очень удобно...
     
  14. f13nd

    f13nd Active Member

    Публикаций:
    0
    Регистрация:
    22 июн 2009
    Сообщения:
    727
    Могу ошибаться, но по-моему все подобные вещи переменной окружения path решаются.
     
  15. njeen

    njeen Member

    Публикаций:
    0
    Регистрация:
    26 мар 2017
    Сообщения:
    65
    Адрес:
    Ташлинск
    Если это не какя-то магия с именами секций, то нет. Если , скажем, называется секция кода .text, и в сорце всего 2 функции -то нет. Студийный компиль соберет именно так, как мною описано. М.б в новых версиях, конечно, изменилось повдедение.

    :D
    --- Сообщение объединено, 28 июн 2019 ---
    нет, там цимес в том, что студия хочет свою переменную INCLUDE . И фасм тоже , чтобы так называласьпеременная у него. И они конфликтуют,а динамически в не-makefile , насколько знаю, без изврата не сделать компиляцию фасмом в студии.
     
  16. f13nd

    f13nd Active Member

    Публикаций:
    0
    Регистрация:
    22 июн 2009
    Сообщения:
    727
    Ну значит подкрутить имя include_variable в исходниках, фасм фасмом собирается, пара минут возни.
     
  17. njeen

    njeen Member

    Публикаций:
    0
    Регистрация:
    26 мар 2017
    Сообщения:
    65
    Адрес:
    Ташлинск
    ну только если так
     
  18. Rockphorr

    Rockphorr Well-Known Member

    Публикаций:
    0
    Регистрация:
    9 июн 2004
    Сообщения:
    2.548
    Адрес:
    Russia
    На ПК предсказуемо MASM и плюс секта фасм-задротов, на всяких андроидах жаба давно все задавила, прочие исключительно по нишам фанатов