Constantine
Ты не читаешь и не пишешь
Constantine
Ты вычисляешь reference
Assasin
capacity же не гарантируется быть всегда больше size
Assasin
а все выравнивания могут поехать на другой архитектуре
Nikita
они вызываются не параллельно
т.е. использовать статик переменную из нескольких тестов безопасно?
Vitaliy ◀️TriΔng3l▶️
а, блин
Vitaliy ◀️TriΔng3l▶️
я забыл про переменные на стеке и глобальные переменные
B
вот эту вот
да, точно
Vitaliy ◀️TriΔng3l▶️
и делать reinterpret_cast<__m128 *>(&someLocalChar) лучше не надо, мне кажется
Nikita
да, точно
спасибо
Vitaliy ◀️TriΔng3l▶️
если только явно не сделаешь этот char alignas(16)
Vitaliy ◀️TriΔng3l▶️
хм, а насколько легально то, что творится в strlen, вообще?
Vitaliy ◀️TriΔng3l▶️
есть какие-нибудь гарантии насчёт выравнивания фрейма стека на x86?
Vitaliy ◀️TriΔng3l▶️
хотя, залезть в стек даже к самой main, а то и к mainCRTStartup, не страшно, в общем-то, а там наверняка окажутся какие-нибудь 15 байт, принадлежащие твоему адресному пространству, хотя бы
Vitaliy ◀️TriΔng3l▶️
но в дебаге ругаться будет, всё равно, мне кажется
Constantine
хм, а насколько легально то, что творится в strlen, вообще?
легально, пушо в архитектуре выравнивание страниц 4K
Vitaliy ◀️TriΔng3l▶️
но почему strlen в дебаге не приводит к вылету?
Constantine
потому что выравнивание на 4K допустимо при чтении
Constantine
пушо выравнивание страниц 4K
Дмитрий
Кстати, кто-нибудь знает как убрать всякие проверки, что есть в mainCRTStartup? К примеру, компилируешь программу вида: int main() { return 0; }; в итоге в *.exe-шники куча проверок и т.п.
Vitaliy ◀️TriΔng3l▶️
потому что выравнивание на 4K допустимо при чтении
я имею в виду на stack corruption же должно как-то отреагировать
Vitaliy ◀️TriΔng3l▶️
или только на запись?
Constantine
я имею в виду на stack corruption же должно как-то отреагировать
stack corruption детектируется волшебными паддингами
Constantine
и оно только write
Vitaliy ◀️TriΔng3l▶️
ооооо
Vitaliy ◀️TriΔng3l▶️
сколько возможностей говнокодить внезапно открылось)))
Constantine
В любом случае оно должно инициализировать C Runtime
Constantine
А вызов main для него далекий
Дмитрий
А O2 стоит? :)
Не помню, чуть попозже гляну, но мне кажеться это не повлияет... Исходники mainCRTStartup есть в MVS.
Constantine
Ну вряд ли можно заставить его НЕ ИНИЦИАЛИЗИРОВАТЬ C Runtime
Alexander
Спасибо за наводку
Alexander
@qt_chat
B
ребят, у меня такая вот дилемма. есть ASM имплементация либы (компилируется gcc, cmake через enable_language(ASM)). когда пытаюсь эту имплементацию компилировать как SHARED library, оно пишет /usr/bin/ld: lib/ed25519/amd64-64-24k-pic/libamd64-64-24k-pic.a(fe25519_mul.s.o): relocation R_X86_64_PC32 against symbol `crypto_sign_ed25519_amd64_64_38' can not be used when making a shared object; recompile with -fPIC хотя всё компилируется точно с -fPIC. нашел решение проблемы — нужно скрывать not relocatable символы, добавляю -Wl,--version-script=exportmap, где expormap содержит нужные символы: { global: <my symbols>; local: *; } так собирается либа, все работает. но это решение не кросс платформенно — под маком и виндой не соберется. также, компилирую с -fvisibility=hidden, но к ASM этот флаг не применяется и все равно символы видно. так вот вопрос такой, если у меня есть add_library(lib SHARED <bunch of asm files> <bunch of C files> ) как можно в ней "скрыть" not relocatable символы кроссплатформенно? должно работать на всех платформах
🐙 Antony
у кого-нибудь есть идеи почему operator= и emplace у std::variant не constexpr?
placement new нельзя использовать в constexpr выражениях, как и явный вызов деструктора ptr->~T() вообще, всё это обходится через пачку хитростей, но насколько я помню решили на момент принятия особо не заморачиваться
PRoSToC0der
спасибо
Constantine
И писать ли cleanup на <algorithm> чтобы везде было написано "calls std::less" вместо "calls operator < "
Constantine
а для чего это нужно? Для случаев когад пойнтер указывает на себя?
для случаев, когда get_deleter()(pointer()) вызовет reset() того же unique_ptr
🐙 Antony
да
Дмитрий
Кстати, кто-нибудь знает как убрать всякие проверки, что есть в mainCRTStartup? К примеру, компилируешь программу вида: int main() { return 0; }; в итоге в *.exe-шники куча проверок и т.п.
Дмитрий
https://gist.github.com/AlEmerich/281994ebbcde7d3bac88f21a85de96e2
Дмитрий
Вот этот код, что компилится в .exe
Дмитрий
Есть возможность как-нибудь обойти его и сделать "чистый" ехе-шник?
Constantine
https://gist.github.com/AlEmerich/281994ebbcde7d3bac88f21a85de96e2
за тобой выехали представители майкрософт
Дмитрий
Этот код есть в самой MVS после установки...
Дмитрий
Этот файл из папки установленного MVS
Vitaliy ◀️TriΔng3l▶️
Сделать прогу статической библиотекой, запустить CRT самому, а свой main вызвать прогой, собранной NASM?
Дмитрий
Это уже изврат)
Nikita
Это уже изврат)
а то, что ты хочешь сделать конечно же ниразу не изврат)
Дмитрий
Есть
Как?
Дмитрий
Дмитрий
Все, что есть в exe - int main() { return 0; };
Anonymous
Смотри про ключи /ENTRY /NODEFAULTLIB
Дмитрий
Насколько помню, если ставишь свою точку входа, то что-то не работало...
Дмитрий
Но за подсказку спасибо.
Anonymous
#include <windows.h> int __stdcall entry() { DWORD bsent; HANDLE h = GetStdHandle(STD_OUTPUT_HANDLE); WriteConsole(h, "Hello, World!\n", 14, &bsent, 0); return 0; }
Maksym
вирусы
Egor
сейчас бы экзешники из пабликов запускать
Дмитрий
Если уж такой страх, то отладчик в руки.
Дмитрий
вирусы
Дмитрий
сейчас бы экзешники из пабликов запускать
Maksym
Если уж такой страх, то отладчик в руки.
да с какого вообще в 2к18 от рандомов принимать экзе?
Egor
https://docs.google.com/document/d/1QidaJMJUyQdRrFKD66vE1_N55whe0coQ3h1GpFzz27M/edit?usp=sharing
Egor
добавили в ллвм
Дмитрий
да с какого вообще в 2к18 от рандомов принимать экзе?
Ну, если не хочешь - не принимай, дело твое. Я, например, не принимал, да и сейчас сижу с телефона.
Дмитрий
А если уж что-то очень важное было бы, то всегда есть возможность самому проверить есть вирус или нет.
Дмитрий
А так, я даже с телефона вижу, что вирусов нет.
Дмитрий
Дмитрий
.ехе
Vladislav
Не выкладывайте бинарники, пожалуйста