|
16 / 1 / 0
Регистрация: 24.07.2018
Сообщений: 22
|
|
Выполнение Си кода из переменной31.08.2018, 11:11. Показов 2867. Ответов 48
Метки нет (Все метки)
1
|
|
| 31.08.2018, 11:11 | |
|
Ответы с готовыми решениями:
48
Динамическое выполнение кода, содержащегося в переменной Как ускорить выполнение кода? (Получение цвета пикселя, сравнение и выполнение действия)
|
|
Модератор
8982 / 6749 / 921
Регистрация: 14.02.2011
Сообщений: 23,876
|
||
| 01.09.2018, 21:22 | ||
|
так никто и не говорил что это универсальный метод ![]() скорее всего грязный хак например на гарвардских архитекторах вообще не выполнится а вот на фон Немановских,в которых и данные и команды суть одно и тоже, зависит наверное от настроек ОС ![]() я ломать системы бросил еще во времена XPюнделя но вот 32 компилятор скомпилил и даже выполнл а вот 64 битный даже компилить не захотел
0
|
||
|
|
|||
| 01.09.2018, 23:18 | |||
|
Вероятно, под виндой в 32-битном режиме биты на страницах памяти проставляются как-то не стандартно. Может быть, что-то растёт из совместимости Добавлено через 19 секунд
0
|
|||
|
Модератор
8982 / 6749 / 921
Регистрация: 14.02.2011
Сообщений: 23,876
|
|||
| 01.09.2018, 23:51 | |||
![]() но чтобы ломать системы нужно знать их устройство, и эти же знание нужны чтобы заставить программу работать нештатно а я последнее время перешел на микроконтроллеры, и в винде уже как простой пользователь ![]() а линукс вообще ни знал никогда ![]() Добавлено через 6 минут где то читал что современные пентиумы это RISC архитектура, у них просто стоит блок дешифратора, который перекодирует старые коды в коды RISC процессора, для обратной совместимости
0
|
|||
|
|
|
| 02.09.2018, 01:52 | |
|
Вот вы тут обсуждаете всякие внедрения кода в память, но судя по тому, что раздел для начинающих,
у автора явная проблема XY https://en.wikipedia.org/wiki/XY_problem Вместо того, чтобы воспользоваться любым другим, интерпретируемым (скриптовым) языком программирования, для которых такие фишки типа самопишущихся прог естесственны, автор упорно ищет решение на Си, а вы ему в этом зачем-то помогаете...
0
|
|
|
Модератор
|
|
| 02.09.2018, 06:26 | |
|
Для того, чтобы выполнить какой-либо код, нужен аппаратный и/или программный интерпретатор этого кода,
или транслятор этого кода в другой код, подходящий для другого интерпретатора. ![]() Kuzia domovenok, если автор вопроса, в дополнение к PHP, интересуется программированием для симулятора 8086, почему бы ему не заинтересоваться низкоуровневым программированием на языке высокого уровня?
0
|
|
|
|
|||
| 02.09.2018, 12:36 | |||
|
Лично на мой взгляд - это нормальное явление, когда обсуждение неинтересного вопроса перешло в обсуждение другого, но интересного вопроса. Но здесь всё закончится тем, что придут модераторы и начнут махать шашкой. Ибо формальное соблюдение правил - это гораздо важнее, чем качество контента на форуме
1
|
|||
| 02.09.2018, 14:41 | |
|
0
|
|
|
|
|
| 02.09.2018, 15:23 | |
|
Добавлено через 1 минуту Не по теме: Хотя, опять-таки формально, никто толком не знает, о чём конкретно спрашивал ТС. А потому формально, кроме как о выяснении того, чего хочет ТС, тут говорить ни о чём нельзя
0
|
|
|
4149 / 2727 / 433
Регистрация: 09.09.2017
Сообщений: 12,084
|
||
| 02.09.2018, 19:33 | ||
|
Шаманить с правами на страницы сейчас все же лень.
0
|
||
|
725 / 224 / 73
Регистрация: 01.03.2011
Сообщений: 654
|
|
| 02.09.2018, 20:25 | |
|
можно ключик -zexecstack gcc подсунуть, тест заработает. но для продакшн не годиться т.к. делает много лишнего.
0
|
|
| 02.09.2018, 21:55 | |||||||||||
|
Без
-z execstack и без сегфолтов работает это
а способ обойтись в коде на Си без ассемблеров
0
|
|||||||||||
|
4149 / 2727 / 433
Регистрация: 09.09.2017
Сообщений: 12,084
|
||||||||||||||||||
| 03.09.2018, 02:46 | ||||||||||||||||||
0
|
||||||||||||||||||
|
Модератор
|
||
| 03.09.2018, 05:33 | ||
|
С помощью mprotect() можно поменять ограничения доступа к уже выделенной кем-то странице.Новые странцы в linux можно выделить сразу исполняемыми и изменяемыми одним вызовом mmap().
0
|
||
|
4149 / 2727 / 433
Регистрация: 09.09.2017
Сообщений: 12,084
|
||
| 03.09.2018, 08:23 | ||
|
Оптимизация через mmap это конечно хорошо, но практического смысла я в этом уже не вижу. Вот проверить выполнение из динамической памяти было любопытно.
Но для чего это можно применить? Модификация кода программы во время выполнения? Проще встроить интерпретатор скриптового языка, jit-компилятор или вызов обычного компилятора со сборкой в динамическую библиотеку. Все равно разработчиков этих средств мне не переплюнуть, да еще с кросс-платформенностью возникнуть проблемы: бинарный код ведь на ассемблере писан.
0
|
||
|
|
|||
| 03.09.2018, 08:48 | |||
|
Запусти "gcc t.c -S" и покажи файл t.s. Есть подозрение, что отдельные конфигурации компиляторов попросту кладут Read-only данные в те же сегменты памяти, что и код Добавлено через 15 минут COKPOWEHEU, та тема старая, код был написан под 32-битные системы, на языке Си (а не Си++). Ну и я забыл написать, что пример из самого первого поста в той теме не должен работать (ТС именно с этой проблемой и пришёл на форум), пример с исправлением проблемы написан в посте #2 Но в режиме 64 он всё равно не работает (в исходнике обязательно нужно заменить преобразование к int'у на преобразование к long'у). Падает вот так: Code 0x0000000000602000 <+3904>: push %rbp 0x0000000000602001 <+3905>: mov %rsp,%rbp => 0x0000000000602004 <+3908>: mov 0x2009ff(%rip),%rdx # 0x802a0a 0x000000000060200b <+3915>: mov 0x2009f1(%rip),%eax # 0x802a02 0x0000000000602011 <+3921>: mov %eax,%esi 0x0000000000602013 <+3923>: mov $0x400788,%edi 0x0000000000602018 <+3928>: mov $0x0,%eax 0x000000000060201d <+3933>: callq *%rdx 0x000000000060201f <+3935>: pop %rbp Собственно, этот пример я приводил в первую очередь как прототип задачи, в которой код исполняется из сегмента данных. В какой-то мере ты его переделал в посте #33, но по сути с тем же ограничением - без использования глобальных переменных (и printf'а, как очень было необходимо в изначальном примере) Добавлено через 2 минуты Добавлено через 49 секунд Ну или написать самому свой примитивный jit-компилятор. Как-никак интерпретаторы уже многие умеют писать, а тут очень конкретный level up
0
|
|||
|
725 / 224 / 73
Регистрация: 01.03.2011
Сообщений: 654
|
||
| 03.09.2018, 10:19 | ||
|
Нынче это модно делать по такой схеме: 2 процесса, 1й держит страницы с RX; 2й загнан в песочницу и вообще кастрирован по самые уши, держит эти же страницы WR и меняет код по IPC запросам 1го процесса.
0
|
||
|
4149 / 2727 / 433
Регистрация: 09.09.2017
Сообщений: 12,084
|
|||||||
| 03.09.2018, 11:41 | |||||||
long а к size_t. Он для этого и предназначен. Если обратили внимание, в моей версии так и сделано.Лучше уж таскать с программой обычный gcc и собирать нужный код в *.so. Не говоря о "стандартной" jit-компиляции для java / .net
1
|
|||||||
|
725 / 224 / 73
Регистрация: 01.03.2011
Сообщений: 654
|
|
| 03.09.2018, 12:16 | |
|
0
|
|
|
Модератор
|
|||||||||
| 03.09.2018, 13:24 | |||||||||
копирование или проецирование кода в область адресного пространства, где возможно его выполнение, разрешение выполнения кода платформозависмым способом в той области, где он расположен, программная симуляция выполнения кода и т.п. В Win32 свои аналоги mmap и mprotect были ещё когда машины, на которых работала Windows, не умели запрещать выполненние в отдельных страницах. https://msdn.microsoft.com/en-... 66890.aspx
У каждого кода есть своя область применения.
1
|
|||||||||
| 03.09.2018, 13:24 | |
|
Выполнение кода Выполнение JS кода в С++ Выполнение кода
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
| Опции темы | |
|
|
Новые блоги и статьи
|
|||
|
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами:
- ВидТО (СправочникСсылка. ВидыТО);
- ВидГСМ. . .
|
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала.
Ниже прикреплён. . .
|
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F
Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU.
Опрашиваются регистры. . .
|
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка:
Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
|
|
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо
Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
|
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман.
Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
|
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
|
Как у меня протекала болезнь
zorxor 27.08.2026
Здравствуйте, друзья! Эта запись блога предназначена именно для вас - для моих дорогих друзей, которые знали меня лично. Чтобы ответить на вопрос - а что же со мной произошло на самом деле? Я учился. . .
|