URL: https://linuxfr.org/users/serge_ss_paille/journaux/obfusque-ton-code-avec-c Title: Obfusque ton code avec C++ Authors: serge_sans_paille Date: 2018年03月16日T14:37:40+01:00 License: CC By-SA Tags: c++11 et obfuscation Score: 15 Cher Nuit-Nal, toi qui aime le C++11, tu as peut-être déjà essayé de concaténer des chaînes constantes, suivant ce scénario là : ```c++ struct Some { static constexpr char Name[] = "Mr Popo"; }; char const *escape() { auto dogs = cats("hey, ", Some::Name, " what's up?"); return dogs; } int main() { char const* concat = escape(); puts(concat); return 0; } ``` Le problème est donc de concaténer des chaines constantes, à *compile time* et donc d'obtenir la chaîne concaténée dans le binaire final. Et qu'elle ne soit pas allouée sur la pile, mais bien présente dans les `.rodata`. Et en C++11 seulement, parce que c'est bien d'avoir 7 ans de retard sur le standard (rime). La solution que j'ai pondue est affreuse ou élégante suivant le point de vue, mais elle combine *variadic macro*, *variadic template*, *lamba*, *constexpr*, *auto* et définition de structure locale. On notera avec stupéfaction la concision du binaire généré, et avec satisfaction le ```asm .asciz "hey, Mr Popo what's up?" ``` Allez, pour le plaisir: https://godbolt.org/g/ZfLCp6

AltStyle によって変換されたページ (->オリジナル) /