Если изменить код но не скомпилировать его измениться ли файл exe
На моем рабочем месте используется SVN, и я использую Git локально. Мой рабочий процесс включает обновление из SVN, фиксацию в ветке Git "svn_only", а затем перенастройку моей текущей тематической ветки на это.
Все это означает, что «модифицированные» временные метки в моих исходных файлах меняются довольно часто, даже если содержимое фактически не изменилось. Это может привести к очень долгому времени компиляции, так как программа решит, что ей нужно создать материал, который действительно имеет обновленные файлы объектов и библиотек.
Я написал сценарий, который проходит через мой проект и обновляет "измененную" временную метку для каждого отдельного файла .lib, .exe, .lastbuildstate, .ilk, .pdb, .o и .tlog до времени, когда я запустил сценарий. Однако это никак не влияет на то, что он решает построить.
An item is considered up-to-date if its output file is the same age or newer than its input file or files.
If all output items are up-to-date, MSBuild skips the target. This incremental build of the target can significantly improve the build speed. If only some files are up-to-date, MSBuild executes the target but skips the up-to-date items, and thereby brings all items up-to-date.
Итак . это должно сработать, не так ли? Что мне не хватает? Должна ли это быть отметка времени «Создано», а также «Изменено»?
е: вот моя текущая попытка. Это не дает желаемого эффекта, но я не знаю почему:
Это действительно изменяет целевые файлы на вчерашнюю метку времени, но это лишь частично влияет на то, решит ли MSVC, что их нужно перестроить.
Со всем обновленным (недавно созданным), если я touch исходный файл, чтобы установить его временную метку на вчерашний день, MSVC не скомпилирует это. Прохладный. Если я просто touch установил метку времени на текущее время, делает скомпилирует его. Таким образом, отметка времени исходного файла, очевидно, является одним из факторов, но не может быть единственным фактором.
Установить измененную временную метку раньше, чем, например, метка времени выходного исполняемого файла?
Вы имеете в виду получить метку времени в выходном исполняемом файле, а затем установить метку времени в каждом исходном файле немного раньше, чем это? Это не идеально, поскольку исходных файлов тысячи и тысячи. Хотя я могу попробовать.
Это действительно не здорово. Я пробую find source \( -name '*.h' -or -name '*.hpp' -or -name '*.c' -or -name '*.cpp' -or -name '*.cxx' \) -not -path ".svn" | xargs -d '\n' -n 1 -P $WORKER_PROCESSES touch -t$timestamp с 16, а затем 32 процессами и устанавливаю метку времени на вчерашний день. Для запуска требуется 15 минут, примерно для 29 000 исходных файлов. Это действительно работает, поскольку предотвращает перекомпиляцию файлов, но работает очень-очень медленно. Целевых файлов должно быть намного меньше, так что это должно быть быстрее.
(Чтобы уточнить, это сценарий bash. Я использую установку bash для Windows с помощью Git. Но в любом случае исходных файлов намного больше, чем файлов вывода, поэтому запуск этого сценария в исходных файлах - не лучший вариант)
Должно было быть более ясным: устанавливать дату изменения только тех файлов, которые на самом деле имеют временные метки новее, чем вывод, то есть те, которые были изменены в процессе перебазирования; Я предполагаю, что можно каким-то образом получить список этих файлов при ребейзинге, не проверял.
Вы можете опубликовать сценарий? Было бы любопытно прочитать это
sudo rm -rf slash
Здравствуйте! Только что задался вопросом: можно ли изменить код уже скомпилированной программы(так чтобы она работала)? То есть, имея исполняемый файл, можно ли его открыть как текстовый документ и изменять(ну всё-таки исходные коды линковщиков и компиляторов есть же). Я понимаю, что после работы компилятора, си там уже не пахнет, но всё же, изучив структуру ехе файла - это можно сделать, или это полный бред?
2 ответа 2
Полностью исходный код программы конечно получить не возможно, но есть декомпиляторы которые его стараются восстановить, но получается из этого вырви-глаз и разбирать там не чего, а тем более редактировать. Насчёт редактирования ПО, это вам нужно изучить ассемблер (советую гуглить по запросу "реверс инжиниринг") и научиться таким программам как OllyDbg либо IdaPRO (платная и достаточно дороговатая) и потом уже делать патчи на те программы которые вы хотите, точнее редактировать. Но есть проблема в вашем вопросе, как вы хотите её редактировать, если просто дизайн, то вам достаточно и редактора ресурсов, которых OVER 9999+ в интернете как бесплатных(Resource Hacker), так и платных(Resource Tuner).
Да нет, Вы просто не поняли моего вопроса, из-за его абсурдности. Можно ли, теоретически менять код уже скомпилированного экзешника блокнотом каким-нибудь, при условии, идеального знания роботы компилятора и линковщика?
@АртурКлочко да, конечно, если вы машина 😂, то вы можете редактировать через какой нибудь текстовый редактор опкоды программы и менять ход её работы
а я однажды блокнотом создал экзешник и подписал его time , а внутри просто какие-то свои данные записал. В итоге я запустил экзешник, открылось окно консоли и показало мне время. Ещё раз повторюсь в экзешнике даже MZ не пахло, просто несколько строк. Как так? Какая фича Винды?
@АртурКлочко, командный интерпретатор обработал и запустил команду time. Делов-то. exe тут как флаг исполнения, а не машинный код.
Через конкретно блокнот (или там Word) - нет, запорет он вам некоторые символы.
А вот hex-редактором - в принципе можно. А как, по-вашему, всякие ломалки работают? :) Именно так - меняя в нужных местах код/данные.
Только тут - как в том апокрифе со старшим Капицей, которому якобы обещали за границей 10000 марок за ремонт какой-то там установки. Он приехал, посмотрел, сказал ассистенту ударить молотком в таком-то месте - все заработало. За такую работу принимающей стороне сумма показалась слишком большой, попросили счет. Он выглядел так:
Удар молотком - 1 марка.
За то что знал, где ударить - 9999 марок.
Словом, чтоб знать, куда ударить и какие байты и как поменять - надо долго и упорно учиться :)
Поменять какие-то данные типа, чтоб не Hello world выводила, а типа Coolhacker :) - это попроще.
При нажатии на кнопку “Чтение” из файла 1.txt считываются и выводятся все строки в окно элемента управления textBox, а при нажатии на кнопку “Запись” данные из текстового поля сохраняются в файле 2.txt
Для хранения путей в программе используются две текстовых переменных: filePathIn и filePathOut
Прошёл год, как программа была написана и отдана заказчику, но вдруг ему потребовалось изменить имя папки, в которой должны храниться оба файла, c 123 на Text. Задача простая, но прошло уже много времени, и исходник был потерян, что делать в такой ситуации?
Полученный в результате компиляции файл (сборка) содержит внутри себя метаданные, манифест, код на языке IL (MSIL).
Манифест описывают саму сборку
MSIL код, полученный в результате компиляции файла исходного кода
То есть перед вами тот же исходник, только в другом формате. И для того, чтобы поработать с ним, Вам понадобиться специальный инструмент, который позволяет просматривать и редактировать данные внутри сборки.
Дизассемблер ILDASM
Для удобства работы создадим отдельную папку, например: ”c:\newasm” и поместим в неё файл TextEdit.exe
Затем в меню “Пуск” открываем папку: «Visual Studio Tools»
Запускаем командную строку разработчика
Откроется консоль, вводим первую команду: ildasm. Для выполнения команды нажмите клавишу Enter.
Появиться главное окно программы.
Переместим файл сборку TextEdit.exe в окно дизассемблера ILASM, в результате отобразиться её внутреннее содержимое.
Убедимся, что в ней содержатся нужные нам данные (пути к файлам).
Два поля на месте, теперь взглянем на метаданные.
Для доступа к метаданным Вы так же можно использовать сочетание горячих клавиш: Ctrl+M. Затем с помощью кнопки Find, найдём имя одного из файлов.
Как видно присутствуют оба. Пути найдены, и теперь их нужно изменить, но все данные, в текущий момент, доступны только для просмотра, и изменить их в самой дизассемблере нельзя, поэтому воспользуемся второй возможностью данной программы и выгрузим содержимое сборки в файл.
Выгрузка данных
Выберите пункт меню File -> Dump
Появится меню. В данном примере, все пункты меню оставим без изменений и просто нажмём кнопку OK.
Появится диалоговое окно
Выберем ранее созданную папку “newasm”, затем укажем имя и тип файла и нажмём на кнопку “Сохранить”
В результате в папке “newasm” должно появиться несколько новых файлов
Закрываем окно ildasm, а так же удаляем файл Textedit.exe, больше он нам не понадобиться. Теперь нас интересует полученный файл texted.il и для начала откроем его любым текстовым редактором, например блокнотом.
Снова воспользуемся поиском (Ctrl+F)
Так же видим найденные строки, которые содержат пути к файлам.
Изменим текущее имя папки 123 на новое название Text, для обоих файлов
Сохраняем внесённые изменения и закрываем блокнот.
Ассемблер ILASM
Изменения внесены и теперь нужно преобразовать файл txted.il обратно в исполняемый файл (.exe) Для этого нам понабиться второй инструмент ILASM, ассемблер, который так же входит в состав пакета SDK и не требует отдельной установки.
Возвращаемся в консоль
Вводим вторую команду:
Вот таким не сложным способом можно выйти из данной ситуации, при этом не имея исходника под рукой.
Вложения
The Codeby
The Codeby
ООО Кодебай
admin
Пятница на 10:09
Программа (файл) на каком языке написана?
Иван
Суббота на 10:09
Добрый день. Такая же ситуация. Пытаюсь открыть файл exe в редакторе LD DASM у меня появляется ошибка «отсутствует допустимый заголовок CLR поэтому дизассемблирование невозможно». Файл написан на Delphi.
В дельфи сборка не содержит CLR заголовок и код, если не ошибаюсь, сразу преобразуется в машинный.
Иван
Понедельник на 12:09
А как-то нормально можно посмотреть код, если есть уже окончательный exe и несколько dll проекта?
Иван
Среда на 03:09 ПП
Ну чтобы взять код себе в другой проект
admin
Четверг на 11:09
Есть вроде какие-то, но не помню названия, потому что не использую их.
Анатолий
Четверг на 12:02 ПП
Можете, помочь как я хочу переписать лаунчер для игры, что бы изменить проверку файлов но не могу никак открыть его. Пробывал через ресторатор 2007 но оно не может прочитать пату файлов точнее отобразить язык.
Я не привык к c, C++ или AHK. Моя проблема в следующем:
Существует инструмент под названием «TI Helper», который состоит из 1 EXE и нескольких текстовых файлов. Этот EXE-файл позволяет вам нажать «CTR + SPACE» в приложении TM1, при этом появится всплывающее меню (контекстное меню), основанное на текстовых файлах .
Я открыл EXE с помощью блокнота, и мы видим код . Могу ли я просто повторно использовать или изменить этот код? Что мне нужно иметь в виду?
Что именно вы видите, открывая .exe с помощью блокнота?
Чтобы изменить файл, необходимо иметь навыки сборки. После компиляции не имеет значения, что он был написан на C++.
@HolyBlackCat Он говорит: «мы можем видеть код» - что бы это ни значило. Кроме того, он не видел ассемблерного кода, он видел бы бинарную тарабарщину, так что «навыков сборки» было бы недостаточно. Заголовок уже не имеет смысла.
Benjamin James Drury
Хуже того, что говорит @HolyBlackCat. Вам нужно не только знать ассемблер, но и управлять байтами инструкций.
С чего вы взяли, что это c / C++?
Является ли EXE на самом деле двоичным исполняемым файлом формата Windows PE, содержащим метаданные + машинный код x86? Если так, то вряд ли вы сможете сделать что-нибудь полезное с блокнот. Используйте шестнадцатеричный редактор для взлома двоичных файлов, как обычный человек, желательно со встроенным ассемблером / дизассемблером x86.
"Могу ли я просто повторно использовать или изменить этот код?" - нет, требует серьезных навыков и значительного количества времени, часто проще переписать программное обеспечение с нуля на каком-то языке высокого уровня (особенно, если существует программное обеспечение с открытым исходным кодом, которое технически достаточно похоже, чтобы его можно было согнуть для ваших целей ), если вы хотите более крупную модификацию. Если вы хотите просто удалить какую-то опцию или изменить какую-то строку . тогда исправление двоичного файла возможно, но все же требует значительных навыков + не имеет большого смысла, просто загрузите исходный код и измените его, любой хорошо SW имеет исходный код.
Я не привык к C, C++ или AHK. Моя проблема заключается в следующем:
Существует инструмент под названием «TI Helper», который состоит из 1 EXE и нескольких текстовых файлов. Этот EXE-файл позволяет вам нажимать «CTR+ПРОБЕЛ» в приложении TM1, которое вызывает всплывающее меню (меню, вызываемое правой кнопкой мыши) на основе текстовых файлов.
Я открыл EXE-файл с помощью блокнота, и мы видим код. Могу ли я просто повторно использовать или изменить этот код? Что я должен иметь в виду?
Вы должны иметь навыки сборки, чтобы изменить файл. После того, как он был скомпилирован, не имеет большого значения, что он был написан на C++.
@HolyBlackCat Он говорит, что «мы можем видеть код» — что бы это ни значило. Кроме того, он не увидит ассемблерный код, он увидит бинарную тарабарщину, так что «навыков ассемблера» будет недостаточно. Заголовок уже не имеет смысла.
Является ли EXE исполняемым файлом в формате Windows PE, содержащим метаданные + машинный код x86? Если да, то вряд ли вы сможете сделать что-нибудь полезное с блокнотом . Используйте шестнадцатеричный редактор для взлома двоичных файлов, как обычный человек, желательно со встроенным ассемблером/дизассемблером x86.
Это не имеет ничего общего с C, C++ или сборкой, и вы не декомпилируете и не можете перекомпилировать исполняемый файл.
TIHelper — это файл AHK (язык сценариев для автоматических горячих клавиш) с открытым исходным кодом. Как файл сценария, он не компилируется в нечитаемую машинную тарабарщину, а вместо этого интерпретируется в удобочитаемой форме.
Вы можете вносить изменения в этот файл AHK и работать с этими изменениями.
Прежде всего - будут ли какие-либо модификации exe-файлов нарушать или соблюдать условия лицензирования программного обеспечения?
Если это разрешено, вы должны знать формат exe-файла, а лучше даже язык ассемблера.
Как правило, изменение сегмента данных в exe-файле (например, 13 символов «Файл создан» на «Результат в порядке» — общее количество байтов exe-файла не изменится) может в конечном итоге привести только к изменениям в отображаемом тексте. Модификация бинарного кода (сегмент кода исполняемого файла) требует понимания, что такое "mov ax,60", к чему это может привести и может дать ожидаемый результат ТОЛЬКО при условии полного понимания машинного (ассемблерного) кода.
Читайте также: