
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[216.73.216.16] |
![]() |
|
![]() |
|
|
Доброго времени суток!
У меня задача воспроизвести часть кода стороннего приложения. Оно написано на VB под .NET 4.8. Был взят dotPeek и получен исходник данного приложения на C# в виде непригодном для компиляции, но достаточно читабельном. После чего был создан отдельный проект куда я собствено и добавлял постепенно восстановленный код. Функция за функцией. Образовалась проблема черного ящика. Я знаю что на входе и что на выходе оригинальной программы, но по какой-то причине воспроизведенный код дает иной результат. О коде. Функция public string HF() выдает на выходе строку вида 00000-00000, состоящую исключительно из цифр. Рабочая там по сути одна строка ![]() ![]() string sourceValue = Math.Abs(this.GHDSN().GetHashCode()).ToString(); которая получает серийник устройства в функции GHDSN(), получает от этой строки GetHashCode(), методом нехитрых манипуляций дополняет строку ведущими нулями до длины 10 знаков (хотя в большинстве случаев там и так 10 знаков) и вставляет минус в нужном месте. Все предельно просто. Функция GHDSN() получает серийник жесткого диска через Цитата SELECT * FROM Win32_DiskDrive WHERE Index=0 все тривиально. В случае exception выдается "значение по умолчанию". Но вот 2 программы - 2 разных результата выводятся на экран. Вот пример исходных данных. Строка на входе (возвращаемая GHDSN) "OK" (без кавычек). Исходная программа выдает 20413-62128, мой римейк - 08378-30687. Строка на входе 5143428997 (то самое значение по умолчанию) - исходная программа выдает 10806-48952, мой римейк - 05193-62597. На реальном серийнике диска все то же самое, за исключением того что мой римейк выдает ответ без ведущего нуля, там единица. Разница была в компиляторах и версии .NET, но для чистоты эксперимента я воспроизвел это в VS2019 и .NET 4.8 - ничего не изменилось, строка выводится не та. У кого будут какие идеи? |