Форум программистов, компьютерный форум CyberForum.ru

Выполнение кода в стеке - C++

Восстановить пароль Регистрация
 
kamilton
0 / 0 / 0
Регистрация: 02.05.2011
Сообщений: 6
20.05.2011, 22:48     Выполнение кода в стеке #1
Доброго времени суток! Не могу разобратся в коде
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
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;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.05.2011, 22:48     Выполнение кода в стеке
Посмотрите здесь:

C++ Вопрос о стеке
C++ Как измерить потраченное время на выполнение кода
C++ Как остановить выполнение кода в запущенном таймере?
C++ Выполнение кода не доходит до определенной строки
C++ Структура в стеке
C++ Выполнение исходного кода в Visual Studio
C++ Выполнение подгружаемого кода
C++ Проверка введенных данных; выполнение кода по условию
C++ Перетасовать элементы в стеке
Выполнение в стеке кода C++
Запуск ассемблерного кода на выполнение из main() C++
C++ Повторное выполнение кода

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
sysluck
Сообщений: n/a
28.05.2011, 23:53     Выполнение кода в стеке #2
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
25
26
27
28
29
30
31
32
33
34
void Demo(int (*_printf) (const char *,...) )
{
    _printf("Hello, Word!\n");
    return;
}
 
int main(int argc, char* argv[])
{
    char buff[1000];
    int (*_main) (int, char **);
    int (*_printf) (const char *,...);
    void (*_Demo) (int (*) (const char *,...));
 
    _printf = printf;
    _main = main;     // Было пропущено
    _Demo = Demo;   // Было пропущено
 
    int func_len = (unsigned int) _main - (unsigned int) _Demo; // функции должны располагаются
    // в памяти последовательно, сначала "Demo"(младший аддр) потом "main"(старший аддр) =>
    // старший аддр - младший аддр == размеру кода функции "Demo"
 
    for (int a = 0; a < func_len; a++) buff[a] = ((char *) _Demo)[a]; // Копируем код функции в буфер
 
    _Demo = (void (*) (int (*) (const char *,...)))  &buff[0]; // _Demo теперь указывает на буффер
    // с кодом функции
 
    _Demo(_printf); // Запускаем копию функции "Demo" из буфера и получаем Exception
    // проблема решается путем VirtualProtect либо WriteProcessMemory
    // почитай:
    // [url]http://www.insidepro.com/kk/277/277r.shtml[/url]
    // [url]http://citforum.ru/book/cook/selfmod.shtml[/url]
 
    return 0;
}
Добавлено через 9 часов 1 минуту
Хотя VirtualProtect на 7-ке не работает
Katrin
0 / 0 / 0
Регистрация: 26.03.2012
Сообщений: 27
07.05.2015, 15:30     Выполнение кода в стеке #3
проблема решается путем VirtualProtect либо WriteProcessMemory
не могли бы пояснить, как это сделать с помощью WriteProcessMemory?
Yandex
Объявления
07.05.2015, 15:30     Выполнение кода в стеке
Ответ Создать тему
Опции темы

Текущее время: 18:35. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru