sql >> Database teknologi >  >> NoSQL >> Redis

Hvad betyder *((char*)-1) ='x' kode?

Opdater

Jeg fandt linjen i debug.c nævnt i OP, og vi kan se fra to linjer over denne kode:

redisLog(REDIS_WARNING,"(forcing SIGSEGV to print the bug report.)");

og den samme kode kan findes i _redisPanic også, så det ligner deres måde at tvinge en SIGSEGV på når en påstand mislykkes, eller der er panik.

Original

Dette ligner et fejlfindingsværktøj, vi kan se fra dette dokument Redis fejlretningsvejledning og det relevante afsnit siger:

Redis har en kommando til at simulere en segmenteringsfejl (med andre ord et dårligt nedbrud) ved hjælp af kommandoen DEBUG SEGFAULT (brug den ikke mod en rigtig produktionsinstans selvfølgelig;). Så jeg vil bruge denne kommando til at crashe min instans for at vise, hvad der sker i GDB-siden:

og viser dette gdb-output:

 (gdb) continue
 Continuing.

 Program received signal EXC_BAD_ACCESS, Could not access memory.
 Reason: KERN_INVALID_ADDRESS at address: 0xffffffffffffffff
 debugCommand (c=0x7ffc32005000) at debug.c:220
 220         *((char*)-1) = 'x';
             ^^^^^^^^^^^^^^^^^^^

Det, den gør, er at caste -1 til en *char ** og derefter udføre indirektion på den og tildele 'x' til denne hukommelsesplads. Som tråden der alk linkede Er ((void *) -1) en gyldig adresse? siger, at det på de fleste systemer ikke vil være gyldigt at få adgang til, endsige tildele en værdi til. Dette vil generere en segmenteringsfejl på de fleste moderne operativsystemer.

Dette er udefineret adfærd, og som det blev beskrevet i tråden. Hvad er den enkleste standardkonforme måde at producere en Segfault i C? det kan ikke stoles på. Compilere bliver klogere, og der er nogle berømte eksempler, hvor compileren er smart med at udnytte udefineret adfærd på uventede og dårlige måder.



  1. Implementering af cloud-databaser med ClusterControl 1.6

  2. Architecting for Security:En guide til MongoDB

  3. Grundlæggende om MongoDB-kædereplikering

  4. Redis som unik atom-id-generator - Trådsikker måde til webapp for at undgå racetilstand