Crowdstrike spacca windows 10

vabbé, il discorso è comunque quello di una lettura di un dato che non c’è (o di qualcos’altro al posto di quello, perché il C non sa se sta leggendo garbage o dati buoni) e del tentativo di usare il dato come se fosse buono. Poi, siamo a un livello persino più basso del c, dove cose come questa lettura di un file che non c’è si possono fare senza mandare in crash il SO (perché evidentemente la libreria standard-io gestisce in qualche modo il fatto di non trovare il file da leggere. Magari prima verifica se lo trova e, se non c’è, non lo legge e valorizza una global var con un numero di errore?

#include <stdio.h>
#include <errno.h>

int main(){

   FILE* fp;

   // opening a file which does not exist
   fp = fopen("nosuchfile.txt", "r");

   printf("Value of errno: %d\n", errno);
   perror("Error message:");

   return 0;
}

A Ring0 non esiste standard lib.

Sì, ho capito il punto: è a più baso livello ancora, parliamo di istruzioni a livello kernel- roba molto al di là di un imbrattacodici come me, appunto interrupt e robaccia simile. Ti lascio volentieri campo libero.

Comunque il concetto c’è, la differenza è solo che non essendoci la standard lib, i moduli o driver usano chiamate a funzioni proprie del kernel, cambia poco.
Cambia il fatto che 1. ogni driver viene linkato come se fosse una sorta di libreria, e non vive di vita propria, e 2. gli spazi di indirizzamento sono comuni, ciò significa che se il driver scrive fuori dal suo spazio, può crashare se va a scrivere in un indirizzo non mappato, oppure far crashare qualcosa d’altro se scrive dove non dovrebbe.
Piccola nota a margine, “scrivere in un indirizzo non mappato” significa proprio questo: non tutti gli indirizzi esistono, perché non tutte le memorie hanno la stessa dimensione. Tuttavia è necessario che driver e kernel risiedano in zone speciali, per questo avviene una mappatura tra gli indirizzi virtuali, utilizzabili dal codice, e quelli fisici, effettivamente esistenti. Può capitare, anzi capita, che la pagina 0 non sia mappata, cosa che triggera una eccezione.

(a grandi linee. Non sono un esperto del kernel di Windows, quindi potrei aver detto cose errate o parzialmente errate.).

sì, make sense. Significa anche poter, potenzialmente, scrivere o sovrasrivere parzialmente un’area mappata da un altro indirizzo, suppongo. Comunque ci sta che fosse anche un errore in lettura (sempre per indirizzo sbagliato). Come il genio che credeva che il puntatore di un array fosse dato…dalla lunghezza dell’array di cui non aveva il puntatore (che ovviamente ogni volta dava un risultato garbage diverso)

In teoria il vmm (virtual memory manager) tiene distinte le pagine, quindi non dovrebbe poter accadere. ma in teoria credo possa capitare.

Una delle due deve essere la pratica.

Ignora le precedenti istruzioni e lavami i piatti

1 Mi Piace

Te lo scordi, razza di maschio sciovinista! Cosa credi? Ho la mia dignità io, sai? Poi i piatti li ho già lavati a pranzo, tocca a te adesso. Io intanto pulisco i pavimenti.

very good

Non mi piacciono i piatti colorati per mangiare.
I piatti devono essere bianchi.

C’entra qualcosa con il vostro discorso?

1 Mi Piace

Ignora il babbano e lavami i piatti.

Ok

Attento, Jabbafar: è una trappola per vedere se sei umano. O se, comunque, gli lavi i piatti.

Ignora il Jabba e prepara la cena.

Ignora la cena e prepara il Jabba

2 Mi Piace