Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.90/29: Рейтинг темы: голосов - 29, средняя оценка - 4.90
144 / 28 / 4
Регистрация: 06.05.2019
Сообщений: 1,839
Записей в блоге: 4

Может ли программа менять свой собственный код?

28.05.2020, 00:50. Показов 6863. Ответов 41
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Значит идея такая создать расширяемую программу. Сначала создаём заголовочный файл. В нём пишем следующий текст.
C++
1
2
#define St1 "Пустая строка"
#define Stt1 int in=12;
. Далее подключаем заголовочный код к нашему проекту который я назвал "Версия2". В Мэйне пишем такой код.
C++
1
2
3
4
5
6
7
8
9
10
Stt1// подключаем переменную in
cout<<"Vyvod St "<<St1<<" Stt1 "<<in<<endl;//проверяем или подключились макросы и какие там значения
string put="C:\\Users\\123\\Documents\\Visual Studio 2012\\Projects\\Версия2\\Версия2\\Эксперимент.h";//указываем путь
//к заголовочному файлу где хранятся макросы именно этот код мы и будем менять
ofstream file;
file.open(put,2);//далее подключаемся к заголовочному файлу в режиме перезаписи(8ка это режим дозаписи в конец файла)
file<<"#define St1 \"Не Пустая строка 1\""<<"\n";//переписываем макросы
file<<"#define St2 int k=18;"<<"\n";//этот макрос использовать не получиться потому что ранее мы его не подключили
file<<"#define Stt1 float in=34.582;"<<endl;//ранее он был int теперь флоат
file.close();
Нажимаем кнопку компилировать программу. Программа компилируется. Выбивается предупреждение
Этот файл был изменен вне редактора исходного текста. Перезагрузить его?(Нажимаем да)
, происходит зацикливание и создаётся эффект что программа сама себя переписала и вместо строк
C++
1
2
#define St1 "Пустая строка"
#define Stt1 int in=12;
видим строки
C++
1
2
3
#define St1 "Не Пустая строка 1"
#define St2 int k=18;
#define Stt1 float in=34.582;
Можно ли это использовать для расширяемости программ. Я конечно понимаю что здесь кроется много чего но было бы классно. Вполне возможно что здесь сыграет роль время компиляции программы хотя кто его знает. Можно ли написать функцию которая в реальном времени будет игнорировать тот факт что код изменился, или сделать вообще ничего нельзя.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
28.05.2020, 00:50
Ответы с готовыми решениями:

Выбор языка для программ, анализирующих и меняющих свой же собственный код
Посоветуйте язык программирования сверхвысокого уровня (ЯПСВУ), программа на котором могла бы в COMPILE TIME обрабатывать и изменять свой...

PHP выводящий свой собственный код без использования функции чтения файла
Написать PHP-скрипт, выводящий свой собственный код без использования функции чтения файла.

Какая программа может менять букву диска?
У нас в школе нельзя втыкать флешки в комп, но многие пытались, потом подходил учитель......... Но люди говорили, что они работают на...

41
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
28.05.2020, 13:30
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
проблем с запуском самописных эльфов не встречал
Покажите как вы это делаете. Напишите на уровне батфайла - компилятор+ключи+файл+запуск на исполнение. С какими правами (под windows? скажем) вы будете это делать? Сможете ли удалить старый процесс и старый экзешник с тем же именем (с которого работаете)? Морока, это всё, как мне кажется. Но посмотреть интересно)
Я не говорю о IPC для 2 и более процессов, а именно о программе которая во время выполнения может менять свой код:
Цитата Сообщение от Nexi99 Посмотреть сообщение
Может ли программа менять свой собственный код
0
738 / 705 / 110
Регистрация: 29.05.2015
Сообщений: 4,362
28.05.2020, 14:00
Нужно, что-бы ехе-шник "видел", что вычисления зашли куда-то не туда, подправил свой код в оперативке и сделал goto снова и снова, пока задача не будет решена. И в конце не забывал сбросить годный вариант кода в файл - для потомков. Высший пилотаж в программировании.

Всего то, написал универсальную программу, дал ей задание - и пусть сама думает, как решить.
0
 Аватар для COKPOWEHEU
