| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > инстанцировать шаблон литералом |
| Автор: GoldFinch 10.3.2009, 23:08 |
| возможно ли инстанцировать шаблон строковым литералом в каком-нибудь компиляторе, или единственный выход - цеплять свой препроцессор который менял бы "Abcd" на ченить типа 'A','b','c','d' ? |
| Автор: mes 11.3.2009, 00:51 |
| Можно вместо строки использовать int как 'ABCD'. Однако это не стандартное средство.. у gcc работает, а у VS неизвестно. |
| Автор: Lazin 11.3.2009, 06:28 | ||
Добавлено через 2 минуты и 39 секунд в шаблон конечно-же можно передать указатель, но он должен быть известен на этапе компиляции, поэтому придется заранее создавать рад строковых констант, что в принципе то-же самое что и мой пример выше... |
| Автор: GoldFinch 11.3.2009, 09:05 |
| вобщем я хочу сделать такую штуку чтобы конструкция hash<"qwertyui">::ret выдавала хеш "qwertyui" идея с int хороша, но только разве что с __int128 а еще лучше с __int256 |
| Автор: GoldFinch 11.3.2009, 10:05 |
| vinter, и как же? |
| Автор: Lazin 11.3.2009, 10:18 |
не будет |
| Автор: GoldFinch 11.3.2009, 10:21 |
| с int все ок, а вот с __int64 не получается, видимо потому что конпелятор 32разрядный и такие "большие" константы он не переваривает |
| Автор: vinter 11.3.2009, 11:05 | ||
| да, с классом я протупил. Можно сделать это ф-ией Добавлено через 10 минут и 26 секунд или вот так
|
| Автор: GoldFinch 11.3.2009, 11:27 |
| vinter, надо во время компиляции |
| Автор: Lazin 11.3.2009, 11:53 |
а зачем? я usecase такого класса(ф-ии) не могу придумать |
| Автор: GoldFinch 11.3.2009, 12:17 | ||
| Lazin, конкретно для хешей - импорт функций по хешам их имен для уменьшения размера бинарника, сокрытия имен импортируемых функций помогает от реверсирования Добавлено через 5 минут и 8 секунд пока это выглядит как-то так
|
| Автор: Cтpaнник 11.3.2009, 13:02 |
| 1. При такой (самостоятельной) реализации хеш-функции, какова вероятность коллизии? 2. Почему бы не использовать проверенные хеш-функции типа MD5, CRC32, etc.? |
| Автор: GoldFinch 11.3.2009, 14:26 |
| Cтpaнник, у меня есть нехорошее ощущение что компилятор С++ несколько тормознут чтобы за разумное время выполнять метапрограммы содержащие сложные алгоритмы типа md5 а то и crc32 а наличие коллизий лучше проверять заранее, отдельной утилитой |
| Автор: GoldFinch 11.3.2009, 15:01 | ||||
версия с отдельными символами, и правильным порядком подсчета хеша - от 1го символа к последнему
Добавлено через 5 минут и 47 секунд версия без тринарного оператора ?:
как лучше, с тринарным оператором условия, или без него? |
| Автор: vinter 11.3.2009, 15:58 |
тернарный по мне, так в обоих случаях практология какая-то... |
| Автор: GoldFinch 11.3.2009, 18:22 |
| vinter, ты знаешь вариант лучше? так напиши... |
| Автор: vinter 11.3.2009, 18:41 |
| GoldFinch, может просто другой подход выбрать? Решений всегда как миниму 2, а уж подходов... |
| Автор: GoldFinch 11.3.2009, 18:48 |
| vinter, а какой другой? не писать на С++ ? |
| Автор: vinter 11.3.2009, 19:06 |
| GoldFinch, это уже думать надо, если ты обрисуешь задачу полностью, может кто и подскажет чего. А не видя задачи, тяжело, что-то советовать |
| Автор: GoldFinch 11.3.2009, 19:17 |
| общая задача - разобраться с метапрограммированием на С++ частная задача - обработка строковых констант еще более частная задача - реализация динамического импорта функции по ее хешу, рассчитанному статически |
| Автор: Lazin 11.3.2009, 19:35 |
| а как можно импортировать ф-ю по ее хэшу? |
| Автор: GoldFinch 11.3.2009, 19:50 |
| Lazin, также как и по имени, поиском нужной функции в таблице имен экспорта, только вместо сравнения имен сравниваются хеши собственно это уже оффтоп, посмотрите как реализован импорт в протекторах\упаковщиках |
| Автор: math64 12.3.2009, 10:24 | ||||
По моему, в данном конкретном случае лучше написать программу ищущую код1 типа
и заменяющий его на код2:
Можно также искать уже преобразованный код2 и пересчитывать в нём константы. |
| Автор: Lazin 12.3.2009, 10:34 | ||||
а можно сделать еще проще, написать скриптик, который будет принимать на вход файл с именами ф-ий, и преобразовывать его в *.h файл, в котором все это лежит в виде констант, либо в виде дефайнов, в принципе работы на полчаса =)
Добавлено @ 10:35 в проект нужно будет просто добавить custom build step, который-бы вызывал скрипт и все |
| Автор: GoldFinch 12.3.2009, 10:56 |
| это подпадает под категорию "не писать на С++" |
| Автор: math64 12.3.2009, 12:48 | ||
Этот "скрипт" можно написать и на C++, причём данные, которые нужно обрабатывать можно разместить не в отдельном файле, а в файле С++, который может входить как в основной проект, как и в "скрипт"
|
| Автор: GoldFinch 12.3.2009, 12:55 |
| math64, это называется front-end и никак не относится к языку это хорошее решение если писать для себя и 1 раз, в остальных случаях это порождает множество проблем |
| Автор: Lazin 12.3.2009, 13:39 | ||||
если ты используешь нормальную билд систему, то это не проблема, и используется такой подход часто, например во время генерации заголовочных файлов по библиотекам типов =) Добавлено через 9 минут и 54 секунды можно конечно реализовать все на с++, например как-нибудь так:
|
| Автор: GoldFinch 12.3.2009, 16:26 | ||
примерно вот так выглядит импорт функции по хешу, если кто не видел
|
| Автор: Cтpaнник 12.3.2009, 17:05 |
| Ну хорошо. Импортируешь функции не по имени, а по хешу. Круто. Молодец. Что дальше? Какое практическое применение? |
| Автор: GoldFinch 12.3.2009, 17:13 |
| Cтpaнник, шеллкодесы на С++ писать, мало ли бывает применений, они есть ты просто их не знаешь %) |
| Автор: Lazin 12.3.2009, 20:42 |
| GoldFinch, у тебя ошибка в алгоритме |
| Автор: GoldFinch 12.3.2009, 21:23 |
| Lazin, хде? примеры обрабатывает нормально... |
| Автор: Lazin 12.3.2009, 21:41 |
| там возможны коллизии, хэш ф-ия какая-то странная к тому-же если это для того, что-бы запутать того, кто будет реверсить код, то нужно учесть, что код хэш ф-ии есть в коде программы и найти, какой из ф-ий какой код будет соответсвовать не трудно)) в общем странно это все как-то... |
| Автор: GoldFinch 12.3.2009, 21:59 |
| Lazin, для большинства случаев это работает а так это только PoC, типа 'hello world' |
| Автор: Cтpaнник 13.3.2009, 11:52 |
| Для большинства случаев никто даже не будет реверсить код, дабы узнать, а какой же такой таинственной функции соответствует хеш 0x12345678. Просто напустят на прогу API-шпиона, и вуаля. |
| Автор: GoldFinch 13.3.2009, 12:44 |
| Cтpaнник, апи шпион, отладчик и другие средства динамического анализа могут вообще ничего не показать, если в проге предусмотрена антиотладка или не наступили определенные условия, или покажут тебе факт вызова АПИ постфактум, когда это будет уже неинтересно да и вообще, не скрытием символьных имен единым... |
| Автор: mes 13.3.2009, 13:46 | ||
Письмо из центра до Штиpлица не дошло... Он прочитал его еще раз. Опять не дошло... Пришлось читать в третий раз. |