Сейчас на форуме: Kybyx (+3 невидимых) |
eXeL@B —› Оффтоп —› Макроподстановки на асме |
Посл.ответ | Сообщение |
|
Создано: 18 января 2015 04:39 · Личное сообщение · #1 Во многих ЯП есть возможность формировать части текста программы динамически. Т.е. можно динамически сформировать, применительно к асму, строку типа "mov eax,ebx", динамически же скомпилять (для чего, понятно, надо таскать с собой минимальный компилятор) и вполнить соответствующий кодес. Не знаю, есть ли реализация сабжа для асма. Да и, главное, нужно ли это? По сути, как я понимаю, в данном случае речь идет о некой разновидности ВМ (на входе текст - на выходе нативный код) Добавлено спустя 4 часа 21 минуту На вид анализ и в статике и в динамике будет непрост |
|
Создано: 07 февраля 2015 07:33 · Поправил: dosprog · Личное сообщение · #2 В современном masm'е всё построено на макросах. Начиная с самого часто используемого <invoke> |
|
Создано: 07 февраля 2015 13:01 · Поправил: DenCoder · Личное сообщение · #3 Вопрос непонятно поставлен. По сабжу одно, а в вопросе - другое. Динамически - компиляция по требованию во время выполнения программы. Программы на C#, на двиге v8, например, такое делают. Компилируются только те части кода, в которых возникла надобность исполнить. Но это прозрачно для разработчика. Макроподстановки - написание шаблонов кода. Фактический код подставляется вместо макросов на первом проходе компиляции всей программы, а затем уже компилируется весь полученный код. ----- IZ.RU |
|
Создано: 08 февраля 2015 18:17 · Поправил: dosprog · Личное сообщение · #4 Позволю себе добавить, что макроподстановки хороши вмеру. Увлёкшись, намертво привязываешься к реализации транслятора. Вообще-то, ещё в TASM'e была директива <IF0> - условие срабатывало только при первом проходе. Можно организовать разворот макросов при желаемом проходе, если завести счётчик. Работает это всё таким образом, что транслятор сравнивает результат трансляции при каждом проходе и если на очередном проходе выявлено раскрытие макроса или двоичный результат не совпадает с результатом предыдущего прохода, тогда принимается решение о необходимости ещё одного прохода. В идеале программы надо составлять так, чтобы обходиться минимальным числом проходов (1 или 2). В TASM'е при использовании директивы <IF0> и др. чаще всего выдаётся надоедливое предупреждение, так как такие вещи считаются "костылями". Моё впечатление, что макропроцессирование это довольно глючная сфера и сильно зависящая от используемого транслятора. На любителя. DenCoder пишет: Вопрос непонятно поставлен. По сабжу одно, а в вопросе - другое. Да, тут какой-то подвох.. |
eXeL@B —› Оффтоп —› Макроподстановки на асме |