Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
 Аватар для Kotofeyich
5 / 5 / 1
Регистрация: 02.12.2014
Сообщений: 62

Самомодификация кода

02.12.2014, 21:38. Показов 1075. Ответов 14
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Я пишу простенькую консольную игру на шарпе. Вопрос: можно ли сделать так, чтобы программа, в моем случае, изменила в своем коде начальное значение определенной переменной? Конкретно: я играю в эту игру, наиграл 100 золотых монет, в конце игры выбираю функцию сохранить, и программа меняет соответственно значение переменной кошелька в начале программы на 100.
Я понимаю что скорее всего это или невозможно или очень геморройно, в этом случае расскажите, как осуществить эту мысль с использованием внешних ресурсов.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
02.12.2014, 21:38
Ответы с готовыми решениями:

самомодификация
Возник достаточно нубский (учитывая опыт работы с паскалем) вопрос. В книгах приведены достаточно протстые примеры, не открывающие всех...

Самомодификация
Люди подскажите, есть ли на delphi самомодифицирующий код, возможно ли это?

Самомодификация
Люди подскажите самомодифицируемый код на tasm. Я знаю что на асме это возможно:)

14
0 / 0 / 0
Регистрация: 19.11.2014
Сообщений: 7
03.12.2014, 10:22
Довольно странное решение... А не проще, например, тянуть такие данные из БД или записывать их в файл?
0
Эксперт Python
 Аватар для dondublon
4653 / 2073 / 366
Регистрация: 17.03.2012
Сообщений: 10,183
Записей в блоге: 6
03.12.2014, 14:09
Цитата Сообщение от Kotofeyich Посмотреть сообщение
изменила в своем коде начальное значение определенной переменной
Легко. В C# переменные, не поверишь - изменяются Это не haskell.
Правда, при чём тут самомодификация КОДА - неясно.
0
0 / 0 / 0
Регистрация: 19.11.2014
Сообщений: 7
03.12.2014, 14:42
Цитата Сообщение от dondublon Посмотреть сообщение
Легко. В C# переменные, не поверишь - изменяются Это не haskell.
Правда, при чём тут самомодификация КОДА - неясно.
Я так понимаю, что речь шла о том, чтобы данные сохранялись (игра же всё-таки и прогресс надо запоминать), тогда для того, чтобы начальное значение переменной при старте программы было иным - надо его хранить вне переменных (что довольно логично). А если речь идёт о том, что надо менять значение переменной во время работы программы, то dondublon прав - обычное присваивание подойдёт =)
0
 Аватар для Kotofeyich
5 / 5 / 1
Регистрация: 02.12.2014
Сообщений: 62
03.12.2014, 16:38  [ТС]
Моя цель как раз состоит в том, чтобы не использовать внешние ресурсы. Так интереснее.

Добавлено через 1 минуту
sm0t, и как мне это сделать? Поможешь?
0
0 / 0 / 0
Регистрация: 19.11.2014
Сообщений: 7
03.12.2014, 16:53
Если ты хочешь записывать файл то гугли на тему "запись в файл c#". Если ты хочешь использовать БД, то поднимай БД (я как-то использовал для этих нужд postgreSQL) и прописывай к ней коннект, а далее делай запись и чтение обычными SQL - запросами. Первый способ проще, второй интереснее и в последствие будет проще его поддерживать =) Выбирай сам, чем смогу - помогу.
0
 Аватар для Kotofeyich
5 / 5 / 1
Регистрация: 02.12.2014
Сообщений: 62
03.12.2014, 21:43  [ТС]
sm0t, помоги осуществить идею с помощью базы данных, ибо я рак и не имею достаточно синтаксиса и знаний в принципе.
0
Эксперт Python
 Аватар для dondublon
4653 / 2073 / 366
Регистрация: 17.03.2012
Сообщений: 10,183
Записей в блоге: 6
04.12.2014, 07:03
Цитата Сообщение от Kotofeyich Посмотреть сообщение
Моя цель как раз состоит в том, чтобы не использовать внешние ресурсы. Так интереснее.
Внешних по отношению к чему? К коду?
Ну, безумству храбрых поём мы песню, чо.

Существует туева хуча локальных хранилищ, не требующих специальной установки. Начиная от простых текстовых файлов.

Добавлено через 13 секунд
Цитата Сообщение от Kotofeyich Посмотреть сообщение
Моя цель как раз состоит в том, чтобы не использовать внешние ресурсы. Так интереснее.
Внешних по отношению к чему? К коду?
Ну, безумству храбрых поём мы песню, чо.

Существует туева хуча локальных хранилищ, не требующих специальной установки. Начиная от простых текстовых файлов.
0
[Bicycle Reinventor]
 Аватар для Exerion
332 / 270 / 109
Регистрация: 19.10.2011
Сообщений: 668
Записей в блоге: 2
04.12.2014, 12:57
ТС хочет не то, что вы предлагаете.
Объясню понятным языком.
У нас есть класс Player. Есть поле класса money. Конструктор класса инициализирует значение денег нулём по умолчанию:
C#
1
2
3
4
5
6
7
8
class Player
{
   private ushort money;
   public Player()
   {
      money = 0;
   }
}
ТС хочет, чтобы при первом запуске игры деньги инциировались нулём, а при повторных запусках - инициировалось значением с предыдущей игровой сессии. При том, чтобы промежуточное значение не хранилось во фнешщних файлах/хранилищах/БД, а изменялось в самом сорс-коде конструктора класса.
Т.е. если после первой сессии игры игрок набрал 98 монет, вышел из игры, то при следующем запуске сам код приложения изменится и будет выглядеть уже так:
C#
1
2
3
4
5
6
7
8
class Player
{
   private ushort money;
   public Player()
   {
      money = 98;
   }
}
P.S. я понятия не имею, зачем ТС это нужно.
P.P.S. я понятия не имею, как это сделать, не используя внешние хранилища
P.P.P.S наверняка какой-то способ существует. Например, код может на манер рекурсии вызывать компилятор, передавать ему свой же код, вызывать полученный exe, или что-то вроде.
0
Эксперт Python
 Аватар для dondublon