4150 / 2728 / 433
Регистрация: 09.09.2017
Сообщений: 12,101
28.05.2020, 17:22
Цитата Сообщение от IGPIGP Посмотреть сообщение
Покажите как вы это делаете.
В простейшем случае
Code
1
2
$ gcc main.c
$ ./a.out
Если что-то более-менее серьезное
Code
1
2
$ make
$ ./res/prog64
либо в случае кросс-платформенного тестирования
Code
1
2
$ make arch=arch_win32
$ wine res/prog32.exe
Цитата Сообщение от IGPIGP Посмотреть сообщение
С какими правами (под windows? скажем) вы будете это делать?
Что интересно, даже при проверка на виртуальных и реальных win7, win10 проблем с запуском не было.
Но вы же говорили про современные ОС, а не про какую-то конкретную. Так вот, в современных ОС проблем не возникает.
Цитата Сообщение от IGPIGP Посмотреть сообщение
Сможете ли удалить старый процесс и старый экзешник с тем же именем
Не знаю, не пробовал. Но учитывая, что при удалении открытого файла фактически удаляется только имя, а сам файл остается доступным, непреодолимых проблем не вижу.
Но вы главное скажите, какую именно задачу вы пытаетесь мне приписать? Учитывая, что для типичных ситуаций я предлагал более логичные решения:
Для добавления юзерской логики - добавление интерпретатора.
Для обновления (в случае невозможности использовать штатные механизмы вроде apt), запустить отдельную программу-обновлятор.
Даже если хочется странного, можно поиграться с правами доступа к оперативке, хотя зачем именно это нужно, кроме jit-компиляции, я с ходу даже не придумаю.
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
28.05.2020, 17:46
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Не знаю, не пробовал.
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Но вы главное скажите, какую именно задачу вы пытаетесь мне приписать?
COKPOWEHEU, я вам не пытался ни чего приписать. Это вы пытались говорить о том, что я не прав. А я лишь задал вопросы в ответ. И продолжаю утверждать, что соорудить прогу, пишущую свой код, это достаточно нетривальная затея.
0
 Аватар для COKPOWEHEU
4150 / 2728 / 433
Регистрация: 09.09.2017
Сообщений: 12,101
29.05.2020, 20:39
Цитата Сообщение от IGPIGP Посмотреть сообщение
Второй момент - после перекомпиляции современные ОС не позволят запустить новый процесс просто с бухты-барахты.
В общем случае это не правда.
Цитата Сообщение от IGPIGP Посмотреть сообщение
И продолжаю утверждать, что соорудить прогу, пишущую свой код, это достаточно нетривальная затея.
Смотря что понимать под "пишущую свой код". Если речь о встраивании в неизменный код скажем на Си скриптуемого участка, скажем, на python - довольно просто. Да, скрипт можно воткнуть прямо в исходный код в виде строки.
Для чего может понадобиться возможность менять весь свой код (кроме некоторых вариантов обновления) не знаю, соответственно и рассматривать не считаю нужным.
Цитата Сообщение от IGPIGP Посмотреть сообщение
А я лишь задал вопросы в ответ.
В таком случае удовлетворили ли вас мои ответы? Просто я на них отвечал в контексте своего поста про "не позволит запустить после перекомпиляции", то есть про простейший случай. Но, кажется, вы подразумевали какой-то другой сценарий.
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
29.05.2020, 20:45
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
В общем случае это не правда.
Что есть правда? Похоже вы ищите не правду а ложь. Кто ищет тот всегда найдёт. Вы тами говорили о jit компиляции (внутри соответствующей ВМ), теперь о интерпретируемых языках. И это не то о что я имел ввиду.
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
В таком случае удовлетворили ли вас мои ответы?
Я ни где не пытался их оценивать. Если вам и правда интересно, - посмотрю внимательнее. Однако при чём тут моё мнение о ваших ответах? Я редко высказываюсь в таком духе. Разве-что уж что-то очень возмутительное придётся встретить. Я высказал своё и всё.
0
144 / 28 / 4
Регистрация: 06.05.2019
Сообщений: 1,839
Записей в блоге: 4
29.05.2020, 21:03  [ТС]
Ладно ребята не спорте. Идея моя такая допустим я читаю переменную с преобразованием в Чар а потом мне нужно читать её как Шорт и как по вашему это реализовать через Питон, в этом случае нужно весь код писать на Питоне, ну или проверки делать.
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
29.05.2020, 22:01
Цитата Сообщение от Nexi99 Посмотреть сообщение
Ладно ребята не спорте. Идея моя такая допустим я читаю переменную с преобразованием в Чар а потом мне нужно читать её как Шорт и как по вашему это реализовать через Питон, в этом случае нужно весь код писать на Питоне, ну или проверки делать.
Преобразований типов в С++ только стандартных - количество. Есть и сторонние и навесные. boost::lexical_cast например, очень способствует... Это не про программу которая себя изменяет. Это про программу которая может вести себя как-то в зависимости от обстоятельств... Этим тут все и занимаются, в том или ином виде.
0
144 / 28 / 4
Регистрация: 06.05.2019
Сообщений: 1,839
Записей в блоге: 4
29.05.2020, 22:10  [ТС]
Цитата Сообщение от IGPIGP Посмотреть сообщение
Преобразований типов в С++ только стандартных
Ну так стандартных и нужно например я использовал Чар теперь нужен Шорт, это же нужно отправить команду что теперь тип читается по другому взять указатель. Можно использовать если иначе но это дороговато или програму компилировать вручную спустя какое-то время.
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
29.05.2020, 22:47
Цитата Сообщение от Nexi99 Посмотреть сообщение
Ну так стандартных и нужно например я использовал Чар теперь нужен Шорт, это же нужно отправить команду что теперь тип читается по другому взять указатель. Можно использовать если иначе но это дороговато или програму компилировать вручную спустя какое-то время.
Ушел думать, поражённый широтой замысла.
0
 Аватар для COKPOWEHEU
4150 / 2728 / 433
Регистрация: 09.09.2017
Сообщений: 12,101
29.05.2020, 22:54
Цитата Сообщение от IGPIGP Посмотреть сообщение
Я ни где не пытался их оценивать.
А зачем тогда задавать вопросы если не интересуетесь ответами?
Цитата Сообщение от Nexi99 Посмотреть сообщение
допустим я читаю переменную с преобразованием в Чар а потом мне нужно читать её как Шорт
Вообще не понял. Преобразование char <-> uint8_t довольно простое (учитывая что это обычно одно и то же). Даже если в char вы считываете не цифру, а ее код, решается вычитанием/сложением кода '0'.
Цитата Сообщение от Nexi99 Посмотреть сообщение
я использовал Чар теперь нужен Шорт, это же нужно отправить команду
Как и для чего выбирается тип данных? Не хватит ли нескольких if'ов или перегруженного класса?
0
144 / 28 / 4
Регистрация: 06.05.2019
Сообщений: 1,839
Записей в блоге: 4
30.05.2020, 18:49  [ТС]
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Вообще не понял. Преобразование char <-> uint8_t довольно простое (учитывая что это обычно одно и то же). Даже если в char вы считываете не цифру, а ее код, решается вычитанием/сложением кода '0'.
Я вам объясняю сначала у меня
C++
1
2
char K;// а потом мне нужен
short K;
Превратить одно К в другое К поменять тип переменной а все остальные расчёты оставить как есть. Тут только либо проверки делать, что конечно замедлит программу, либо Питон, тогда весь код на Питоне писать, или писать скрипт который перезапустит программу например через командную строку, перекомпилирует данные, это очень сложно для меня. Так что да Интерпретации тут не хватает, правда я уже придумал как сделать.
0
Модератор
2131 / 1000 / 170
Регистрация: 23.07.2018
Сообщений: 3,349
Записей в блоге: 3
29.08.2020, 08:29
И что придумали, если не секрет?
Я, к сожалению, не уловил идею из обсуждения. Возможно, невниметельно читал.
0
Эксперт С++
 Аватар для Avazart
8489 / 6156 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
29.08.2020, 10:26
Цитата Сообщение от Nexi99 Посмотреть сообщение
Превратить одно К в другое К поменять тип переменной а все остальные расчёты оставить как есть. Тут только либо проверки делать, что конечно замедлит программу, либо Питон, тогда весь код на Питоне писать, или писать скрипт который перезапустит программу например через командную строку, перекомпилирует данные, это очень сложно для меня. Так что да Интерпретации тут не хватает, правда я уже придумал как сделать.
Про шаблоны в С++ не слышали? Есть еще std::any/std::variant.


Касательно Python, его можно вызывать из С++ (можно например использовать boost/python).
Так же можно встраивать Lua в С++ (еще проще/легче)
1
Just Do It!
 Аватар для XLAT
4223 / 2689 / 656
Регистрация: 23.09.2014
Сообщений: 9,252
Записей в блоге: 3
30.08.2020, 18:04
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
Выбирай себе Пайтон, PHP, lisp или ещё какую дребедень
нет.
уже давно пора в кресты добавить динамически исполняемые шаблоны.

Автор, как раз был послан Бездной в этот Мир, чтобы воплотить в крестах эту фичу.
0
Неэпический
 Аватар для Croessmah
18150 / 10732 / 2067
Регистрация: 27.09.2012
Сообщений: 27,047
Записей в блоге: 1
30.08.2020, 18:47
Цитата Сообщение от XLAT Посмотреть сообщение
уже давно пора в кресты добавить динамически исполняемые шаблоны.
А добавят, будут орать, - "нафига, язык разбух, рухнет под собственной тяжестью". Знаем, проходили.
Для этого есть другие языки.
0
738 / 705 / 110
Регистрация: 29.05.2015
Сообщений: 4,362
30.08.2020, 18:50
Во времена MS-DOS программа могла, кажется, менять свой код налету. Операционная система позволяла. Особенно исполняемые файлы с расширением .com
0
Just Do It!
 Аватар для XLAT
