La CPU NTVDM ha riscontrato un'istruzione non valida
-
20-08-2019 - |
Domanda
Ho riscontrato un errore piuttosto strano che non capisco. Ho creato un'applicazione console C # progettata per essere solo un test per vedere se il mio servizio Web funzionava dall'esterno della mia rete. Tutto ciò che ha fatto è stato provare a connettersi al servizio Web, inviare ogni fase alla console e scriverlo in un file di testo in modo che potessero inviarmi i registri.
Ha funzionato perfettamente su 3 macchine XP (una all'interno della mia rete, 2 all'esterno). Una macchina Vista (aveva un file manifest) ma sulla mia macchina XP dei miei capi (è un ragazzo IT quindi sa cosa sta facendo), ha generato un errore molto strano.
C: \ temp \ testwe ~ 1.exe La CPU NTVDM ha riscontrato un'istruzione illegale
http://www.houseofhawkins.com/roger.jpg">
Ho fatto un po 'di ricerche su Google e sembrava che il suo NTVDM potesse essere stato infastidito, o che ci fosse un virus o qualcosa del genere. Nessuno di questi sembra essere il caso. Non riesco a vedere cosa accadrà perché ciò fallisca in questo modo.
utilizzando il sistema; utilizzando System.Collections.Generic; utilizzando System.Text; utilizzando System.IO;
testwebservice dello spazio dei nomi { programma di classe { FileStream theFile = null; StreamWriter writer = null;
static void Main(string[] args)
{
Program p = new Program();
p.testMe();
}
private void testMe()
{
Console.WriteLine("Entered main method about to create stream");
try
{
theFile = File.Create(@"jonTestWebService.log");
writer = new StreamWriter(theFile);
writer.AutoFlush = true;
try
{
message("Starting test at: " + DateTime.Now.ToLongTimeString());
Random rand = new Random();
message("creating new instance of webservice");
houseofhawkins.testweb webServ = new testwebservice.houseofhawkins.testweb();
message("calling hello world");
String helloResult = webServ.HelloWorld();
message("hello world result = " + helloResult);
int one = rand.Next(999);
int two = rand.Next(999);
message("calling maths method with " + one + " + " + two);
String mathResult = webServ.mytestMethod(one, two);
message("Math result is: " + mathResult);
message("Creating instance of CSJawbreaker");
CSJawbreaker.InformationService csj = new testwebservice.CSJawbreaker.InformationService();
message("trying to get the latest version number");
float version = csj.latestVersionNumber();
message("Version number: " + version.ToString());
message("");
message("Finished all processing at: " + DateTime.Now.ToLongTimeString());
}
catch (Exception ex)
{
writer.WriteLine("");
writer.WriteLine(ex.Message);
writer.WriteLine("");
}
}
catch (Exception ex)
{
Console.WriteLine("could not create stream Writer, " + ex.Message);
}
message("");
message("Press return to exit");
Console.ReadLine();
writer.Close();
theFile.Close();
}
private void message(String message)
{
if (theFile != null && writer != null)
{
Console.WriteLine(message);
writer.WriteLine(message);
}
}
}
}
Sono molto bloccato sul perché il codice sopra potrebbe / vorrebbe farlo. È un po 'quello che voglio sapere e in parte, potrebbe succedere a una macchina reale dei clienti, o è solo la macchina dei miei capi infettata o qualcosa del genere.
Grazie
Soluzione
Qualcosa non va se si finisce in NTVDM, poiché si tratta del livello di emulazione DOS a 16 bit per XP. Se ciò dovesse accadere di nuovo dopo aver ricopiato il file EXE, esaminerei il software installato sul PC del tuo capo (versione .NET framework, ecc.).
Proverei anche a eseguirlo in WinDbg per vedere dove finisci, ottenere uno stack di chiamate una volta che si guasta ecc., Scommetto che troverai uno strano modulo sullo stack (spyware, ecc.)