eXeL@B —› Вопросы новичков —› Простые способы замены кода в dotNet |
<< . 1 . 2 . |
Посл.ответ | Сообщение |
|
Создано: 02 марта 2019 13:09 · Личное сообщение · #1 Здравствуйте, ув. Профессионалы! Хочу научиться производить замену кода в приложениях dotNet. Для этого создал на C# очень простое тестовое приложение. При нажатии на кнопку Calculate приложение просто складывает два числа, которые были введены в текстовые поля и результат выводит в третье текстовое поле. Задача заменить исходную функцию сложения на следующую: Code:
Код функции читает первую строку из файла Result.txt и возвращает ее в качестве результата. Также хочу обратить внимание, что код фунции использует библиотеку 'using System.IO;', которая не подключена в исходном приложении Файлы с тестовым приложением выложил здесь в архиве 'Calc.exe' - исходное приложение, 'FileRead.dll' - функция для замены, 'Result.txt' - текстовый файл, откуда будет читаться первая строка По возможности, просьба подробно указывать ЧТО, КАК И С ПОМОЩЬЮ КАКИХ ИНСТРУМЕНТОВ следует делать для замены кода. По Вашим рекомендациям я буду учиться |
|
Создано: 11 марта 2019 15:34 · Поправил: Medsft · Личное сообщение · #2 |
|
Создано: 13 марта 2019 15:00 · Поправил: rukop84 · Личное сообщение · #3 Мастер Medsft, Спасибо! Видео и скриншоты оказались очень кстати. Сразу стало ясно как на самом деле следует работать в ILSpector. Когда есть образец для подражания, то многие эксперименты отпадают за ненадобностью Кстати, возможно хорошей идеей будет добавить сделанное видео на Ваш youtube-канал (ILSpector - Хитрости применения). Там еще не было демонстрации в ILSpector'е новой функции Inject На текущий момент застрял на байт-патчинге. Заменяю вызов метода на целевой, лишнее затираю как по инструкции, но приложение после таких изменений падает. Всю работу делаю в ILSpector'е Описываю детально что делаю: 1. То, что было до изменений -> скрин: 2. То, что стало после патчинга -> скрин: |
|
Создано: 13 марта 2019 19:27 · Поправил: Medsft · Личное сообщение · #4 Вот отсюда инжекти https://dropmefiles.com/5GbYQ а дальше все как и делал Не буду я тебе сейчас разницу объяснять между структурами и классами и способами хранения их в сборке | Сообщение посчитали полезным: rukop84 |
|
Создано: 14 марта 2019 19:36 · Поправил: rukop84 · Личное сообщение · #5 Medsft пишет: Вот отсюда инжекти Сделал инжект, сделал патч, все идеально работает, ничего не падает Сейчас застрял на том, что пытаюсь воссоздать такой же файл для инжекта как и у Вас: - код делаю такой же - .NET Framework 2.0 такой же - AssemblyVersion=0.0.0.0 такую же !!!Но все равно файл dll для инжекта получается какой-то другой. На практике это отличие выражается вот в чем: - Ваш файл после инжекта можно патчить хоть в ILSpector, хоть в любом hex-редакторе и ничего падать не будет - а мой файл после инжекта можно патчить только в ILSpector. После изменений же в hex-редакторе приложение будет падать Мастер, Medsft каких атрибутов не хватает в компиляции? p.s.: для компиляции dll использую Visual Studio 10 |
|
Создано: 15 марта 2019 08:59 · Поправил: Medsft · Личное сообщение · #6 |
|
Создано: 15 марта 2019 10:07 · Личное сообщение · #7 чудо здесь: Medsft пишет: в ILSpectore есть встроенный assembly comparer.Видал? как им компеить так и не понял. Делаю так: - загружаю в ILSpector один файл dll -> на нем ПКМ -> Compare Assembly -> в диалоговом окне выбираю dll для сравнения -> Ок -> Но ничего не происходит |
|
Создано: 15 марта 2019 11:44 · Поправил: Medsft · Личное сообщение · #8 rukop84 пишет: Но ничего не происходит бага какаято https://dropmefiles.com/4ju8z вот вроде последняя версия.Проверил comparer comparer работает. Только не устанавливай на C диск. Добавлено спустя 1 минуту разницы не вижу между твоим и моим файликом а следовательно в hex - редакторе ты чтото делаешь неправильно Добавлено спустя 5 минут rukop84 пишет: можно патчить только в ILSpector сними нам кино чтоли как ты это делаешь |
|
Создано: 15 марта 2019 13:39 · Поправил: rukop84 · Личное сообщение · #9 Medsft пишет: разницы не вижу между твоим и моим файликом Ну, очень интересно!!! Благодаря той версии ILSpector, которую Вы прислали я вижу сплошные различия, сделал скрин: Хорошо бы, если бы Вы прокомментировали эти различия. И Главное - как создать файл подобный Вашему?! Мастер, а как в ILSpector убрать результаты сравнения? Никаких кнопок закрытия не нашел, и чтобы очистить пространство приходится его перезапускать Добавлено спустя 1 час 56 минут А еще заметил по работоспособности ILSpector: - сравниваю файлы -> удаляю файл из проекта -> закрываю ILSpector !!!Но запущенный процесс при этом не завершается, приходится прибивать его вручную в диспетчере задач Добавлено спустя 4 часа 41 минуту В общем придумал как себе устроить самопроверку со своим файлом dll: 1. Сделать инжект dll + патч в ILSpector + сохранить 2. Сделать инжект dll + патч в hex + сохранить 3. Сравнить по байтам сборки в п.1 и п.2 После того, как выполнил проверку оказалось, что сборка патченная в hex-редакторе не падает (как было раньше). А сами файлы отличаются одним байтом Вывод: совпал с тем, что сделал Мастер: Medsft пишет: следовательно в hex - редакторе ты что-то делаешь неправильно Цели создания Темы считаю достигнутыми. Спасибо, всем кто принимал здесь участие и оказывал помощь. Мастер Medsft, Спасибо за помощь и наставничество, и за терпение тоже Сегодня и завтра здесь еще можно будет что-либо написать. В Вс Тему закрою |
|
Создано: 15 марта 2019 19:50 · Личное сообщение · #10 |
|
Создано: 15 марта 2019 19:53 · Личное сообщение · #11 |
|
Создано: 15 марта 2019 19:54 · Личное сообщение · #12 |
|
Создано: 15 марта 2019 20:03 · Личное сообщение · #13 |
<< . 1 . 2 . |
eXeL@B —› Вопросы новичков —› Простые способы замены кода в dotNet |
Эта тема закрыта. Ответы больше не принимаются. |