|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
14.09.2017, 14:10 | #1 |
Спокойный псих
Участник клуба
Регистрация: 19.03.2013
Сообщений: 1,538
|
Декомпилировать exe-шник C#/.NET
Здравствуйте.
Вопрос такой: чем декомпилировать exe-шник собственного проекта ? Это у меня консольная программа. Дальше кому не интересно - можно не читать. История такая: написал я программу-парсер прайс-листов, для того что бы подгонять форматы данных разных прайсов под одинаковый, для сайта над которым я работаю. Сегодня пришли новые прайсы, и нужно доделывать программу, да и там какой то баг с пустыми ячейками вылез, но это пока не так важно. Программу использовал там, где и создавал проект (в папке bin\Release). Полез открывать проект (как обычно через файл *.csproj/*.sln) - а файла нет. Как и остальных исходников проекта. Я точно уверен, что я сам их не удалял, ибо изначально было известно, что будут новые поставщики, и соответственно новые прайсы. Я не знаю, как и куда они делись. За комп никого не пускал, всё под тремя паролями (я серьёзно =) ). Но это ещё ладно. Там кода было уже немало, и восстанавливать с нуля как то не очень (где то неделя времени).
Подпись ? Не, не слышал ...
Последний раз редактировалось OmegaBerkut; 14.09.2017 в 15:12. |
14.09.2017, 14:33 | #2 |
Старожил
Регистрация: 12.01.2011
Сообщений: 19,500
|
Так а вопрос-то в чем? Точнее почему не задать его гуглу?) DotPeek, Reflector, ILSpy, ...
Ну и для такого ж люди и делают бэкапы. Хотя бы Дропбокс. А еще лучше систему контроля версий для кода (Git) с удаленным хостингом (Github, Gitlab), кроме бэкапа дает и кучу других плюшек.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом. |
14.09.2017, 15:07 | #3 |
Спокойный псих
Участник клуба
Регистрация: 19.03.2013
Сообщений: 1,538
|
Задавал ... Смотрел плохо, ибо везде вода разбавлена нужными мне ответами.
Как ни странно, я бэкапы НЕ делаю редко ... И такое у меня впервые ... Остались только данные с папкой Release ... Что странно, так как даже если бы удалял я - удалил бы всё, включая саму программу. Как могло случиться так, что потерялся проект ?
Подпись ? Не, не слышал ...
|
14.09.2017, 15:44 | #4 |
Спокойный псих
Участник клуба
Регистрация: 19.03.2013
Сообщений: 1,538
|
Хех ... ILSpy восстановил мне код по интересному ... Логика как бы та же, но вот некоторые конструкции другие ... Больше всего порадовало то, что много переходов (goto), которые я вообще не делал. Так же конструкция switch-case была заменена на условия с глубиной вложения, сколько было кейсов =).
Это из-за того что так работает компилятор, или всё же так работает ДЕкомпилятор ? Если же первое - то не понятно, за что обсирают goto, и "предпочитают" sitch-case перед if-else ? Если тут далеко ходить не надо, чуть копнул - и вот оно как компьютер то работает (я это и так знал). Я то понимаю, что это вопрос удобства чтения кода, но всё же не стоит забывать о удобстве и качестве реализации и работы продукта ... А то я где то слышал "идиому", которая выглядит примерно так: если в процессе построения и написания кода алгоритма ты пришёл к необходимости использовать goto - то весь алгоритм строится изначально в корне неверно.
Подпись ? Не, не слышал ...
Последний раз редактировалось OmegaBerkut; 14.09.2017 в 15:58. |
14.09.2017, 16:06 | #5 | |
Старожил
Регистрация: 12.01.2011
Сообщений: 19,500
|
В байткоде нет циклов и if/else в таком виде, только goto.
Но вроде бы декомпилятор их восстанавливает обычно. Цитата:
И чем goto поможет?
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом. |
|
14.09.2017, 16:29 | #6 |
Спокойный псих
Участник клуба
Регистрация: 19.03.2013
Сообщений: 1,538
|
Наиболее
Чуть по сложнее, с чем я часто сталкиваюсь - в начале функции проверка правильности данных, и в случае обнаружения проблем до начала обработки - сразу прыгнуть в конец функции, и выполнить какие то необходимые действия. Если со вложенными циклами вроде не сложно - То вот с перепрыгиванием в конец функции уже куда сложнее; или проверять всё по мере необходимости, и допустим на втором этапе выполнения - время выполнения программы уже потрачено, и зря, так как выход; или громоздить условия. Одно вредит качественной работе продукта, второе - удобству разработки. Толи дело goto.
Подпись ? Не, не слышал ...
|
14.09.2017, 16:58 | #7 |
Старожил
Регистрация: 12.01.2011
Сообщений: 19,500
|
Вложенные циклы часто лучше заменять функциями.
Про проверку непонятный пример, какие действия? Ну и проверки тоже можно в функцию вынести.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом. |
14.09.2017, 17:38 | #8 | |
Спокойный псих
Участник клуба
Регистрация: 19.03.2013
Сообщений: 1,538
|
Цитата:
Действия - например вывод какой либо информации о том, почему нельзя выполнять обработку, и/или сброс данных для наиболее "безболезненного" последующего запуска алгоритма; в случае с тем же ботом - что бы продолжить/прервать итерацию, перейти на следующую и/или подвязанную (под)итерацию (режим == итерация).
Подпись ? Не, не слышал ...
Последний раз редактировалось OmegaBerkut; 14.09.2017 в 18:59. |
|
14.09.2017, 23:33 | #9 | |||
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
Цитата:
вопрос форматирования вашего кода. с goto проблема что не известно куда он прыгнет. обычные блоки пойдут в в след строку после блока и все. Цитата:
вопрос не того что внутри инструкций, а вопрос цены поддержания кода. foreach тоже всего лишь сахар, как и using, но с ними проще и сразу понятно что есть что. Цитата:
Код:
(c if тяжело вставить код до конца блока , с goto вставить код до метки случайно не вопрос ). не знаю, может у вас проекты столь короткие или их мало что вы этого не понимаете...я тоже так ранее считал. но все эти синтаксические плюшки не просто так идут. улучшение читабельности и поддерживаемости это реально дорого стоит. Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. Последний раз редактировалось Пепел Феникса; 14.09.2017 в 23:39. |
|||
14.09.2017, 23:51 | #10 |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
если вы пишете для себя, можете забивать на все практики и прочее.
но такой код лучше не показывать. эти практики появились с литрами кофе. мой вам совет как старшего программиста(можно сказать тимлида в общемто) Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. Последний раз редактировалось Пепел Феникса; 14.09.2017 в 23:54. |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Декомпилировать EXE файл (предположительно на C++) | Xezon | Помощь студентам | 5 | 11.08.2013 03:44 |
Вскрыть exe'шник | wm_leviathan | Операционные системы общие вопросы | 8 | 31.01.2011 17:11 |
Добавление нового ресурса в exe шник | MVX | Помощь студентам | 19 | 06.08.2010 11:19 |
Как 'засунуть' звуковой файл в EXE-шник.чтоб моя прога состояла всего из одного exe | betirsolt | Общие вопросы Delphi | 11 | 18.04.2010 21:58 |
18-ти килобайтовый EXE-шник... | Altera | Общие вопросы Delphi | 15 | 30.04.2008 06:33 |