Zoeken…


Invoering

Dit onderwerp richt zich op fouten die worden veroorzaakt door processorfouten. Hier zijn de dingen die we ons zouden concentreren op de oorzaak en de oplossing van het probleem.

Opmerkingen

In het voorbeeld DEL File Extension , merkt gebruiker X. Liu op dat deze bug niet zal optreden wanneer de bestandsextensie in de DEL opdracht minder dan 3 tekens bevat.

Haakjes verwarring

Vanaf deze website heeft het OP een probleem opgemerkt.


Oorzaak

Overweeg het volgende codefragment.

if 1==1 (
    set /a result = 2*(3+4)
)

Op het eerste gezicht denkt u misschien dat CMD.exe het zo zou verwerken:

  • De voorwaarde is waar, voer een codeblok uit
  • Stel de waarde van het variabele resultaat in op 14
  • Doorgaan met

CMD.exe als volgt:

  • De voorwaarde is waar, voer een codeblok uit
  • Bereken 2*(3+4 , de ) nadat 4 is verwerkt aan het einde van if codeblok
  • Een willekeurige ) is verschenen!

De tweede stap zou een fout Unbalanced parentheses opleveren.


Oplossing

Volgens een Duitse CMD.exe's set /? zouden we rekenkundige operaties moeten citeren. Hier is een voorbeeld.

voorgaand Resultaat
set /a result=2+5*4 set /a result="2+5*4"

Trouwens, volgens een Engelse CMD.exe- set /? , aanhalingstekens zijn vereist als logische of modulus-operatoren aanwezig zijn in de uitdrukking (hoewel dit geen verplichte stap is).

Onjuist ontsnappingskarakter

In deze Stack Overflow-vraag vond gebruiker txtechhelp een probleem met het ^ -teken dat een beveiligingsprobleem kon veroorzaken.


Oorzaak

anyInvaildCommand ^

Opmerking: zorg ervoor dat het kruisje ( ^ ) het laatste teken is! Elke extra CR\LF werkt helemaal niet!

De caret zoekt naar het volgende karakter om te ontsnappen. Er zijn echter geen personages meer beschikbaar om te ontsnappen, dus cmd loopt oneindig op zoek naar een personage om te ontsnappen. In dit "lus" -proces verbruikt cmd.exe uw computergeheugen. En geleidelijk alle geheugen opeten, waardoor de computer op zijn knieën komt.

Dit probleem kan leiden tot ernstiger beveiligingsproblemen, omdat je de code gewoon in de ontgrendelde computer kunt invoeren.

Oplossingen

  • Gebruik codepagina UTF-16 kan dit probleem oplossen. Alleen UTF-8 of ASCII zou de bug veroorzaken.

  • Zorg ervoor dat er een extra CR\LF in het bestand zit, of gebruik gewoon geen caret aan het einde van het bestand.

Extra

Deze bug lijkt te zijn opgelost in Windows 10.

DEL Bestandsextensie

Deze bug is gemeld door steve2916 uit deze Microsoft Windows Forum-thread.


Oorzaak

Overweeg een map met dergelijke bestanden.

TestA.doc
TestB.doc
TestC.docx
TestD.docx

Als we alle .doc bestanden in deze map willen verwijderen, doen we meestal:

del *.doc

Met deze opdracht worden echter ook de .docx bestanden verwijderd. Hetzelfde gebeurt op bestandsextensies met dit patroon.

Dien een ... in Bestand B
Iedere naam. abc Een andere naam. abc d

Zoals we kunnen zien, wordt het bestand verwijderd zolang de bestandsextensiereeks de tekenreeks bevat die wordt gebruikt in de opdracht del . Merk op dat deze bug alleen optreedt wanneer de extensiereeks die wordt gebruikt in de opdracht del ten minste drie tekens bestaat. Bijvoorbeeld, del *.do A.doc verwijdert A.doc of A.docx .

Oplossing

In de thread merkte gebruiker MicroCompsUnltd op dat het gebruik van Powershell het probleem zou oplossen.



Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow