• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

шаблонные строковые функции

  • Автор темы MrKarapuz
  • Дата начала
M

MrKarapuz

решил написать несколько строковых функций, так чтоб работали со строками разных типов
вот одна из них
делает поиск символа в строке, возвращает индекс или -1 если не найден

Код:
template<class TYPE>
inline SIZE_T	str_find_symn(const TYPE* pSrc,TYPE Symbol,SIZE_T Count){
SIZE_T	Index;
switch(sizeof TYPE){
case 1:
__asm__("repne; scasb; cmovnel %2,%%ecx":"=c"(Index),"=D"(pSrc):"rm"(Count),"D"(pSrc),"c"(Count),"a"(Symbol));
break;
case 2:
__asm__("repne; scasw; cmovnel %2,%%ecx":"=c"(Index),"=D"(pSrc):"rm"(Count),"D"(pSrc),"c"(Count),"a"(Symbol));
break;
case 4:
__asm__("repne; scasl; cmovnel %2,%%ecx":"=c"(Index),"=D"(pSrc):"rm"(Count),"D"(pSrc),"c"(Count),"a"(Symbol));
break;
default:
return -1;
}
return Count-Index-1;
}

проблема состоит в том что при вызове например так
Код:
	str_find_symn("asdasd",123,6);
не компилит и выводит следущую ошибку
error: no instance of function template "str_find_symn_" matches the argument list
1> argument types are: (const char [7], int, int)
1> str_find_symn("asdasd",123,6);

то есть как я понял компилятор не преобразовывает 123 к типу char
если написать так
Код:
str_find_symn("asdasd",(char)123,6);
то все нормально

теперь вопросы
1. как сделать так чтоб при каждом вызове мне не приходилось преобразовывать типы
2. как проверку на размер типа сделать через условную компиляцию. (при оптимизации он конечно обрубает лишние case, но хотелось бы чтоб на стадии отладки их тоже не было)


компидятор Intel 10
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!