Size: a a a

Compiler Development

2020 December 02

AK

Andrei Kurosh in Compiler Development
Peter Sovietov
«Ужасы нашего городка» :)

BEAM/C generated a single C function for each Erlang module. Local calls within the module were made by explicitly pushing the return address to the Erlang stack followed by a goto to the label of the called function. (Strictly speaking, the calling function stores the return address to BEAM register and the called function pushes that register to the stack.)

Calls to other modules were done similarly by using the GCC extension that makes it possible to take the address of a label and later jumping to it. Thus an external call was made by pushing the return address to the stack followed by a goto to the address of a label in another C function.


Отсюда: http://blog.erlang.org/the-road-to-the-jit/
Просто вместо генерации машинного кода напрямую использовали чуть более высокоуровневое представление в виде си, с теми же подходами :)
источник

t

trsfrm2smgen in Compiler Development
есть какие-то книги или матералы по бинарной трансляции ?
источник

t

trsfrm2smgen in Compiler Development
нашел только такое
источник

t

trsfrm2smgen in Compiler Development
Материал посвящён бинарной трансляции на аппаратном уровне и программном.
#DBT #BT #SBT #backend #VLIW #compiler #book #architecture #concepts
источник

t

trsfrm2smgen in Compiler Development
источник

t

trsfrm2smgen in Compiler Development
источник

t

trsfrm2smgen in Compiler Development
источник

t

trsfrm2smgen in Compiler Development
источник

t

trsfrm2smgen in Compiler Development
я хочу понять можно считать такой процесс полиморфной JIT компиляцией:
есть какой-то байткод (он обфусцирован и является src code) каждый раз на этапе выполения компилятор встроенный транслирует этот байткод в целевой код ,затем переписывает эвристику байт кода ,и потом переписывает compiler сам себя генеря новую эвристику ,ну и каждый раз при запуске проги весь код будет иметь новую эвристику: байт код,целевой исполняемый код и сам компиллер.
я думаю это больше похоже на динамическую полиморфную бинарную трансляцию.
источник

AT

Alexander Tchitchigi... in Compiler Development
hazer_hazer
Так вот меня и интересует, почему нельзя сделать первичный промежуточный этап для определения неизменного кода. То о чем вы говорите никак этому не помешает.

Если нет оптимизаций включенных, то машинный код практически выглядит, как A -> B, где A это сорс код, а B машинный.
источник

PS

Peter Sovietov in Compiler Development
Andrei Kurosh
Просто вместо генерации машинного кода напрямую использовали чуть более высокоуровневое представление в виде си, с теми же подходами :)
Там забавно, что у них все завязано на прыжки с помощью вычисляемого goto из функции в функцию. Чем легко можно сбить с толку компилятор Си. В результате этот UB себя действительно нехорошим образом проявил на нескольких компиляторах :)
источник

PS

Peter Sovietov in Compiler Development
trsfrm2smgen
я хочу понять можно считать такой процесс полиморфной JIT компиляцией:
есть какой-то байткод (он обфусцирован и является src code) каждый раз на этапе выполения компилятор встроенный транслирует этот байткод в целевой код ,затем переписывает эвристику байт кода ,и потом переписывает compiler сам себя генеря новую эвристику ,ну и каждый раз при запуске проги весь код будет иметь новую эвристику: байт код,целевой исполняемый код и сам компиллер.
я думаю это больше похоже на динамическую полиморфную бинарную трансляцию.
В 90-е Вас бы заподозрили в вирусописательстве. Именно таким образом когда-то работали полиморфные вирусы :)
источник

PS

Peter Sovietov in Compiler Development
Кто спрашивал по поводу лексического анализатора?

1. Вот как в реальности может быть устроена span-схема: https://zserge.com/jsmn/
2. Кажется, вопрос был и по поводу быстрой проверки ключевого слова по таблице? На этот счет есть идеальные хеш-функции. См. https://eli.thegreenplace.net/2019/go-compiler-internals-adding-a-new-statement-to-go-part-1/ и https://www.gnu.org/software/gperf/
источник

TS

Timur Safin in Compiler Development
Peter Sovietov
В 90-е Вас бы заподозрили в вирусописательстве. Именно таким образом когда-то работали полиморфные вирусы :)
да и в 10ые и 20ые года этого века это выглядит виросописательством
источник

PS

Peter Sovietov in Compiler Development
Ага. В любом случае, по тематике бинарной трансляции я бы посмотрел в сторону QEMU. TCG более-менее документирован и код Беллара всегда интересно изучать (разгадывать :).
источник

t

trsfrm2smgen in Compiler Development
Timur Safin
да и в 10ые и 20ые года этого века это выглядит виросописательством
это бинарная криптовка
источник

t

trsfrm2smgen in Compiler Development
Или протекторы
источник

t

trsfrm2smgen in Compiler Development
Timur Safin
да и в 10ые и 20ые года этого века это выглядит виросописательством
Вирусописательство это протектор или обфускация + малвара
источник

t

trsfrm2smgen in Compiler Development
trsfrm2smgen
Или протекторы
Vmprotect,themida например
источник

t

trsfrm2smgen in Compiler Development
Peter Sovietov
В 90-е Вас бы заподозрили в вирусописательстве. Именно таким образом когда-то работали полиморфные вирусы :)
Вирусописательство это разработка малвари и не больше.
источник