ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2

ANTICHAT — форум по информационной безопасности, OSINT и технологиям

ANTICHAT — русскоязычное сообщество по безопасности, OSINT и программированию. Форум ранее работал на доменах antichat.ru, antichat.com и antichat.club, и теперь снова доступен на новом адресе — forum.antichat.xyz.
Форум восстановлен и продолжает развитие: доступны архивные темы, добавляются новые обсуждения и материалы.
⚠️ Старые аккаунты восстановить невозможно — необходимо зарегистрироваться заново.
Вернуться   Форум АНТИЧАТ > Программирование > С/С++, C#, Delphi, .NET, Asm
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

MySQL HELP! Запись 0x00 байта
  #1  
Старый 17.01.2009, 17:35
Smapt
Познающий
Регистрация: 29.01.2008
Сообщений: 82
Провел на форуме:
373690

Репутация: 88
По умолчанию MySQL HELP! Запись 0x00 байта

Записываю в MySQL базу из Си строку, запись идет до первого 0x00 байта, а дальше пустота... Можно-ли с этим боротся?

Последний раз редактировалось Smapt; 17.01.2009 в 17:39..
 
Ответить с цитированием

  #2  
Старый 17.01.2009, 17:52
criz
Постоянный
Регистрация: 04.11.2007
Сообщений: 303
Провел на форуме:
811764

Репутация: 119
По умолчанию

Цитата:
Сообщение от Smapt  
Записываю...
как?
 
Ответить с цитированием

  #3  
Старый 17.01.2009, 17:55
Joker-jar
Постоянный
Регистрация: 11.03.2007
Сообщений: 581
Провел на форуме:
4172659

Репутация: 646


Отправить сообщение для Joker-jar с помощью ICQ
По умолчанию

0x00 - это ж конец строки
 
Ответить с цитированием

  #4  
Старый 17.01.2009, 18:12
Smapt
Познающий
Регистрация: 29.01.2008
Сообщений: 82
Провел на форуме:
373690

Репутация: 88
По умолчанию

Цитата:
Сообщение от criz  
как?
Примерно так:
Код:
char text[] = {0x10,0x011,0x12,0x00,0x10,0x11};
MYSQL_RES * UPDATE = QUERY("base","UPDATE `user` SET text='%s' WHERE name='name'",text);


MYSQL_RES * QUERY(char * base, char * Format, ...)
{
	va_list ap;	      // For arguments
	va_start( ap, Format );
	int buff_size = _vscprintf(Format,ap)+1;
	char * buff = new char[buff_size];
	vsprintf(buff,Format,ap);
	
	char * queryPtr = new char[1024];

	mysql_select_db(mysql,base);
	sprintf(queryPtr,"use %s",base);

	mysql_query(mysql,queryPtr);
	sprintf(queryPtr, buff);

	if (mysql_query(mysql,queryPtr))
	{
		va_end  ( ap );
		delete[] buff; delete[] queryPtr;
		return 0;
	}
	else
	{
		va_end  ( ap );
		delete[] buff; delete[] queryPtr;
		return mysql_store_result(mysql);
	}
}


Цитата:
Сообщение от Joker-jar  
0x00 - это ж конец строки
Спасибо, я знаю.
 
Ответить с цитированием

  #5  
Старый 17.01.2009, 18:28
criz
Постоянный
Регистрация: 04.11.2007
Сообщений: 303
Провел на форуме:
811764

Репутация: 119
По умолчанию

Может у тебя конфликт типов данных? Т.е. ты передаешь hex-данные в текстовое поле...
 
Ответить с цитированием

  #6  
Старый 17.01.2009, 18:33
Smapt
Познающий
Регистрация: 29.01.2008
Сообщений: 82
Провел на форуме:
373690

Репутация: 88
По умолчанию

Передавать пробовал по все что только можно, char, blob и т.д. Результат всегда одинаковый записывает до 0x00 и обрезает строку. Если не ошибаюсь раньше в MySQL был тип данных binary , так вот в строку типа binary(100) данные записывались нормально(т.е. вместе с 0x00), а сечас bin почему-то убрали
 
Ответить с цитированием

  #7  
Старый 17.01.2009, 18:35
oRb
Members of Antichat - Level 5
Регистрация: 09.05.2008
Сообщений: 304
Провел на форуме:
7875940

Репутация: 2362
По умолчанию

нуль байт запиши как char(0)
те запрос будет вида:
UPDATE `user` SET text=CONCAT('abc',char(0),'abc') WHERE name='name'

И поле text, наверно, должно иметь тип blob.
 
Ответить с цитированием

  #8  
Старый 17.01.2009, 18:44
Joker-jar
Постоянный
Регистрация: 11.03.2007
Сообщений: 581
Провел на форуме:
4172659

Репутация: 646


Отправить сообщение для Joker-jar с помощью ICQ
По умолчанию

Цитата:
Спасибо, я знаю.
В таком случае, ты спрашиваешь примерно следующее: как записать конец строки в середину строки. Используй, к примеру, blob
 
Ответить с цитированием

  #9  
Старый 17.01.2009, 20:40
Smapt
Познающий
Регистрация: 29.01.2008
Сообщений: 82
Провел на форуме:
373690

Репутация: 88
По умолчанию

Всем спс, строка обрезалась ещё до отправки...
хм... возникает новый вопрос нельзяли без особого изврата отучить sprintf от "обрезания" ??

Последний раз редактировалось Smapt; 17.01.2009 в 20:51..
 
Ответить с цитированием

  #10  
Старый 17.01.2009, 22:20
criz
Постоянный
Регистрация: 04.11.2007
Сообщений: 303
Провел на форуме:
811764

Репутация: 119
По умолчанию

Цитата:
Сообщение от Smapt  
хм... возникает новый вопрос нельзяли без особого изврата отучить sprintf от "обрезания" ??
А обязательно sprintf() юзать? Можно заменить strcat()
 
Ответить с цитированием
Ответ



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблемы с Записью Cd-R Nova Аппаратное обеспечение 17 14.03.2009 17:59
SQL injection в MySql сервере версии 3,x bandera Чужие Статьи 3 04.06.2006 16:17
Общие Рекомендации Защиты (MySQL и SQL Web-интерфейс) k00p3r Чужие Статьи 0 13.06.2005 11:22
Защищаем MySql. Шаг за шагом k00p3r Чужие Статьи 0 13.06.2005 11:18
SQL инъекция в сервере MySQL k00p3r Чужие Статьи 0 12.06.2005 12:41



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