Процессор NTVDM столкнулся с незаконной инструкцией
-
20-08-2019 - |
Вопрос
Я столкнулся с довольно странной ошибкой, которую я не понимаю.Я создал консольное приложение на C #, которое было разработано просто как тест, чтобы проверить, работает ли мой веб-сервис за пределами моей сети.Все, что он делал, это пытался подключиться к веб-сервису, выводил каждый этап на консоль и записывал его в текстовый файл, чтобы они могли отправлять мне логи.
Это отлично работало на 3 машинах XP (одна внутри моей сети, 2 снаружи).Компьютер Vista (имел файл манифеста), но на компьютере моего босса XP (он ИТ-специалист, поэтому знает, что делает) он выдал очень странную ошибку.
C: emp estwe ~1.exe Процессор NTVDM обнаружил недопустимую инструкцию
http://www.houseofhawkins.com/roger.jpg ">
Я немного погуглил, и мне показалось, что его NTVDM, возможно, был поврежден, или там был вирус, или что-то в этом роде.Похоже, что ни одно из этих действий не соответствует действительности.Я не могу понять, что могло бы произойти, чтобы это привело к такому сбою.
использование Системы;использование системы.Коллекции.Общий;использование System.Text;использование системы.IO;
пространство имен testwebservice { класс Program { FileStream theFile = null;StreamWriter writer = нуль;
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);
}
}
}
}
Я очень удивлен, почему приведенный выше код мог / сделал бы это.Это вроде как просто я хочу знать, и частично, может ли это случиться с реальной клиентской машиной, или просто заражена машина моего босса или что-то в этом роде.
Спасибо
Решение
Что-то очень не так, если вы в конечном итоге перейдете на NTVDM, поскольку это 16-разрядный уровень эмуляции DOS для XP.Если это произойдет снова после того, как вы скопируете EXE-файл заново, я бы проверил программное обеспечение, установленное на компьютере вашего босса (версия .NET framework и т.д.).
Я бы также попробовал запустить это в WinDbg, чтобы увидеть, где вы окажетесь, получить стек вызовов после сбоя и т.д., Бьюсь об заклад, вы найдете в стеке странный модуль (шпионское ПО и т.д.).