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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
kamilton
0 / 0 / 0
Регистрация: 02.05.2011
Сообщений: 6
#1

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

20.05.2011, 22:48. Просмотров 978. Ответов 2
Метки нет (Все метки)

Доброго времени суток! Не могу разобратся в коде
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;
}
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.05.2011, 22:48
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Выполнение кода в стеке (C++):

Выполнение в стеке кода - C++
Есть такой код: void Demo(int(*_printf) (const char *, ...)) { _printf(&quot;Hello, Word!\n&quot;); return; } int WriteMe(void...

Повторное выполнение кода - C++
Здравствуйте! Ребята как я могу сделать так чтобы эта программа т.е Калькулятор повторил свою работу каждый раз когда я получаю свой...

Выполнение подгружаемого кода - C++
Постараюсь объяснить максимально доступно, хотя корректно сформулировать задачу мне будет тяжеловато. Языки: С\Срр\Asm ОС: Win 1....

Запуск ассемблерного кода на выполнение из main() - C++
Добрый день. Подскажите, если есть готовый файл на ассемблерном коде, то как его можно запустить на выполнение из C++? Взаимодействовать...

Выполнение кода не доходит до определенной строки - C++
Где здесь ошибка: #include &lt;iostream.h&gt; #include &lt;math.h&gt; #include &lt;conio.h&gt; int main(void) { double x; std::cin&gt;&gt;x; ...

Выполнение исходного кода в Visual Studio - C++
Возник вопрос: Не создавая проект я создал файл с разрешением &quot;.cpp&quot;. Как выполнить исходный код в программе Microsoft Visual Studio,...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
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?
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.05.2015, 15:30
Привет! Вот еще темы с ответами:

Как измерить потраченное время на выполнение кода - C++
Нужно измерить время затраченное на выполнене функции. Кто что посоветует? Решил так: LARGE_INTEGER time_n,time_s,freq; ...

Проверка введенных данных; выполнение кода по условию - C++
#include &quot;stdafx.h&quot; #include &quot;conio.h&quot; #include &quot;math.h&quot; int _tmain(int argc, _TCHAR* argv) { float a, b, c, x, res; ...

Как остановить выполнение кода в запущенном таймере? - C++
Здравствуйте. У меня есть таймер(в С++), в нем выполняются какие-либо действия и когда я нажимаю на кнопку мне надо остановить выполнение...

Таймер (выполнение кода через заданный промежуток времени) - C++
Всем привет, подскажите, как создать внутренний таймер, то есть через что бы через некоторое количество секунд, программа опять выполняла...


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

Или воспользуйтесь поиском по форуму:
Ответ Создать тему
Опции темы

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