Cosa significa “DS: ” in assembly?

0040103A CALL DWORD PTR DS:[40207A] USER32.MessageBoxA 

Cosa significa DS: significa?

Significa che l’istruzione fa riferimento alla memoria nel segmento dei dati e può essere praticamente ignorata sui sistemi operativi moderni, poiché vengono eseguiti con un modello di spazio di indirizzi piatto (i segmenti di codice, dati e stack si riferiscono tutti allo stesso intervallo di memoria e la protezione della memoria è gestito con cercapersone).

MODIFICARE:

Una piccola elaborazione: si noti che, per mantenere le cose semplici, questo è nel contesto della modalità protetta a 32 bit con Windows.

Un registro di segmenti (CS, DS, SS, ES, FS, GS) contiene un selector punta a un descriptor . Ci sono due tabelle descrittive: globale ( GDT ) e locale ( LDT ), e il selettore ha un po ‘che indica quale usare. Windows (quasi?) Utilizza esclusivamente la tabella globale.

Un descrittore è fondamentalmente una coppia {start-address, size} – c’è di più, ma questo è al di fuori dell’ambito di questo post.

Windows utilizza un modello di memoria flat : ogni processo ha uno spazio di indirizzi da 4 GB che inizia all’indirizzo di memoria 0 e utilizza il paging per isolare i processi l’uno dall’altro.

Poiché i processi hanno questa visione piatta del mondo, vengono eseguiti con tutti i segmenti utilizzando descrittori {0, 4 GB} e quindi, anziché allocare descrittori per processo, Windows può utilizzare solo alcuni descrittori globali e tutti i processi li utilizzano.

MODIFICA 2:

Il formato Portable Executable definisce le sections , che non sono correlate ai segments x86, anche se c’è qualche sovrapposizione concettuale. I PE EXE possono avere praticamente qualsiasi layout di sezione che si desidera, ma il normale è dividere in (almeno) codice (leggi / esegui), dati (lettura / scrittura), risorse (readonly?). La suddivisione del file eseguibile in sezioni consente di applicare la protezione della memoria x86 a livello di pagina agli intervalli di memoria.

MODIFICA 3:

Mentre i segmenti normali non cambiano per processo, Windows utilizza il registro FS per puntare alla struttura TIB per- thread .

MODIFICA 4:

Vedi questo per una panoramica. Questo è da un vecchio documento su 80386, ma le informazioni si applicano ancora.

Gli indirizzi di memoria sono costituiti da un segmento e da un offset; DS è il registro “segmento dati”.