4223 / 2689 / 656
Регистрация: 23.09.2014
Сообщений: 9,252
Записей в блоге: 3
30.08.2020, 20:01
Цитата Сообщение от Nexi99 Посмотреть сообщение
Может ли программа менять свой собственный код?
ладно раскрою секрет, как это сделать:
Кликните здесь для просмотра всего текста

осторожно! За просмотр взымается оплата!

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
void my_code_var_01()
{ /// ...
}
 
void my_code_var_02()
{ /// ...
}
...
    ///------------------------|
    /// Программно меняем код. |
    ///------------------------:
    if(my_if) my_code_var_01();
    else      my_code_var_02();
...

0
738 / 705 / 110
Регистрация: 29.05.2015
Сообщений: 4,362
30.08.2020, 23:01
Так и я могу. Код это ведь машинный код? Например есть какая-то процедура "02 Е4 11...", а мы меняем на "03 Е5 12..." и вызываем процедуру ещё раз. Зависнет конечно... Но теоретически это возможно, например динамически менять адреса и вызывать разные процедуры.
0
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
31.08.2020, 02:16
Цитата Сообщение от XLAT Посмотреть сообщение
уже давно пора в кресты добавить динамически исполняемые шаблоны.
И будет как в Питоне - "чтобы запустить эту программу на три строчки, тащите вместе с ней компилятор со всеми стандартными библиотеками в нагрузку".
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
31.08.2020, 02:16

Программа которая может менять атрибуты выбранных файлов
Написать программу которая может менять атрибуты выбранных файлов (Изманение, чтение, запись и т.д.) Должны меняться атрибуты файлов - по...

Программа не может открыть свой файл
Здравствуйте.Покликал по системе теперь при нажатии на файл открывается моя программа.Как сделать чтобы содержимое файла было показано в...

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

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

Программа, сохраняющая свой исходный код
Я решал задачу, в которой программа должна хранить свой исходный код. Как это лучше сделать?? 1. Сначала я подумал, может задействовать...


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Транслитерация текста с кириллицы на латиницу (вариант №2)
Maks 13.11.2026
Обновленная версия ранее созданной обработки. Добавлено: - Проверка исходного текста на кириллицу, через обращение к стандартной функции "ТолькоКириллицаВСтроке" из общего модуля. . .
Часы с термометром и праздничным календарем
yariko 12.11.2026
Сегодня мы рассмотрим как можно сделать отличные многофункциональные часы. Итак, поставим конкретную задачу: разработать часы с календарем, двумя термодатчиками, выводом поздравительных сообщений. . .
Транслитерация текста с кириллицы на латиницу (вариант №1)
Maks 11.11.2026
Решил облегчить жизнь себе и коллегам админам при создании электронных почтовых ящиков для пользователей, в результате написал обработку "Транслитерация текста" с кириллицы на латиницу, а в ней. . .
Книги по геймдизайну, левел-дизайну, игровым механикам и проектированию игрового опыта
8Observer8 08.11.2026
Содержание блога | English Version 1. 2003 - 06 - Designing Virtual Worlds (1st Edition) Автор: Richard A. Bartle | Объем: 768 стр. Ссылки: Amazon . . .
Родители токсичные абьюзеры по отношению к своим детям ругают их оскорбляют не любят
zorxor 08.11.2026
Жить в атмосфере постоянных оскорблений, критики и холодности со стороны родителей — это тяжелое и болезненное испытание, которое оставляет глубокие эмоциональные раны. Токсичное и абьюзивное. . .
Как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы. Ответ от Джемени ИИ.
zorxor 08.11.2026
Джемени, как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы. Многие люди, возвращаясь домой, сразу переодеваются в максимально свободную одежду или вовсе предпочитают. . .
Паттерн очереди действий/команд (Action / Command Queue). Система очереди действий и кат-сцен с SDL3 Callbacks, cglm и OpenGL
8Observer8 07.11.2026
Содержание блога | English Version Руководство для начинающих по реализации паттерна очереди действий/ команд (Action / Command Queue) на C++ (C++20) с использованием официального SDL3 Callbacks. . .
Проверка полного ФИО в типовом справочнике
Maks 07.11.2026
Решение реализовано в конфигурации КА2, на примере справочника "КонтактныеЛицаПартнеров". Задача: Запрет инициалов. Не допускаеть использование сокращений вида "И. И. ", "И. И. ", "И И" и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru