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
Vitaliy ◀️TriΔng3l▶️
но почему strlen в дебаге не приводит к вылету?
Constantine
потому что выравнивание на 4K допустимо при чтении
Constantine
пушо выравнивание страниц 4K
Дмитрий
Кстати, кто-нибудь знает как убрать всякие проверки, что есть в mainCRTStartup?
К примеру, компилируешь программу вида:
int main() { return 0; };
в итоге в *.exe-шники куча проверок и т.п.
Vitaliy ◀️TriΔng3l▶️
или только на запись?
Constantine
Constantine
и оно только write
Vitaliy ◀️TriΔng3l▶️
ооооо
Vitaliy ◀️TriΔng3l▶️
сколько возможностей говнокодить внезапно открылось)))
Дмитрий
Constantine
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 символы кроссплатформенно? должно работать на всех платформах
PRoSToC0der
PRoSToC0der
спасибо
Constantine
Constantine
И писать ли cleanup на <algorithm> чтобы везде было написано "calls std::less" вместо "calls operator < "
🐙 Antony
🐙 Antony
PRoSToC0der
🐙 Antony
да
Дмитрий
Кстати, кто-нибудь знает как убрать всякие проверки, что есть в mainCRTStartup?
К примеру, компилируешь программу вида:
int main() { return 0; };
в итоге в *.exe-шники куча проверок и т.п.
Дмитрий
https://gist.github.com/AlEmerich/281994ebbcde7d3bac88f21a85de96e2
🐙 Antony
Дмитрий
Вот этот код, что компилится в .exe
Дмитрий
Есть возможность как-нибудь обойти его и сделать "чистый" ехе-шник?
Constantine
Дмитрий
Этот код есть в самой MVS после установки...
Дмитрий
Этот файл из папки установленного MVS
Vitaliy ◀️TriΔng3l▶️
Сделать прогу статической библиотекой, запустить CRT самому, а свой main вызвать прогой, собранной NASM?
Дмитрий
Это уже изврат)
Nikita
Это уже изврат)
а то, что ты хочешь сделать конечно же ниразу не изврат)
Anonymous
Дмитрий
Дмитрий
Дмитрий
Все, что есть в 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
сейчас бы экзешники из пабликов запускать
Дмитрий
Если уж такой страх, то отладчик в руки.
Дмитрий
вирусы
Дмитрий
сейчас бы экзешники из пабликов запускать
Egor
https://docs.google.com/document/d/1QidaJMJUyQdRrFKD66vE1_N55whe0coQ3h1GpFzz27M/edit?usp=sharing
Egor
добавили в ллвм
Anonymous
Дмитрий
А если уж что-то очень важное было бы, то всегда есть возможность самому проверить есть вирус или нет.
Дмитрий
А так, я даже с телефона вижу, что вирусов нет.
Дмитрий
Дмитрий
.ехе
Vladislav
Не выкладывайте бинарники, пожалуйста