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

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

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

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

25.07.2016, 22:18. Просмотров 211. Ответов 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++
size_t k = 0; Что Это означает? Как описать/объяснить Эту строчку?

Объясните, как понять строчку в коде - C++
#include <stdio.h> #include <conio.h> #include <windows.h> #include <locale.h> #define M 1000 int versh, ves, nov_ves,...

Как получить номер(или какой нить индифиактор) текущей строки в открытом файле и перейти затем на эту строчку? - C++
открываю файл так: ifstream input("morf.txt"); перехожу на следующие строчки так: input.getline(buffer, 1024);

Преобразуйте эту строчку так, чтобы сначала в ней шли цифры, а потом - все буквы исходной строчки... - C++
Условие: дана строчка, которая содержит буквы и цифры. Преобразуйте эту строчку так, чтобы сначала в ней шли цифры, а потом - все буквы...

Как в файле перейти на новую строчку? - C++
Как в файле перейти на новую строчку? Пробовал так fstream sc("Save\\1.txt");//Открыл файл sc.getline(infscore,'endl'); //Считал инфу...

Как опустить строчку "Press and key to continue' вниз? - C++
// training4.1.cpp: определяет точку входа для консольного приложения. // #include "stdafx.h" #include <iostream> using...

Как заполнить целочисленный массив введя с клавиатуры строчку из чисел - C++
Здравствуйте! Взялся за изучение с++, столкнулся с проблемой, не могу понять как заполнить целочисленный массив введя с клавиатуры просто...

Включить массив B как новую строчку матрицы А с сохранением упорядоченности - C++
Задано массив А(N;N) и вектор B(N). Элементы 1 столбика массива А упорядоченные по убыванию. Включить массив B как новую строчку в массив А...

Как обозвать эту величину? - C++
switch (c). Как обозвать величину c? Семантику её я знаю, меня интересует именно как она называется.

Как оптимизировать эту фцию: - C++
int search { minimum=arr; maximum=arr; for(int i=0; i<n; i++) {for(int j=0; j<n;j++) if (arr<minimum) minimum=arr; ...


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
DrOffset
6919 / 4112 / 940
Регистрация: 30.01.2014
Сообщений: 6,908
25.07.2016, 22:29     Как понять эту строчку #2
Сообщение было отмечено автором темы, экспертом или модератором как ответ
DUMP, приведение массива к типу указателя на функцию (возвращает int, не принимает параметров) и вызов.
hoggy
6369 / 2587 / 452
Регистрация: 15.11.2014
Сообщений: 5,722
Завершенные тесты: 1
25.07.2016, 22:32     Как понять эту строчку #3
массив символов приводится к типу "указатель на функцию,
которая возвращает int, и не имеет параметров".

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

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

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

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

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

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

и потом, в наши дни привести массив к функции - не достаточно.
нужно ещё попросить операционную систему,
что бы она разрешила исполнять кусок памяти расположенный в секции "данных",
а не "исполняемого кода".
MansMI
1136 / 933 / 240
Регистрация: 08.01.2012
Сообщений: 3,389
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     Как понять эту строчку
Ответ Создать тему
Опции темы

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