För många kompilerade språk raderas källnivåtyper mycket tidigt i sammanställningsprocessen. Som ett resultat, ytterligare kompilatorpass kan omvandla typ-säker källa till typ-osäkra maskinkod. Typ-osäkra idiomer i den ursprungliga källan och typ-osäkra optimeringar innebär att typ information i en strippad binär är i huvudsak obefintlig. Problemet med att återvinna hög nivå typer genom att utföra typ inference över avskalad maskin kod kallas typ rekonstruktion, och erbjuder en användbar förmåga att stödja omvänd konstruktion och dekompilering. I den här artikeln motiverar och utvecklar vi ett nytt typsystem och algoritm för maskinkod typ inference. Funktionerna i denna typ system utvecklades genom att kartlägga en bred samling av gemensamma käll- och maskinkod idiomer, bygga en katalog av utmanande fall för typ rekonstruktion. Vi fann att dessa idiom sätter en sofistikerad uppsättning krav på typsystemet, vilket framkallar funktioner som rekursivt-konstruerade polymorfa typer. Många av de funktioner vi identifierar ses ofta endast i uttrycksfulla och kraftfulla typsystem som används av funktionella språk på hög nivå. Med hjälp av dessa typsystemfunktioner som riktlinje har vi utvecklat Retyped: en ny statisk typ-inference algoritm för maskinkod som stöder rekursiva typer, polymorfism, och subtypning. Retypad ger mer exakta infererade typer än befintliga algoritmer, samtidigt som den möjliggör nya funktioner * såsom rekonstruktion av pekaren const anteckningar med 98% återkallande. Omtypad kan fungera på svagare program representationer än den nuvarande tekniken, ta bort behovet av högkvalitativa poäng-till information som kan vara opraktiskt att beräkna.
Noonan m.fl. REF ] tillhandahåller en typinferensalgoritm för maskinkod som relaterar till vårt arbete.
Polymorphic type inference for machine code
{'venue': 'PLDI 2016', 'journal': None, 'mag_field_of_study': ['Computer Science']}