@ProCxx

Страница 759 из 2477
Tema
04.04.2017
13:23:52
Alex Фэils?︙
04.04.2017
13:24:42
в этом контексте речь о TCHAR

Tema
04.04.2017
13:25:48


Alex Фэils?︙
04.04.2017
13:27:03
они кстати осмысленные но выглядят как вызов ктулу с непривычки

Google
Alex Фэils?︙
04.04.2017
13:27:03
они МАКСИМАЛЬНО краткие и информативные, не придерешься

Tema
04.04.2017
13:27:16
Да. Свои конечно же может. Более того, даже админы чата не могут править чужие сообщения.
думаю бот мог бы удалять чужые сообщения и печатать одно сборное

Square
04.04.2017
13:27:36
Не хочу #holywar но мс придумала весьма неплохие костыли

Alex Фэils?︙
04.04.2017
13:27:38
да вот ща я мтпрото-бота напишу, и будет счастье

Vitaly
04.04.2017
13:28:12
думаю бот мог бы удалять чужые сообщения и печатать одно сборное
Это не очень хорошо нарушать авторские права. ?

Бот в таком случае будет перехватывать авторство сообщений же.

Tema
04.04.2017
13:28:57
Бот в таком случае будет перехватывать авторство сообщений же.
ну он будет пометку делать чъи сообщения он объединил

Vitaly
04.04.2017
13:29:14
ну он будет пометку делать чъи сообщения он объединил
Всё равно не очень идея. Лучше флудеров просто кикать.

Alex Фэils?︙
04.04.2017
13:29:34
я нашел тут либу по мтпрото на крестах

Tema
04.04.2017
13:29:52
Aleksei
04.04.2017
13:30:04
я нашел тут либу по мтпрото на крестах
а из телеги под десктоп не вытащить?

Google
Alex Фэils?︙
04.04.2017
13:30:12
нет, там ужасно все

мне проще на планшете собрать ту либу в автотулзах, чем десктопную телегу с кучей ебанистики

Vitaly
04.04.2017
13:31:30
а из телеги под десктоп не вытащить?
Лучше не надо. Там адский говнокод, к тому же жёстко привязанный к старому протухшему OpenSSL.

Michael
04.04.2017
13:43:46
Т-функции это шаблоны тип?
это тимплейты, ага

Антон
04.04.2017
16:13:46
void nf_nativeload(std::stack<MValue*>* stack) { void *handle = dlopen(((std::string*) stack->top()->castTo(MTYPE_STRING)->get())->c_str(), RTLD_LOCAL); stack->pop(); int count = *(int*) dlsym(handle, "mlang_nativefunctions_count"); char** list = *(char***) dlsym(handle, "mlang_nativefunctions_list"); for(int i = 0; i < count; i++) { void (*func)(std::stack<MValue*>*) = *(void(**)(std::stack<MValue*>*)) dlsym(handle, list[i]); nativefunctions[(std::string) list[i]] = func; } }

Antony
04.04.2017
16:54:11
Жуть какая нечитабельная. Пользуйтесь http://www.boost.org/doc/libs/1_63_0/doc/html/boost_dll.html void nf_nativeload(std::stack<MValue*>* stack) { boost::dll::shared_library lib( // переменная должна сущестовать, пока пользуетесь функциями из библиотеки ((std::string*) stack->top()->castTo(MTYPE_STRING)->get())->c_str() // Что-то стрёмное ); stack->pop(); int count = lib.get<int>("mlang_nativefunctions_count"); char** list = lib.get<char**>("mlang_nativefunctions_list"); for(int i = 0; i < count; i++) { // ны вы поняли... } } И ресурсы течь не будут. И под Windows работать будет

Антон
04.04.2017
17:28:30
вообще, у меня неизвестно, когда использование функций завершится

Антон
04.04.2017
17:30:47
shared_ptr на shared_library
он может создаться во время работы.

Surreal
04.04.2017
17:33:16
Ну блин, внутри программы же код, а не сингулярность какая-нибудь, уж время жизни объекта можно контролировать. В крайнем случае пихать шаред поинтер во все функции.

Антон
04.04.2017
17:42:16
а если сделать dlclose, то все указатели из библиотеки становятся недействительными?

Surreal
04.04.2017
17:44:32
Вот кросс рефкаунт только фиг знает как работает.

Антон
04.04.2017
17:46:27
дело в том, что библиотека используется до конца исполнения всего кода

Antony
04.04.2017
18:03:47
тогда стоит линковаться напрямую к библиотеке

Антон
04.04.2017
18:04:57
список библиотек подгружается из файла

это модули

Александр
04.04.2017
18:08:18
кстати, кто-нибудь знает разумный способ динамической подгрузки либ, но с предварительной их расшифровкой?

Google
Александр
04.04.2017
18:08:25
под линь

Michael
04.04.2017
18:09:44
эээ

прочитал, расшифровал, сдампил на диск, загрузил

Александр
04.04.2017
18:10:24
... с диска слили расшифрованную

Michael
04.04.2017
18:10:39
значит, нет такого способа

успеют слить за несколько микросекунд думаешь?

Александр
04.04.2017
18:11:00
я ищу что-то типа ld, но с возможностью грузить из памяти

Michael
04.04.2017
18:11:03
никсы ж файлы не держат как винда

Александр
04.04.2017
18:11:27
не подумал, что после загрузки стереть можно

