• XSS.stack #1 – первый литературный журнал от юзеров форума

вызовы memcpy, _chkstk в clang без crt в vs

D3buG

RAID-массив
Пользователь
Регистрация
30.10.2022
Сообщения
94
Реакции
101
Гарант сделки
2
Всем привет. Столкнулся с такой проблемой, что проект без crt не хочет линоковаться clang (ollvm)
Точнее он почему-то вставляет сртишные вызовы _chkstk и memcpy в релизный билд.
Сразу скажу, что не использую конструкции вида struct SomeStruct ss = {0}; или BYTE z[32] = {0};

memcpy он пихает в такие конструкции:
C:
BYTE somearray[10][10] = {
    {0x0, 0x1, 0x2, 0x3, 0xFF, 0x43, ...},
    {0x8, 0x2, 0x5, 0x6, 0xEF, 0x58, ...},
    ...
}
C:
WCHAR x1[9] = L"\x5a\x5b\x6c\x6d\x7e\x6f\xFb\x21";
WCHAR x2[10] = L"\x5a\x4c\x7b\x6d\x6f\x70\x7b\xFE\x03";
WCHAR x3[12] = L"\x5b\x6e\x7c\x7c\x61\x6d\x6c\x6a\x6d\xFA\x05";
...

__chkstk просто во все функции вставляет

Параметр -fno-builtin не помог.
Так же не помогает добавление аттрибута void somefn() __attribute__((no_builtin)) {...}

Я гуглил насчёт этого всего и нашел только no_builtin и сообщения о том, что это невозможно, "потому что по стандарту так надо!!"
Может есть какой-то вариант переопределить эти функции без особых проблем? Или желательно их вообще отключить.

MSVC отлично компилирует код без этих вставок и при линковке проблем нет, а с clang'ом какая-то проблема(
 
Всем привет. Столкнулся с такой проблемой, что проект без crt не хочет линоковаться clang (ollvm)
Точнее он почему-то вставляет сртишные вызовы _chkstk и memcpy в релизный билд.
Сразу скажу, что не использую конструкции вида struct SomeStruct ss = {0}; или BYTE z[32] = {0};

memcpy он пихает в такие конструкции:
C:
BYTE somearray[10][10] = {
    {0x0, 0x1, 0x2, 0x3, 0xFF, 0x43, ...},
    {0x8, 0x2, 0x5, 0x6, 0xEF, 0x58, ...},
    ...
}
C:
WCHAR x1[9] = L"\x5a\x5b\x6c\x6d\x7e\x6f\xFb\x21";
WCHAR x2[10] = L"\x5a\x4c\x7b\x6d\x6f\x70\x7b\xFE\x03";
WCHAR x3[12] = L"\x5b\x6e\x7c\x7c\x61\x6d\x6c\x6a\x6d\xFA\x05";
...

__chkstk просто во все функции вставляет

Параметр -fno-builtin не помог.
Так же не помогает добавление аттрибута void somefn() __attribute__((no_builtin)) {...}

Я гуглил насчёт этого всего и нашел только no_builtin и сообщения о том, что это невозможно, "потому что по стандарту так надо!!"
Может есть какой-то вариант переопределить эти функции без особых проблем? Или желательно их вообще отключить.

MSVC отлично компилирует код без этих вставок и при линковке проблем нет, а с clang'ом какая-то проблема(
Перенеси массивы в Global переменные, если нужно выдели память и используй memcpy
также не забудь определить свои memset/memcpy и выключи оптимизацию
 
решил проблему)
Перенеси массивы в Global переменные
также не забудь определить свои memset/memcpy и выключи оптимизацию
Выключать оптимизацию не надо, в релизе нужен нормальный код

memcpy починился static массивами (ну или глобальные можно делать, но обычно таким никто не занимается)
chkstk пришлось самому определить
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх