Media is too big
VIEW IN TELEGRAM
#чутьсложнее 14 минут пытаюсь сделать ошибку в коде, и, по дороге, рассказываю как прочитать код функции
❤🔥1
Очень занятная статейка: https://habr.com/ru/companies/ruvds/articles/849340/
Хабр
Можно ли получить рут при помощи одной зажигалки?
Спойлер: ДА . Элитный инструмент для хакинга; от вас скрывают, что он уже у вас есть Прежде чем писать эксплойт, нам нужен баг. А если багов нет, то приходится быть изобретательными — тут нам на...
#книга Эта блестящая серия книг состоит из двух (вроде) классных книг по C++. Лучше чем эти книги по C++ я не читал. Страуструп как автор языка конечно хорошая книга, но скорее как справочник. Эти книги рассчитаны на то, что читатель уже знает синтаксис языка, но хочет теперь разобраться в том как на нём кодить. Вся философия и суть языка передаётся в форме задач и подробным разбором их решений. Там есть всё что вам нужно знать о C++ (для начала). Увы я не видел обновления для современных стандартов (11..20). Правда для начала надо знать и эту базу. Обязательно к прочтению всем!
❤1
Задача на ночь: на языке С напишите без использования typedef и глобальных переменных функцию с реализацией, которая получает массив из четырёх указателей на функции и возвращает указатель на функцию, которая берётся из массива (аргумент) и выбирается по очереди от вызова к вызову. Все указатели на функцию получают два int и возвращают int.
EBFE: software internals
Задача на ночь: на языке С напишите без использования typedef и глобальных переменных функцию с реализацией, которая получает массив из четырёх указателей на функции и возвращает указатель на функцию, которая берётся из массива (аргумент) и выбирается по очереди…
Немного проясню). Есть где-то некое множество функций с одинаковым заголовком: принимают два инта и возвращают инт (типо операторы бинарные, например). Далее есть некоторая функция (которую вам надо написать в рамках задачи) которая принимает массив ровно из четырёх элементов с указателями на функции указанного вида, и по очереди (от вызова к вызову) возвращает один из этих указателей. С typedef это элементарно и выглядит так, что просто затайпдефили типы указателей на функции и написали требуемую - просто выбор одного из четырёх long из массива (по сути так и есть - в рамках ассемблера неотличимо будет). Однако, по условиям задачи нельзя использовать typedef - это немного усложняет - надо понять как синтаксически функция может вернуть указатель на функцию - это немного необычно и редко используется, но знать надо. Ответ будет в ближайшее воскресенье вечером. Дерзайте!
+++[>+++++<-]>>+<[>>++++>++>+++++>+++++>+>>+<++[++<]>---] >++++.>>>.+++++.>------.<--.+++++++++.>+.+.<<<<---.[>]<<.<<<.-------.>++++. <+++++.+.>-----.>+.<++++.>>++.>-----. <<<-----.+++++.-------.<--.<<<.>>>.<<+.>------.-..--.+++.-----<++.<--[>+<-] >>>>>--.--.<++++.>>-.<<<.>>>--.>. <<<<-----.>----.++++++++.----<+.+++++++++>>--.+.++<<<<.[>]<.>> ,[>>+++[<+++++++>-]<[<[-[-<]]>>[>]<-]<[<+++++>-[<+++>-[<-->-[<+++>- [<++++[>[->>]<[>>]<<-]>[<+++>-[<--->-[<++++>-[<+++[>[-[-[-[->>]]]]<[>>]<<-] >[<+>-[<->-[<++>-[<[-]>-]]]]]]]]]]]]] <[ -[-[>+<-]>] <[<<<<.>+++.+.+++.-------.>---.++.<.>-.++<<<<.[>]>>>>>>>>>] <[[<]>++.--[>]>>>>>>>>] <[<<++..-->>>>>>] <[<<..>>>>>] <[<<..-.+>>>>] <[<<++..---.+>>>] <[<<<.>>.>>>>>] <[<<<<-----.+++++>.----.+++.+>---.<<<-.[>]>] <[<<<<.-----.>++++.<++.+++>----.>---.<<<.-[>]] <[<<<<<----.>>.<<.+++++.>>>+.++>.>>] <.> ]> ,] <<<<<.<+.>++++.<----.>>---.<<<-.>>>+.>.>.[<]>++.[>]<. >[Translates brainfuck to C. Assumes no-change-on-EOF or EOF->0. Generated C does no-change-on-EOF, and uses unistd.h read and write calls. Daniel B Cristofani (cristofdathevanetdotcom) http://www.hevanet.com/cristofd/brainfuck/]brainfuck.org
some brainfuck fluff
Includes a complete language reference, plus my many brainfuck programs and some implementations and commentary.
cpp_lections_v2.git.rar
38.1 KB
Текущий код с лекций по C++/WinAPI. #метериалылекций
EBFE: software internals
Задача на ночь: на языке С напишите без использования typedef и глобальных переменных функцию с реализацией, которая получает массив из четырёх указателей на функции и возвращает указатель на функцию, которая берётся из массива (аргумент) и выбирается по очереди…
Вот и решение:
int (*magic(int (*arg[4])(int, int)))(int, int)
{
static int idx = 0; int _i = idx;
return arg[idx = (idx + 1) % 4, _i];
}
EBFE: software internals
Вот и решение: int (*magic(int (*arg[4])(int, int)))(int, int) { static int idx = 0; int _i = idx; return arg[idx = (idx + 1) % 4, _i]; }
Тут очень интересно, что стоят скобочки и аргументы возвращаемой функции. плюч я добавил использование оператора , (запятая).
EBFE: software internals
Вот и решение: int (*magic(int (*arg[4])(int, int)))(int, int) { static int idx = 0; int _i = idx; return arg[idx = (idx + 1) % 4, _i]; }
Мой хороший товарищ заметил, что в этом решении используется static - типо, глобальная переменная. Я считаю, что static переменные в функции располагаются действительно там же где и глобальные переменные, однако с точки зрения языка они ими не являются - в общем дискуссионая тема. Однако он же предложил очень интересное решение без использования static:
int (*magic( int (*arg[])(int, int) ))(int, int)
{
int (*tmp)(int, int);
tmp = arg[0];
arg[0] = arg[1];
arg[1] = arg[2];
arg[2] = arg[3];
arg[3] = tmp;
return tmp;
}