хм

Michael
04.04.2017
18:12:17
я как-то под виндой этим вопросом задавался, и это мрак

тоже только с диска

только винда и удалить не даст временный файл

Александр
04.04.2017
18:13:42
то есть линукс позволит прогрузить в память, удалить исходный файл и всё будет ок? удивительно

Michael
04.04.2017
18:14:30
да, линукс не запрещает удалять используемые файлы

можно хоть rm -rf / сделать

Антон
04.04.2017
18:16:24
void nf_nativeload(std::stack<MValue*>* stack) { std::string prefixes[] = {"./lib", "", ""}; std::string suffixes[] = {".so", ".so", ""}; void *handle = nullptr; for(int i = 0; i < sizeof(prefixes)/sizeof(prefixes[0]); i++) { handle = dlopen((prefixes[i]+(*(std::string*) stack->top()->castTo(MTYPE_STRING)->get())+suffixes[i]).c_str(), RTLD_LAZY | RTLD_LOCAL); if(!handle) { if(i == sizeof(prefixes)/sizeof(prefixes[0])-1) { std::cout << dlerror() << std::endl; exit(1); } } else { break; } } stack->pop(); int count = *(int*) dlsym(handle, "mlang_nativefunctions_count"); char** list = *(char***) dlsym(handle, "mlang_nativefunctions_list"); for(int i = 0; i < count; i++) { void (*func)(std::stack<MValue*>*) = (void(*)(std::stack<MValue*>*)) dlsym(handle, list[i]); if(func == nullptr) { std::cout << dlerror() << std::endl; exit(1); } nativefunctions[(std::string) list[i]] = func; } }

а теперь выколем глаза

Antony
04.04.2017
18:17:17
В заголовочном файле: // Beware! Singlethreaded!! void load_modules(); using function_type = void (параметры); function_type get_function(string_view func_name); // В cpp файле namespace { namespce impl { std::vector<boost::dll::shared_libraries> modules; // in cpp file std::unordered_map<string_view, function_type> functions; }} void load_modules() { // имплементация for (auto& module_file: module_files) { impl::modules.emplace_back(module_file); } // тут вместо list можно использовать boost::dll::library_info // заполняем impl::functions } function_type get_function(string_view func_name) { return impl::functions.at(func_name); }

Google
Александр
04.04.2017
18:17:18
nativefunctions[(std::string) list[i]] = func; думаю, каст здесь лишний

Антон
04.04.2017
18:18:38
nativefunctions - map<string, sometype>

хммм... и без каста работает

Alex Фэils?︙
04.04.2017
19:01:47
я как-то под виндой этим вопросом задавался, и это мрак
На винде можно попробовать похимичить с mapped файлами

Michael
04.04.2017
19:02:04
я что-то такое и делал

и еще такм какие-то трюки с апи ntdll

и инъекцией прямо в IAP

но это было годы назад уже не ромню

Aldar
04.04.2017
19:03:53
#url #coding_standards https://www.securecoding.cert.org/confluence/pages/viewpage.action?pageId=637

Group Butler [beta]
04.04.2017
20:11:47
Правила 0. Язык чата — русский. The chat's language is Russian. 1. Простые вопросы (к примеру, о базовом синтаксисе языка, или от новичков в C/C++) , лабы, "помогите с задачкой" и о IDE — в чат новичков: https://telegram.me/joinchat/BYlFbD3eN3JMaG34hyh96w 2. Не хамим, не переходим на личности, не вбрасываем утверждения без доказательств (для этого есть pro.cxx.holywars — https://telegram.me/joinchat/BYlFbECi8UKU0bCqc7jWlQ и @flood); 2.0. Не поддавайтесь на провокации, а лучше репортите, написав в реплае @admin. 2.1. Не делайте ложных доносов на людей, и не "пингуйте" администраторов чата зря; 2.2. Не разводите срачи/холивары в этом чате. За разведение срача администрация банит без предупреждения; 3. Не надо оффтопить в этом чате и флудить (в частности не рекомендуется писать кучу мелких сообщений); 3.0. Не стоит злоупотреблять стикерами и (или) кидать их без всякой причины; 3.1. Голосовые сообщения в этом чате запрещены; 4. Вы можете спросить тематический чат, и вам, по возможности, его подскажут (также можно ввести команду #chatlist, и бот вам напишет списочек известных чатов) 5. Все вакансии, реклама и добавление своего чатика в списочек известных чатов — по согласованию с @AlexFails; 6. Нарушители сначала получают предупреждение, а затем, в случае рецидива, бан на срок от 1 дня до бесконечности. Все правила - /rules.

Rusteros
04.04.2017
20:13:22
А у меня вопрос

Можно из функции вернуть лямбду?

Taylor
04.04.2017
20:14:25
Конечно. А ещё принимать в аргументы функции.

Сейчас скажу точно.

std::function<ReturnType (ArgType arg)> retFun() { return [](ReturnType arg) { return variable; }; }

Rusteros
04.04.2017
20:18:25
Окей

Alexey
04.04.2017
20:37:39
Вопрос.. я уже туплю наверное, но.. почему я получаю has no member named 'valid' struct __attribute_(packed) foo { Uint8 reserve:1, pdsp_res:2, mode:1, cmp_irq:1, req_irq:1, suspend:1, valid:1; };

Страница 759 из 2477