Кіріспе

Деректер құрылымы немесе компилятор немесе виртуалды машинаның бастапқы кодты көрсету үшін ішкі түрде пайдаланатын коды.

Аралық өрнек (IR) – компилятор немесе виртуалды машинаның бастапқы кодты көрсету үшін ішкі түрде пайдаланатын деректер құрылымы немесе коды. IR оптимизация және аударма сияқты одан әрі өңдеуге ыңғайлы болу үшін жасалған. "Жақсы" аралық өрнек ақпаратты жоғалтпай бастапқы кодты дәл көрсетуге қабілетті және кез келген нақты бастапқы немесе мақсатты тілге тәуелсіз болуы керек. Соңғы жағдайда ол аралық тіл деп те аталады. Мұндай мысал көптеген қазіргі заманғы компиляторларда кездеседі. Мысалы, CPython интерпретаторы бағдарламаны көрсететін, адам оқи алатын сызықтық мәтінді, орындау алдында ағынды талдауға және қайта құруға мүмкіндік беретін аралық график құрылымына түрлендіреді. Мұндай аралық өрнекті пайдалану GNU Compiler Collection және LLVM сияқты компилятор жүйелеріне көптеген әртүрлі бастапқы тілдерді қолданып, көптеген әртүрлі мақсатты архитектуралар үшін код жасауға мүмкіндік береді.

Аралық тіл

Аралық тіл – компьютерлік бағдарламаларды талдауға көмектесу үшін жасалған абстрактілі машина тілі. Бұл термин компиляторларда қолданылуынан туындаған, онда бағдарламаның бастапқы коды мақсатты машина үшін объектілік немесе машиналық кодты жасауға дейін кодты жақсартуға ыңғайлырақ формаға аударылады. Аралық тілдің дизайны практикалық машина тілінен үш негізгі тұрғыдан ерекшеленеді:

Әрбір команда дәл бір негізгі операцияны көрсетеді; мысалы, микропроцессорларда кең таралған "қайыру-қосу" (shift add) адрестеу режимдері болмайды. Басқару ағыны туралы ақпарат командалар жиынтығына енгізілмеуі мүмкін. Қолда бар процессор тіркелгіштерінің саны көп, тіпті шексіз болуы мүмкін. Аралық тілдер үшін танымал формат – үш адресті код. Бұл термин сонымен қатар кейбір жоғары деңгейлі бағдарламалау тілдері аралық құрал ретінде қолданатын тілдерді де білдіреді, олар объектілік немесе машиналық кодты шығармай, тек аралық тілді ғана шығарады. Бұл аралық тіл сол тіл үшін компиляторға жіберіледі, ол кейін дайын объектілік немесе машиналық кодты шығарады. Мұндай шара әдетте оңтайландыру процесін жеңілдету үшін немесе көптеген процессорлар мен операциялық жүйелер үшін компиляторлары бар аралық тілді пайдалану арқылы тасымалдағыштықты арттыру үшін жасалады, мысалы C тілі. Бұл мақсатта қолданылатын тілдер жоғары деңгейлі тілдер мен құрастыру тілдері сияқты төмен деңгейлі тілдердің арасындағы күрделілік деңгейінде болады.

Басқа

Статикалық талдау құралдары көбінесе аралық өрнекті пайдаланады. Мысалы, Radare2 – бинарлық файлдарды талдау және кері инженериялауға арналған құралдар жиынтығы. Ол бинарлық файлдарды талдау үшін ESIL және REIL аралық тілдерін қолданады.