У меня есть программа, которую я часто использую, которая сделана с .NET.
В этой программе есть небольшая ошибка, которая очень раздражает, и разработчика приложения нигде нет.
Я нашел местоположение проблемы в рефлекторе и просто хочу добавить здесь один оператор if, а затем перекомпилировать программу.
Какой самый простой способ сделать это?
Я пытался использовать функцию экспорта в отражателе, но она не работает идеально. Например, многие директивы using отсутствуют, и перечисления, приведенные к целым и обратно, также не экспортируются должным образом. Я верю, что могу исправить это с помощью некоторой работы, но мне интересно, есть ли какой-нибудь более простой способ сделать это.
Обновление: решено следующим образом:
Программа представляет собой отдельный исполняемый файл
- Найти ошибку в рефлекторе с помощью C # -view. Затем переключитесь в IL-view, чтобы увидеть, что вы должны искать в шаге 5.
- Откройте программу, которую вы хотите изменить с помощью ildasm
- Нажмите dump и выберите пустую папку, настройки по умолчанию у меня сработали.
- Найдите файл .il в этой папке и откройте его любым текстовым редактором
- Найдите код из шага 1.
- Замените его новым кодом, в моем случае мне просто нужно было заменить все содержимое функции простым возвратом (IL_0000: ret). Я не думаю, что все исправления будут такими легкими.
- Откройте командное окно в папке с шага 3
- Запустите ilasm, мне также пришлось включить некоторые ресурсы из оригинального exe. Они автоматически выводятся с ildasm. Я использовал этот илазм вот так "C: \ Windows \ Microsoft.NET \ Framework \ v2.0.50727 \ ilasm.exe" test.il /resource=test.res /output=FixedProgram.exe
Готово! Я использовал фиксированную программу только несколько минут, но, похоже, она работает так же, как и раньше, за исключением ошибки:)
Я также столкнулся с некоторыми проблемами с настройками приложения. В % appdata% \ ProgramName была папка с именем что-то вроде ProgramName.exe_Url_qa5i3p42aomuvoxpuxuficvbmngksgjs , где хранятся все настройки. Мой новый исполняемый файл создал новую папку, подобную этой, с разными случайными буквами в конце и настройками по умолчанию. Чтобы скопировать ранее использованные настройки, просто скопируйте все содержимое старой папки в новую.