Abstrakt. Detta dokument beskriver C Intermediate Language: en hög nivå representation tillsammans med en uppsättning verktyg som möjliggör enkel analys och käll-till-källa omvandling av C-program. Jämfört med C har CIL färre konstruktioner. Det bryter ner vissa komplicerade konstruktioner av C till enklare, och därmed fungerar det på en lägre nivå än abstrakt-syntax träd. Men CIL är också mer hög nivå än typiska mellanspråk (t.ex. treadresskod) avsedd för sammanställning. Som ett resultat, vad vi har är en representation som gör det enkelt att analysera och manipulera C-program, och släppa ut dem i en form som liknar den ursprungliga källan. Dessutom kommer det med en front-end som översätter till CIL inte bara ANSI C-program utan också de som använder Microsoft C eller GNU C-tillägg. Vi beskriver strukturen av CIL med fokus på hur det disambiguerar de funktioner i C som vi fann vara mest förvirrande för programanalys och transformation. Vi beskriver också en helprogramsammanslagning baserad på strukturell typjämlikhet, vilket gör att ett komplett projekt kan ses som en enda samlingsenhet. Som en representativ tillämpning av CIL, visar vi en omvandling som syftar till att göra koden immun mot staplande attacker. Vi använder för närvarande CIL som en del av ett system som analyserar och instrumentar C-program med run-time-kontroller för att säkerställa typsäkerhet. CIL har tjänat oss mycket bra i detta projekt, och vi anser att det med fördel kan tillämpas även i andra situationer.
CIL REF (C Intermediate Language) är ett OCaml [16] API för att skriva källkodstransformationer av sin egen 3A-kod representation av C-program.
CIL: Intermediate language and tools for analysis and transformation of C programs
{'venue': 'In International Conference on Compiler Construction', 'journal': None, 'mag_field_of_study': ['Computer Science']}