Вы используете устаревший браузер. Этот и другие сайты могут отображаться в нём некорректно. Вам необходимо обновить браузер или попробовать использовать другой.
тебе не нужно ксорить эти строки, эти строки на этапе компиляции со 100% гарантией превращаются в число из-за consteval конструктора hash**_t, у тебя после компиляции эта строка будет чем-то вроде unsigned long long v1 = 438239898534892398
upd: вот как это выглядит:
более детально:
в таком случае строка "This will not be tranformed in compiletime" останется в бинаре после компиляции, потому что оператор () перегружен на хэширование объектов в рантайме, в то время как конструктор hash**_t работает только на этапе компиляции, с "сырыми" строками
, но у него с 2018 висит пустой disposition (а ведь предложение было толковым, даже если не в таком виде, то в любом случае это не было бы лишним)
или ты подразумеваешь какой-то workaround со static_assert-ом?
, но у него с 2018 висит пустой disposition (а ведь предложение было толковым, даже если не в таком виде, то в любом случае это не было бы лишним)
или ты подразумеваешь какой-то workaround со static_assert-ом?
зафиксил неприятную проблему связанную с кэшом в разных единицах трансляции (ошибка была довольно глупой :D), сорян если кто-то уже успел испытать её на своём коде
привет вся библиотека рассчитана на платформу Windows, она будет полезной если перед тобой стоит задача как-либо распарсить загруженную в твой процесс DLL, их экспорт-таблицы, заголовки и прочую информацию PE файла (через функцию image(), спасибо linuxpe) в коде C++
вот пара примеров из реального кода, который решает реальные проблемы в C++ стиле, которое можно было бы реализовать через C-style WinAPI
так же для кого-то будет плюсом то что каждая строка которую ты отдаёшь этой библиотеке (к примеру "NtSetTimerResolution", "ntdll.dll") перестанут быть строками после компиляции, что сделает невозможным статический анализ в целях узнать какой экспорт всё таки ищет функция dll_export
весь IDA 7.5 Pseudo ниже представлен в билде (Debug, loaded with PDB) для упрощения понимания:
C++:
int (__fastcall *find_export())(unsigned int, unsigned __int8, unsigned int *)
{
int (__fastcall *v0)(unsigned int, unsigned __int8, unsigned int *); // rax
shadow::detail::dll_export result; // [rsp+38h] [rbp-20h] BYREF
shadow::dll_export(
&result,
(shadow::detail::basic_hash<unsigned long long>)0xDF704B8A8D360572ui64,
(shadow::detail::basic_hash<unsigned long long>)0x98C947DC3D0ED9ACui64);
shadow::detail::dll_export::address(&result.m_address);
v0 = shadow::address_t::as<long (*)(unsigned long,unsigned char,unsigned long *)>();
NtSetTimerResolution = v0;
return v0;
}
функционал в честь которого названа библиотека (хотя её функционал уже давно расширился, имя репозитория уже явно устарело) позволяет вызывать в коде Nt экспорты через syscallы, что это такое здесь пытаться объяснять не буду, слишком много текста, если хочешь то можешь почитать в интернете "how windows syscalls works".
, по минусам библиотеки - в ближайшее время стоит быть осторожными с неявными кастами при использовании результата от функций shadowcall, shadowsyscall, ошибка проектирования, в ближайшее время текущий коммит будет закреплён на теге, а эта проблема будет вырезана
добавил парсер ApiSetMap. потенциальный юзкейс - применение в собственной реализации резольвера forwarded экспортов, чуть позже добавлю примеры в гитхаб репо