Quando eseguiamo il reverse engineering, abbiamo alcuni livelli di modelli. Uno di questi è il modello della semantica dell'istruzione, che ci dice cosa fa ogni istruzione nativa per modificare lo stato dell'istruzione. Stiamo facendo progressi lì. Tuttavia, un altro problema è quello della semantica della piattaforma, che è a un livello superiore.
Ad esempio, un modello di alto livello di un programma Linux in spazio utente dovrebbe includere informazioni su mprotect e che può alterare la visibilità di certe regioni di codice. La semantica di threading e callback è anche un problema di modellazione della piattaforma, possiamo scoprire un punto di ingresso del programma dalla sua intestazione (che è un altro tipo di semantica! Ma probabilmente non scenderemo a compromessi), ma altri punti di ingresso sono pubblicati nel programma in la forma degli argomenti per atexit, pthread_create, ecc.
Qual è il nostro miglior sforzo / stato dell'arte per catturare queste informazioni di piattaforma di alto livello in un modo che sia compreso dai professionisti? E i sistemi di comprensione meccanici / automatizzati? So che IDA ha (o deve avere) informazioni su diverse API della piattaforma, sembra sapere che quando un immediato è un parametro di pthread_create, allora quell'immediato è un puntatore al codice e dovrebbe essere trattato come tale. Cosa abbiamo oltre a questo?