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

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

Войти
Регистрация
Восстановить пароль
 
DUMP
57 / 31 / 7
Регистрация: 22.02.2015
Сообщений: 246
#1

Как понять эту строчку - C++

25.07.2016, 22:18. Просмотров 196. Ответов 3
Метки нет (Все метки)

C++
1
2
3
4
5
char shellcode[]="hello worl\n"
int main()
{
    (* (int(*)()) shellcode) ();    // и что тут ?
}
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.07.2016, 22:18     Как понять эту строчку
Посмотрите здесь:

C++ Как оптимизировать эту фцию:
Как заполнить целочисленный массив введя с клавиатуры строчку из чисел C++
как написать эту программу C++
C++ Как обозвать эту величину?
Преобразуйте эту строчку так, чтобы сначала в ней шли цифры, а потом - все буквы исходной строчки... C++
Объясните, как понять строчку в коде C++
Как в файле перейти на новую строчку? C++
как набрать эту программу? C++
Как получить номер(или какой нить индифиактор) текущей строки в открытом файле и перейти затем на эту строчку? C++
C++ Как опустить строчку "Press and key to continue' вниз?
Включить массив B как новую строчку матрицы А с сохранением упорядоченности C++
C++ Как описать/объяснить Эту строчку?

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
DrOffset
6817 / 4028 / 924
Регистрация: 30.01.2014
Сообщений: 6,847
25.07.2016, 22:29     Как понять эту строчку #2
Сообщение было отмечено автором темы, экспертом или модератором как ответ
DUMP, приведение массива к типу указателя на функцию (возвращает int, не принимает параметров) и вызов.
hoggy
5718 / 2309 / 417
Регистрация: 15.11.2014
Сообщений: 5,155
Завершенные тесты: 1
25.07.2016, 22:32     Как понять эту строчку #3
массив символов приводится к типу "указатель на функцию,
которая возвращает int, и не имеет параметров".

после чего этот указатель на функцию разыменовывается,
а через полученную таким образом ссылку на функцию выполняется запуск самой функции.

при этом содержимое массива интерпритируется,
как машинный исполняемый код функции.

и поскольку там бред - приложение падает.

--------------------------

в старину, отцы-основатели запихивали в массив цыферки реального машинного кода.
и приводя к указателю-на-функцию в рантайме генерировали исполняемый нативный код.

в настоящее время так уже никто не делает.
обычно юзают тормозные скрипты.

и потом, в наши дни привести массив к функции - не достаточно.
нужно ещё попросить операционную систему,
что бы она разрешила исполнять кусок памяти расположенный в секции "данных",
а не "исполняемого кода".
MansMI
1099 / 896 / 228
Регистрация: 08.01.2012
Сообщений: 3,227
01.08.2016, 08:03     Как понять эту строчку #4
C++
1
2
3
4
5
6
7
8
9
10
    int code=0xC348C031;//xor eax,eax; dec eax; ret
    int n=25;
    int (*func)()=(int(*)())&code;
    _asm
    {
        lea ebx,code
        call ebx
        mov n,eax
    }
    cout<<((int(*)())&code)()<<"  "<<func()<<"  "<<n<<endl;
Yandex
Объявления
01.08.2016, 08:03     Как понять эту строчку
Ответ Создать тему
Опции темы

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