Информация об изменениях

Сообщение Re: чистка путей от 15.08.2023 21:38

Изменено 15.08.2023 21:39 Sm0ke

Re: чистка путей
Здравствуйте, Евгений Музыченко

Вы не хотите светить полные пути в бинарнике, так?

Идея вот в чём. Пишем consteval функцию, которая возвращает std::array
В функции мы от std::string_view{__FILE__} откусываем начальные пути из указанного перечня
И копируем остаток в результирующий std::array

Я проверил бинарник на содержание путей. Тема рабочая для vs community 2022 (и clang 16, судя по asm-у в готболте)

#include <iostream>
#include <string_view>
#include <array>
#include <algorithm>

using namespace std::literals::string_view_literals;

using omg = std::array<char, 100>;

consteval omg
so_path(std::string_view path)
{
  std::array cut{
    "/app"sv,
    "/omg"sv
  };
  for( std::string_view it : cut )
  {
    if( path.starts_with(it) )
    {
      path.remove_prefix( it.size() );
      break;
    }
  }
  omg ret{};
  std::ranges::copy( path, ret.begin() );
  return ret;
}

constexpr omg
g_path = so_path(__FILE__);

int main()
{
  std::cout << g_path.data() << '\n';
  return 0;
}


Из минусов: приходится указывать в функции что откусываем, но это не идёт в бинарник.
Re: чистка путей
Здравствуйте, Евгений Музыченко

Вы не хотите светить полные пути в бинарнике, так?

Идея вот в чём. Пишем consteval функцию, которая возвращает std::array
В функции мы от std::string_view{__FILE__} откусываем начальные пути из указанного перечня
И копируем остаток в результирующий std::array

Я проверил бинарник на содержание путей. Тема рабочая для vs community 2022 (и clang 16, судя по asm-у в готболте)

Чек: https://godbolt.org/z/8bWvqPM1v

#include <iostream>
#include <string_view>
#include <array>
#include <algorithm>

using namespace std::literals::string_view_literals;

using omg = std::array<char, 100>;

consteval omg
so_path(std::string_view path)
{
  std::array cut{
    "/app"sv,
    "/omg"sv
  };
  for( std::string_view it : cut )
  {
    if( path.starts_with(it) )
    {
      path.remove_prefix( it.size() );
      break;
    }
  }
  omg ret{};
  std::ranges::copy( path, ret.begin() );
  return ret;
}

constexpr omg
g_path = so_path(__FILE__);

int main()
{
  std::cout << g_path.data() << '\n';
  return 0;
}


Из минусов: приходится указывать в функции что откусываем, но это не идёт в бинарник.