морф можно пилить на чём угодно, но самый скоростной код получается на труЪ асме. Конечно, можно упомянуть, что такой способ приводит к нечитабельным портянкам / полное отсутствие кросс-платформы / большая проблема с секурой / отладкой /.. Но эти коды самые быстрые. А на втором месте с/с++ с морфом чрез указатели на функции. строго говоря, морфа во втором случае нет == есть run-time overload function.
Rel, лично я юзаю Асм для шеллкодов и для быстрого создания РоС, чтобы не парится с разными там сишными приведениями типов и прочей ересью. Так что Асм нужен и будет нужен, а если вам не нужен, то это такое дело. бесконечный холивар. Есть моменты, когда без ШК на Асме никак, и это факт, тем более странно такое слышать от вас. Если бы какой-то веб-кодер или шарпер писал, еще понятно.
я как раз шеллкоды пишу на плюсах... довольно удобно делать класс, в котором хранятся указатели на PEB, разресолвенные API и тд, при этом указатель на эти вещи, буффер под которые выделен на стеке, передается в неявном виде... ну и плюс иногда удобно заюзать RAII например, плюс компилятор который недаст неправильно вызвать API... понятно, что большие шеллы никто не пишет, но я уже так привык к этим удобным вещам, что без них уже не могу...
Перспектива 1. Вечная. Каталог мнемоник инструкций. Перспектива 2. Не менее вечная. Каталог реализаций типовых алгоритмов с учетом различий в разрядности операндов. Всякие упоротости масмом фасмом или есчо чем не серьезны. Вообще, лично мне не хватает стандартного языка разметки исходников. Всякое фасмовское задротство - костыли и очень специфичные.
есть же всякие высокоуровневые ассемблеры... вот недавно наткнулся на https://www.x-sharp.net/ - проект, который запилили в контексте менеджд операционной системы COSMOS для удобства трансляции MSIL в нативный код, как некое промежуточное представление... имхо довольно интересный проект... по сути препроцессор/транспилятор, генерирующий NASM исходники на выходе...
Код (C): function strlen { ESI = ESP[4] // get pointer to string passed as first argument ECX ^ ECX // clear ECX Loop: AL = ESI[ECX] //get next character AL ?= 0 // is it 0? save to FLAGS if = return // if ZF is set, return ECX++ // else increment ECX goto Loop // loop... } //Method 2: using if function strlen { ESI = ESP[4] // get pointer to string passed as first argument ECX ^ ECX // clear ECX Loop: AL = ESI[ECX] if AL = 0 return// AL = 0? return ECX++ goto Loop // loop.... } Примеров серьезней нету, семплы на гитхабе 3 байта. Если кто-то ждал сишных операторов для ассемблера (без точкозапятых!), то сбыча мечт состоялась. Могу ошибаться, но сишные операторы в ассемблере, который нельзя называть, через директиву struc можно прикрутить не хуже. Штука очень странная. Если вся эта дичь только ради си-подобного синтаксиса, не вижу в этом ничего интересного.
вся эта "дичь" ради трансляции MSIL в баре-бонес нативный код... чтобы ОС писать на си-шарпах... больше не для чего в принципе...
Но ведь... но там же... слоган "x86 like it should be" --- Сообщение объединено, 13 дек 2018 --- Как забавный курьез: там на картинке с зелеными буквоцифрами (взятой из интернетов) ассемблер очень смахивающий на 8085. x86 like it should be.
Rel, > я как раз шеллкоды пишу на плюсах... Ну а пример покажите ? Интересно ведь посмотреть, я просто не помню что бы от вас что то" было.
я на Си пробовал, потом забил и все. Сишный компилер сейчас вставляет огромную кучу мусора в код, там нет и никогда не будет такого управления кодом, как на Асме. Про С++ вообще молчу (не знаю, как там, но думаю что еще хуже). чем вы компилите их, если не секрет?
Для некоторых проектов использовать что-то кроме ассемблера сильно затруднительно. Но при этом желательно поддержка высокоуровнего кода, .if, .while, .for, ООП с виртуальными функциями и так далее, так как проект может быть довольно сложный. Частично это обеспечивает только UASM, другие ассемблеры гораздо хуже. Мне вот FASM что совсем не нравится, думаю его даже не стоит изучать, ну или изучать ровно столько, чтобы в чужих исходниках немного разбираться. А UASM хорош тем что написан на С и сами исходники доступны. Я вот исправил баг где внутренний макрос @ProcName не возвращал имя функции(возвращал непонятно число). Ещё добавил @PtrName, возвращает имя структуры на которую ссылается указатель, заданный для регистра(заданной командой ASSUME), локальной или глобальной переменной. Правда сделал это довольно по быдлокодерски, но если её реализовать как надо, то можно портировать некоторые шаблоны из С++, vector, map и т.д.
я компилю GCC/MinGW, на венде со студии перешел давным давно, когда они запретили асм-вставки под x64, меня многое не устраивало в ней, но это стало последней каплей))... помимо сишечки есть всякие бейсики, которые тож довольно низкоуровневые, в том плане, что там нет каких-то огромных раньаймов со сборкой мусора и тд... если интересно, то могу порекомендовать PureBasic (проприетарный, но дешевый и есть на торрентах, если что)... его компилятор генерит код на фасме, если мне память не изменяет...
От бейсиков я ещё в 2004 решил отказаться, в пользу паскаля, хотя использовал его ещё некоторое время. Пюрбасик я установил... а потом удалил, не делал даже хеловорды, да не люблю я бейсик. Я считаю что он умер как язык, к нулевым где-то, просто не перевариваю его, я да же код на асме в стиле бейсика не люблю, пример, исходники того же FASMа, какой-то ужас, что есть исходники, что их нет, хрен поймёшь. ЗЫ Вот если С/С++ компилятор который в ассемблер-код транслирует, да ещё чтобы в блоке _asm не трогал код, чтобы самим MASM'ом их компилировать, то да, такой компилятор подойдёт для моего проекта. Но я думаю нужно сам UASM развивать в сторону высокоуровневости.
в сущности всё есть в gcc, окромя поддержки масма. все эти масмы/фасмы/уасмы/.. есмь дикобразные костыли и лучше о них забыть чисто с практической тчк зрения
Rel, > никогда си-кода не видел? Мне не сам формат интересен, а непосредственно механизмы, реализация, нп как вы обходите защиту и как работает ваш шелл. Сейчас куча защитных механизмов, поэтому запустить шелл - большое дело. Естественно это интересно. --- Сообщение объединено, 15 дек 2018 --- > помимо сишечки есть всякие бейсики Пури весьма сильный компилер. Точнее это транслятор скрипта в фасм. Можно получить сурец на асм и далее его билдить(option: commented если правильно помню). А есчо он 32/64 и портабельный под никсы. Вот только синтаксис там треугольный", дикий изврат. Хотя в принципе это не проблема, можно написать простейший тексовый транслятор, что бы синтаксис изменить. Главное что это очень сильный компилер, особенно математики. Я его выхлоп по FPU долго использовал, что бы не писать это вручную.