4653 / 2073 / 366
Регистрация: 17.03.2012
Сообщений: 10,183
Записей в блоге: 6
04.12.2014, 13:05
Exerion, да мы уж поняли. и пытаемся объяснить, что не надо так делать.
Как говорил Р. Киплинг, код - это код, данные - это данные, им не сойтись никогда.
0
0 / 0 / 0
Регистрация: 19.11.2014
Сообщений: 7
04.12.2014, 13:07
Такой расклад первым пришёл мне в голову, потому я и написал "Довольно странное решение...". Согласитесь, что сделать это, даже если и можно, то в крайней степени некорректно =)

ТС'y, раз уж он сказал сам про БД скажу вот что: если хотите действовать через БД моим методом, то погуглите на тему "как поднять postrgreSQL", а когда поднимите, то "postgresql c# connecting". Учитесь гуглить - это реально помогает в жизни и работе, а вот если будут какие-то конкретные вопросы, то спрашивайте - ответим в силу своих знаний =)
0
Эксперт Python
 Аватар для dondublon
4653 / 2073 / 366
Регистрация: 17.03.2012
Сообщений: 10,183
Записей в блоге: 6
04.12.2014, 13:15
sm0t, полагаю, если субд надо "поднимать", то это уже слишком сложное решение, из пушки по воробьям.
Начать надо с текстовых файлов, если этого окажется недостаточно - заюзать бд, которые не требуют сервера, а читаются просто так. Например, sqlite. Или hdf5, это уже из продвинутых, ориентирован под числодробилки.
0
0 / 0 / 0
Регистрация: 19.11.2014
Сообщений: 7
04.12.2014, 13:19
Цитата Сообщение от dondublon Посмотреть сообщение
sm0t, полагаю, если субд надо "поднимать", то это уже слишком сложное решение, из пушки по воробьям.
Начать надо с текстовых файлов, если этого окажется недостаточно - заюзать бд, которые не требуют сервера, а читаются просто так. Например, sqlite. Или hdf5, это уже из продвинутых, ориентирован под числодробилки.
Ничего там сложного нет. У меня был проект, в котором поднятие БД было, конечно, гораздо более целесообразно, чем для сохранения счёта в консольной игре, но зато какая масштабируемость. Может сегодня ТС пишет консольную игрушку, а завтра это перерастёт в майнкрафт, кто знает =) А, вообще, да... вполне достаточно и записи в файл для таких нужд.
0
 Аватар для Kotofeyich
5 / 5 / 1
Регистрация: 02.12.2014
Сообщений: 62
04.12.2014, 18:15  [ТС]
Я стремлюсь к этому лишь потому, что это простое приложение, которое будет запускаться одним экзешником, и если будет еще хотя бы один лишний файл, для меня она будет слишком громоздкой.

Хотя на самом деле это мой маразм, забейте.
0
 Аватар для sau
2773 / 2073 / 386
Регистрация: 22.07.2011
Сообщений: 7,820
04.12.2014, 21:55
Можно и как хочет ТС , правда сложность не оправдывает себя.
Сам себя exe-шник перезаписать не сможет , поэтому нужно будет создавать временный файл , который будет перезаписывать оригинальный после чего удаляться.
Ну а что бы упросить процесс перезаписи - т.е не искать там байты и прочее , нужно что бы код был динамически компилируемый , тогда можно просто реплейсить значение в строке кода и сохранять ее в новом исполняемом файле. Короче извращение то еще ) , но если очень хочется , то можно.

Цитата Сообщение от Kotofeyich Посмотреть сообщение
и если будет еще хотя бы один лишний файл
А вообще , если смущают лишние файлы (даже стандартный конфиг) , то почему бы просто в реестр не записать или куданить в AppData-у , там может и будет лишний файл , но глаза мозолить не будет.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
04.12.2014, 21:55
Помогаю со студенческими работами здесь

Самомодификация. GetLastError() = 299
Решил потренироваться и изучить самомодификацию. Написал код: int _tmain(int argc, _TCHAR* argv) { unsigned char* AddressFunc =...

Напишите фрагмент кода для определения кода нажатой клавиши (расширенного кода в том числе)
Напишите фрагмент кода для определения кода нажатой клавиши (расширенного кода в том числе). Найдите коды клавиш Esc, Enter, BackSpace,...

Компиляция/добавление кода без видимости самого кода(сложно объяснить)
Есть код по типу такого: static void Main() { Hm.Ex checker = new Hm.Ex();//Hm - namespace, Hm.Ex - class ...

Замена програмно куска кода в файле .php другим куском кода
Мне необходимо програмно заменить кусок кода в файле .php Есть файл .php, в котором надо заменить кусок кода другим куском кода. Для...

Почему после изменения кода продолжает выполняться сценарий старого кода?
ВОПРОС Почему после изменения кода продолжает выполняться сценарий старого кода? ИМЕЕТСЯ Проект 1, который выполняет СЦЕНАРИЙ 1 . ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru