|
16 / 1 / 0
Регистрация: 24.07.2018
Сообщений: 22
|
|
Выполнение Си кода из переменной31.08.2018, 11:11. Показов 2803. Ответов 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
|
|
|
4148 / 2726 / 433
Регистрация: 09.09.2017
Сообщений: 12,080
|
||
| 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
|
|||||||||||
|
4148 / 2726 / 433
Регистрация: 09.09.2017
Сообщений: 12,080
|
||||||||||||||||||
| 03.09.2018, 02:46 | ||||||||||||||||||
0
|
||||||||||||||||||
|
Модератор
|
||
| 03.09.2018, 05:33 | ||
|
С помощью mprotect() можно поменять ограничения доступа к уже выделенной кем-то странице.Новые странцы в linux можно выделить сразу исполняемыми и изменяемыми одним вызовом mmap().
0
|
||
|
4148 / 2726 / 433
Регистрация: 09.09.2017
Сообщений: 12,080
|
||
| 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
|
||
|
4148 / 2726 / 433
Регистрация: 09.09.2017
Сообщений: 12,080
|
|||||||
| 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 кода в С++ Выполнение кода
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
|
Как у меня протекала болезнь
zorxor 27.08.2026
Здравствуйте, друзья! Эта запись блога предназначена именно для вас - для моих дорогих друзей, которые знали меня лично. Чтобы ответить на вопрос - а что же со мной произошло на самом деле? Я учился. . .
|
Нашел вот забавное видео о измерениях. Лучшее что я видел на эту тему
kumehtar 26.08.2026
ILETXiw9bMQ
Основная суть и тезисы по измерениям:
0D (Нулевое измерение): точка, не имеющая длины, ширины, высоты или объема.
Объект не может перемещаться в 0D.
1D (Первое измерение):. . .
|
[EasyBuilder Pro] Памятка по разработке для панелей Weintek
ФедосеевПавел 26.08.2026
Памятка по разработке для панелей Weintek
ВВЕДЕНИЕ
Ранее, при реализации проектов основное внимание уделял разработке управляющей программы для контроллера, а панели оператора доставалось время. . .
|
|
Модель по догадкам
anaschu 25.08.2026
Прошло две недели. Я уже рассказывал, как разговаривал с сотрудниками у сортировки и как понял, что главная ветка — не про приёмку, а про отбор. Но тогда я думал, что понял механику. На этой неделе я. . .
|
Запись в регистр сведений независимо от заполненности табличной части
Maks 25.08.2026
Реализация из решения ниже выполнена на нетиповом документе с несколькими табличными частями, разработанного в КА2.
Задача:
Обеспечить запись документа в регистр сведений независимо от. . .
|
Ноутбук Альфария
kumehtar 24.08.2026
Встретился тут в сети ноутбук Альфария, примарха Альфа-Легиона. Хотя возможно, это ноутбук Омегона, разумеется.
Ну как вам?
|
Мастера простых решений
DevAlt 23.08.2026
В сишарп стэках winforms, да и wpf существует сложная система связывания
источниках данных и элементов формы(текстовые поля и метки), опирается все
это на технологию событий и мета. . .
|