Добрый день форумчанам! Хочу сделать шифрование указателей на строки в компайл-тайме и расшифровку в рантайме. Таким образом, при статическом анализе на строку не будет ни одной ссылки. Код (C++): constexpr char* Crypt(char* String) { return String + 3; } int main() { constexpr char* String = Crypt("123ABC"); } Ожидается, что в String ещё на этапе компиляции будет положен адрес, указывающий на "ABC", но Crypt работает как рантайм-функция: в рантайме загружается оригинальный адрес "123ABC", к нему прибавляется 3 и записывается в String (т.е., в статике остаётся ссылка на оригинальную строку). Можно ли как-то обмануть компилятор, заставив его ещё на этапе компиляции рассчитывать адрес из адреса строки?
Читал. Интересный подход, но хотелось бы не только (и даже не столько) зашифровать строку, сколько разорвать все ссылки на неё
если речь идет о XREF, то делай че то вроде: Перед этим убрать align Код (C++): struct str { CHAR szReserved[16]; PCHAR pString = "..."; }; PCHAR pchFixPtr(str *_string) { return (_string + 16 * sizeof(CHAR)); } ... str Somethx; SomeFunction(pchFixPtr(&Somethx)); Думаю смысл понятен
Да вы мсье эстет У меня в 5:30 глаза слипаются, поэтому я мог написать полнейшую фигню. Но вот вам менее complicated... Код (C++): struct str { str(PCHAR pStr) { this->string = pStr + 1; } PCHAR c_str() { return this->string; } PCHAR string; }; ... str Self("HoShiMin privireda" - 1); SomeFunc(Self.c_str());