Differenza tra un file eseguibile e il formato del file di dati?


2

Alcune cose veloci fuori mano, come so che questo tipo di domande spesso hanno un background dannoso.

  • Non sto cercando di eseguire qualcosa in un formato di file (jpg)
  • Non sto provando semplicemente a raggiungere l'obiettivo finale (cioè far sembrare qualcosa come un jpg ma esitare)
  • Sto semplicemente cercando di imparare la differenza tra il modo in cui un computer analizza le informazioni

Quindi, dal mio punto di vista, un computer che si occupa di un formato di file di dati, come JPG, PDF, ecc. Analizzerà solo le informazioni in quello che essenzialmente è un contenitore aderente, immagino di specifici layout / specifiche. Comunemente si sente la differenza tra un formato di file di dati e un eseguibile è che il computer non "eseguirà (eseguirà)" il file di dati. La mia domanda è: come fa il computer a sapere cosa leggere e cosa eseguire? Qual è la differenza? La mia immagine mentale di un computer è qualcosa che legge le istruzioni passo dopo passo. Se nel mezzo di un jpg che stava analizzando vedeva shellcode per far apparire una finestra di messaggio, perché non si attiva quando viene letto?

Sono consapevole che le cose potrebbero essere eseguite tramite exploit per il software, ingannando il parser - forse tramite buffer overflow ecc. Ancora una volta, non tanto interessato all'obiettivo finale di come può essere raggiunto. Sono più interessato a come il computer può dire cosa deve essere letto, cosa deve essere eseguito e come si può ottenere la lettura senza esecuzione.

Risposte:


1

Bene, i file di dati vengono aperti dai programmi. E i programmi / file eseguibili stessi aprono quei file e interpretano i dati.

I file eseguibili vengono aperti / eseguiti dal sistema operativo per la CPU. Contengono istruzioni che sono dati per la CPU.

Se un file di dati conteneva istruzioni per una CPU, normalmente non andrebbe alla CPU perché è solo un file che il tuo programma sta leggendo, quindi al massimo potrebbe avere istruzioni per il tuo programma. Ma se qualcosa va storto in un programma, come un file di dati provoca un overflow del buffer in un programma, allora cosa c'è nel file di dati potrei supporre che venga inviato alla CPU.

Si potrebbe rinominare un file jpg per exe ed eseguirlo e verrà eseguito dalla CPU e dare un errore, a meno che non abbia davvero il codice macchina (istruzioni della CPU), quindi è davvero un file eseguibile che ha un'estensione errata e ora ha l'estensione giusta.


Fantastico grazie. Era il passaggio dell'applicazione intermedia (eseguibile -> CPU vs sola lettura -> Applicazione -> CPU) che mi mancava nel mio processo di pensiero, che ora sottolineato è dolorosamente ovvio. Ho sempre pensato alla CPU che analizza tutto su queste linee (eseguibile -> CPU vs sola lettura -> CPU -> Applicazione per la visualizzazione).
Peleus,

non sono sicuro di cosa intendi per CPU "vs" di sola lettura. vs tende a significare contro in inglese! BTW Un programma nel caso semplice può essere solo il file eseguibile e non deve visualizzare nulla. Viene caricato nella RAM come processo. Suppongo che sarebbe di sola lettura. La CPU recupera ciascuna istruzione e la esegue. Ne discuteranno i vecchi libri. Le parti di una CPU / processore -Program Counter. Il registro degli indirizzi di memoria (MAR) Il registro dei dati di memoria (MDR), registri di uso generale. E tra CPU e RAM, il bus degli indirizzi, il bus dati e i dispositivi su cui la CPU legge / scrive in posizioni di memoria simili.
barlop

Il programma potrebbe avere un'istruzione per inviare qualcosa al display ... ovvero output sullo schermo o potrebbe semplicemente fare i suoi calcoli. Un principiante potrebbe scrivere un grumo di codice, alla fine farlo compilare e lo esegue e pensa che non sia in esecuzione o che non stia facendo nulla, ma lo ha fatto semplicemente non ha prodotto nulla sullo schermo perché non glielo ha detto!
barlop

1

Su Windows, è solo l'estensione che rende eseguibile il file: per essere specifici verranno eseguiti gli EXE e alcuni altri formati verranno interpretati da cmdo PowerShell.

Su sistemi simili a Unix, c'è un bit di esecuzione. Se hai familiarità con il concetto di attributi di file di Windows, puoi pensarlo come una sorta di attributo. A qualsiasi file può essere impostato un bit di esecuzione: sarà possibile eseguirlo (come programma, script, ecc.). Altrimenti il ​​sistema operativo lo tratterà sempre come un normale file che non può essere eseguito.

I sistemi operativi simili a Unix non utilizzano il concetto di estensioni di file, ma piuttosto cercano di identificare i file in base al loro contenuto. Di solito pochi primi byte di un file compongono un numero magico - un identificatore univoco del tipo di file (vedi l' articolo di Wikipedia .)


Grazie, leggermente fuori da quello che mi chiedevo (ehi probabilmente è colpa mia se ho spiegato la domanda!) Ma comunque informazioni utili da sapere. Colpito da Barlop, ero curioso riguardo al livello applicativo che essenzialmente proteggeva la CPU dalle istruzioni eseguibili.
Peleus,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.