Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.64/11: Рейтинг темы: голосов - 11, средняя оценка - 4.64
4 / 4 / 1
Регистрация: 12.02.2015
Сообщений: 46

Что из себя представляет код в стеке, и как его использовать

29.05.2015, 11:27. Показов 2186. Ответов 18
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Гугл мне по этому поводу не помог, поэтому спрашиваю тут: что из себя представляет из себя код в стеке, как его использовать(вызвать там и оттуда методы), есть ли для изменения этого кода высокоуровневые библиотеки?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
29.05.2015, 11:27
Ответы с готовыми решениями:

Union что из себя представляет?
Читал много книг и там про него не чего не было сказано, парни объясните мне пожалуйста для чего он?

Что из себя представляет std::wstring?
В общем насколько я понимаю это string с типом wchar_t. Но есть вопросы: 1. Размер типа wchar_t зависит от компилятора и не...

Что из себя представляет допустим поток ввода/вывода
Поясните пожалуйста что из себя представляет допустим поток ввода/вывода в С++ ? Это участок памяти который представляет собой что-то вроде...

18
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
29.05.2015, 11:57
Это ты про JIT-компилятор? Или что такое код в стеке?
0
4 / 4 / 1
Регистрация: 12.02.2015
Сообщений: 46
29.05.2015, 12:02  [ТС]
щас покажу, ждите

Добавлено через 1 минуту
Например запись и измененение кода в стеке:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
void Demo(int (*_printf) (const char *,...) )
{
  _printf("Hello, Word!\n");
  return;
}
 
int main(int argc, char* argv[])
{
  char buff[1000];
  int (*_printf) (const char *,...);
  int (*_main) (int, char **);
  void (*_Demo) (int (*) (const char *,...));  
  _printf=printf;
 
  int func_len = (unsigned int) _main
                   - (unsigned int) _Demo;
  for (int a=0;a<func_len;a++)
    buff[a]= ((char *) _Demo)[a];
  _Demo = (void (*) (int (*) (const char *,...)))
            &buff[0];
 
  _Demo(_printf);
  return 0;
}
0
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
29.05.2015, 12:07
Так не получится, это приведёт к неопределённому поведению.
Посмотри в сторону JIT-компиляторов.
0
4 / 4 / 1
Регистрация: 12.02.2015
Сообщений: 46
29.05.2015, 12:12  [ТС]
мне и надо неопределенное поведение

Добавлено через 38 секунд
и мне надо ,чтобы это можно было закомпилить, хоть ка, чотбы потом использовать как dll-библиотеку
0
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
29.05.2015, 12:12
Цитата Сообщение от oppppp Посмотреть сообщение
мне и надо неопределенное поведение
Ну тогда так и делай. В чём проблема?
0
4 / 4 / 1
Регистрация: 12.02.2015
Сообщений: 46
29.05.2015, 12:15  [ТС]
так я не монимаю как работать со стеком, начитался этого и все Это всё учитывается на ходу.
0
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
29.05.2015, 12:19
Я не могу дать совет по заведомо нерабочему коду.
0
4 / 4 / 1
Регистрация: 12.02.2015
Сообщений: 46
29.05.2015, 12:25  [ТС]
ну вот есть указатель на стек, как код в нем изменить, например в методе таком-то изменить строчку такую-то?
0
Ушел с форума
Эксперт С++
 Аватар для Убежденный
16481 / 7444 / 1187
Регистрация: 02.05.2013
Сообщений: 11,616
Записей в блоге: 1
29.05.2015, 13:05
Цитата Сообщение от oppppp Посмотреть сообщение
что из себя представляет из себя код в стеке
В стеке нет кода, только данные, адреса возврата и т.п.
Более того, на современных Windows память стека неисполняемая
(если только не повырубать некоторые настройки).
1
4 / 4 / 1
Регистрация: 12.02.2015
Сообщений: 46
29.05.2015, 13:19  [ТС]
Цитата Сообщение от Убежденный Посмотреть сообщение
В стеке нет кода, только данные, адреса возврата и т.п.
Более того, на современных Windows память стека неисполняемая
(если только не повырубать некоторые настройки).
Ладно, а как вообще можно реализовать самомодифицирующийся код?
0
Ушел с форума
Эксперт С++
 Аватар для Убежденный
16481 / 7444 / 1187
Регистрация: 02.05.2013
Сообщений: 11,616
Записей в блоге: 1
29.05.2015, 15:32
VirtualAlloc - выделить память с правами на выполнение.
Записать туда код. Потом еще полезным будет выполнить FlushInstructionCache.
Все, можно выполнять.
3
4 / 4 / 1
Регистрация: 12.02.2015
Сообщений: 46
30.05.2015, 08:00  [ТС]
О, спасибо)

Добавлено через 18 минут
Вот то, что вы сказали, я где-то видел, но шас не могу найти ту статью, не могли бы вы посоветовать что почитать на эту тему?
0
Ушел с форума
Эксперт С++
 Аватар для Убежденный
16481 / 7444 / 1187
Регистрация: 02.05.2013
Сообщений: 11,616
Записей в блоге: 1
30.05.2015, 10:24
Цитата Сообщение от oppppp Посмотреть сообщение
что почитать на эту тему?
На какую именно ?
0
4 / 4 / 1
Регистрация: 12.02.2015
Сообщений: 46
30.05.2015, 17:50  [ТС]
Ну на тему использования VirtualAlloc.
FlushInstructionCache как использовать помню из ранее прочитанной статьи(но щас найти ее не удается, жаль ,что не сделал закладку).
Заранее спасибо)
0
Ушел с форума
Эксперт С++
 Аватар для Убежденный
16481 / 7444 / 1187
Регистрация: 02.05.2013
Сообщений: 11,616
Записей в блоге: 1
30.05.2015, 18:01
Лучший ответ Сообщение было отмечено oppppp как решение

Решение

Цитата Сообщение от oppppp Посмотреть сообщение
Ну на тему использования VirtualAlloc.
В MSDN все есть.
См. функции VirtualAlloc(Ex), VirtualFree(Ex), VirtualProtect(Ex) и VirtualQuery(Ex).
А почитать, наверное, лучше всего Рихтера ("Эффективная разработка Win32-приложений"),
Руссиновича ("Внутреннее устройство Microsoft Windows"), Побегайло ("Системное
программирование в Windows").

Про устройство памяти у Руссиновича есть хорошие статьи в блоге:

Преодолевая ограничения Windows: виртуальная память
http://blogs.technet.com/b/mar... 82311.aspx

Преодолевая ограничения Windows: физическая память
http://blogs.technet.com/b/mar... 51288.aspx
3
4 / 4 / 1
Регистрация: 12.02.2015
Сообщений: 46
30.05.2015, 18:21  [ТС]
Спасибо, хорошо, что есть такие отзывчивые люди, как вы)
0
Ушел с форума
Эксперт С++
 Аватар для Убежденный
16481 / 7444 / 1187
Регистрация: 02.05.2013
Сообщений: 11,616
Записей в блоге: 1
30.05.2015, 19:03
Лучший ответ Сообщение было отмечено DrOffset как решение

Решение

Цитата Сообщение от oppppp Посмотреть сообщение
хорошо, что есть такие отзывчивые люди, как вы
Спасибо за добрые слова !

Кстати, когда продвинетесь в вопросах динамической генерации кода,
настоятельно рекомендую почитать в мануалах Intel про Self-Modifying Code и
Cross-Modifying Code, там есть некоторые подводные камни, связанные с
кэшированием инструкций (собственно, FlushInstructionCache призвана
их решить, но она не во всех ситуациях спасает):

Intel® 64 and IA-32 Architectures Software Developer Manuals
http://www.intel.com/content/w... nuals.html

На момент, когда пишутся эти строки, документ называется "Combined Volume
Set of Intel® 64 and IA-32 Architectures Software Developer’s Manuals", нужные
разделы: "8.1.3 Handling Self- and Cross-Modifying Code", "11.6 Self-Modifying
Code", "22.29.1 Self-Modifying Code with Cache Enabled" и другие.
1
4 / 4 / 1
Регистрация: 12.02.2015
Сообщений: 46
30.05.2015, 19:52  [ТС]
Ок, гляну, когда разберусь с виртуальной памятью, спасибо)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
30.05.2015, 19:52
Помогаю со студенческими работами здесь

Модуль cisco VIC-2FXO что из себя представляет и как его настроить
Друзья, помогите понять что из себя представляет модуль cisco VIC-2FXO. Как его настроить? Для чего он нужен?

Как пользоваться Invoke и что он из себя представляет?
Расскажите пожалуйста, как пользоваться Invoke'ом, что он из себя представляет, с чем его едят?

Как лучше всего распарсить текст, который представляет из себя код C#
Пишу программку в которой требуется анализировать текст, сам текст представляет из себя C# код. например: while (true) { for...

что из себя представляет пользовательская система сайта(хз как сказать правильно)
Извините за такой нубовский вопрос, но все же. Как сделать БЕЗОПАСНО, чтобы если пользователь не прошел авторизацию, то этому пользователю...

Что представляет из себя база данных на хостинге и как ее подключать к php-файлам
Я недавно выложил свой сайт в интернет. Ранее заходил на него с помощью денвера и там база данных располагалась в...


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

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru