Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.09.2017, 14:10   #1
OmegaBerkut
Спокойный псих
Участник клуба
 
Аватар для OmegaBerkut
 
Регистрация: 19.03.2013
Сообщений: 1,538
По умолчанию Декомпилировать exe-шник C#/.NET

Здравствуйте.
Вопрос такой: чем декомпилировать exe-шник собственного проекта ? Это у меня консольная программа.

Дальше кому не интересно - можно не читать.
История такая: написал я программу-парсер прайс-листов, для того что бы подгонять форматы данных разных прайсов под одинаковый, для сайта над которым я работаю.
Сегодня пришли новые прайсы, и нужно доделывать программу, да и там какой то баг с пустыми ячейками вылез, но это пока не так важно.
Программу использовал там, где и создавал проект (в папке bin\Release).
Полез открывать проект (как обычно через файл *.csproj/*.sln) - а файла нет. Как и остальных исходников проекта.
Я точно уверен, что я сам их не удалял, ибо изначально было известно, что будут новые поставщики, и соответственно новые прайсы. Я не знаю, как и куда они делись. За комп никого не пускал, всё под тремя паролями (я серьёзно =) ). Но это ещё ладно.
Там кода было уже немало, и восстанавливать с нуля как то не очень (где то неделя времени).
Подпись ? Не, не слышал ...

Последний раз редактировалось OmegaBerkut; 14.09.2017 в 15:12.
OmegaBerkut вне форума Ответить с цитированием
Старый 14.09.2017, 14:33   #2
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Так а вопрос-то в чем? Точнее почему не задать его гуглу?) DotPeek, Reflector, ILSpy, ...

Ну и для такого ж люди и делают бэкапы. Хотя бы Дропбокс.
А еще лучше систему контроля версий для кода (Git) с удаленным хостингом (Github, Gitlab), кроме бэкапа дает и кучу других плюшек.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 14.09.2017, 15:07   #3
OmegaBerkut
Спокойный псих
Участник клуба
 
Аватар для OmegaBerkut
 
Регистрация: 19.03.2013
Сообщений: 1,538
По умолчанию

Цитата:
Сообщение от Alex11223 Посмотреть сообщение
почему не задать его гуглу?
Задавал ... Смотрел плохо, ибо везде вода разбавлена нужными мне ответами.
Как ни странно, я бэкапы НЕ делаю редко ... И такое у меня впервые ... Остались только данные с папкой Release ... Что странно, так как даже если бы удалял я -
удалил бы всё, включая саму программу.
Как могло случиться так, что потерялся проект ?
Подпись ? Не, не слышал ...
OmegaBerkut вне форума Ответить с цитированием
Старый 14.09.2017, 15:44   #4
OmegaBerkut
Спокойный псих
Участник клуба
 
Аватар для OmegaBerkut
 
Регистрация: 19.03.2013
Сообщений: 1,538
По умолчанию

Хех ... ILSpy восстановил мне код по интересному ... Логика как бы та же, но вот некоторые конструкции другие ... Больше всего порадовало то, что много переходов (goto), которые я вообще не делал. Так же конструкция switch-case была заменена на условия с глубиной вложения, сколько было кейсов =).
Это из-за того что так работает компилятор, или всё же так работает ДЕкомпилятор ?
Если же первое - то не понятно, за что обсирают goto, и "предпочитают" sitch-case перед if-else ? Если тут далеко ходить не надо, чуть копнул - и вот оно как компьютер то работает (я это и так знал). Я то понимаю, что это вопрос удобства чтения кода, но всё же не стоит забывать о удобстве и качестве реализации и работы продукта ... А то я где то слышал "идиому", которая выглядит примерно так: если в процессе построения и написания кода алгоритма ты пришёл к необходимости использовать goto - то весь алгоритм строится изначально в корне неверно.
Подпись ? Не, не слышал ...

Последний раз редактировалось OmegaBerkut; 14.09.2017 в 15:58.
OmegaBerkut вне форума Ответить с цитированием
Старый 14.09.2017, 16:06   #5
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

В байткоде нет циклов и if/else в таком виде, только goto.

Но вроде бы декомпилятор их восстанавливает обычно.
Цитата:
Сообщение от OmegaBerkut Посмотреть сообщение
Если же первое - то не понятно, за что обсирают goto, и "предпочитают" sitch-case перед if-else ? Если тут далеко ходить не надо, чуть копнул - и вот оно как компьютер то работает (я это и так знал). Я то понимаю, что это вопрос удобства чтения кода
Так в этом и есть причина.

Цитата:
Сообщение от OmegaBerkut Посмотреть сообщение
но всё же не стоит забывать о удобстве и качестве реализации и работы продукта
И чем goto поможет?
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 14.09.2017, 16:29   #6
OmegaBerkut
Спокойный псих
Участник клуба
 
Аватар для OmegaBerkut
 
Регистрация: 19.03.2013
Сообщений: 1,538
По умолчанию

Цитата:
Сообщение от Alex11223 Посмотреть сообщение
И чем goto поможет?
Наиболее тупой простой пример - выход из вложенных циклов.
Чуть по сложнее, с чем я часто сталкиваюсь - в начале функции проверка правильности данных, и в случае обнаружения проблем до начала обработки - сразу прыгнуть в конец функции, и выполнить какие то необходимые действия.

Если со вложенными циклами вроде не сложно - палки в колёса флаги выходов ... (но всё равно проще с goto)
То вот с перепрыгиванием в конец функции уже куда сложнее; или проверять всё по мере необходимости, и допустим на втором этапе выполнения - время выполнения программы уже потрачено, и зря, так как выход; или громоздить условия. Одно вредит качественной работе продукта, второе - удобству разработки. Толи дело goto.
Подпись ? Не, не слышал ...
OmegaBerkut вне форума Ответить с цитированием
Старый 14.09.2017, 16:58   #7
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Вложенные циклы часто лучше заменять функциями.

Про проверку непонятный пример, какие действия?
Ну и проверки тоже можно в функцию вынести.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 14.09.2017, 17:38   #8
OmegaBerkut
Спокойный псих
Участник клуба
 
Аватар для OmegaBerkut
 
Регистрация: 19.03.2013
Сообщений: 1,538
По умолчанию

Цитата:
Сообщение от Alex11223 Посмотреть сообщение
Про проверку непонятный пример, какие действия?
Ну и проверки тоже можно в функцию вынести.
Абстракно - любая предпроверка каких либо данных и условий перед началом обработки большого блока данных. Вывести в функцию - да, можно, но это часто неудобно, когда у меня логически связанные данные и проверки между собой, что как бы само собой разумеется - в итоге просто куча параметров, и дополнительные сложности при организации логики и данных (что опять же влияет на удобство разработки); такие сложности проще избежать всего то одним маленьким goto. Понятно, что одна-две проверки не очень существенны, но когда режимов работы с десяток, и соответствующее количество проверок, все режимы и проверки отличаются между собой - нет никакого смысла обобщать алгоритмы разных режимов. И это не только при обработке прайсов. Я так например писал бота для одной игры, где было 8 режимов работы.
Действия - например вывод какой либо информации о том, почему нельзя выполнять обработку, и/или сброс данных для наиболее "безболезненного" последующего запуска алгоритма; в случае с тем же ботом - что бы продолжить/прервать итерацию, перейти на следующую и/или подвязанную (под)итерацию (режим == итерация).
Подпись ? Не, не слышал ...

Последний раз редактировалось OmegaBerkut; 14.09.2017 в 18:59.
OmegaBerkut вне форума Ответить с цитированием
Старый 14.09.2017, 23:33   #9
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
Сообщение от OmegaBerkut Посмотреть сообщение
Если со вложенными циклами вроде не сложно - палки в колёса флаги выходов ... (но всё равно проще с goto)
То вот с перепрыгиванием в конец функции уже куда сложнее; или проверять всё по мере необходимости, и допустим на втором этапе выполнения - время выполнения программы уже потрачено, и зря, так как выход; или громоздить условия. Одно вредит качественной работе продукта, второе - удобству разработки. Толи дело goto.
return можно ставить не только в конце
вопрос форматирования вашего кода.

с goto проблема что не известно куда он прыгнет.
обычные блоки пойдут в в след строку после блока и все.


Цитата:
Сообщение от OmegaBerkut Посмотреть сообщение
Если же первое - то не понятно, за что обсирают goto, и "предпочитают" sitch-case перед if-else ?
сделайте хоть раз switch по enum.

вопрос не того что внутри инструкций, а вопрос цены поддержания кода.
foreach тоже всего лишь сахар, как и using, но с ними проще и сразу понятно что есть что.
Цитата:
такие сложности проще избежать всего то одним маленьким goto.
вот тут абсолютно goto ничем не отличается от обычного блока.
Код:
if(/*куча условий истинны*/)
{
  //делаем работу.
}
goto тут тоже самое, но не имеет блочности, не имеет защиты от ошибки.
(c if тяжело вставить код до конца блока , с goto вставить код до метки случайно не вопрос ).

не знаю, может у вас проекты столь короткие или их мало что вы этого не понимаете...я тоже так ранее считал.
но все эти синтаксические плюшки не просто так идут.
улучшение читабельности и поддерживаемости это реально дорого стоит.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.

Последний раз редактировалось Пепел Феникса; 14.09.2017 в 23:39.
Пепел Феникса вне форума Ответить с цитированием
Старый 14.09.2017, 23:51   #10
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

если вы пишете для себя, можете забивать на все практики и прочее.
но такой код лучше не показывать.

эти практики появились с литрами кофе.

мой вам совет как старшего программиста(можно сказать тимлида в общемто)
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.

Последний раз редактировалось Пепел Феникса; 14.09.2017 в 23:54.
Пепел Феникса вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Декомпилировать 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