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

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

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

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

циклический сдвиг полей

  • Автор темы Beavis
  • Дата начала
Статус
Закрыто для дальнейших ответов.
B

Beavis

имеется следующая задача:
Код:
Пусть имеется файл, в котором информация разбита по пяти полям.
Произведите циклический сдвиг полей: 1 2 3 4 5 -> 5 4 3 2 1


помогите разобраться, пожалуйста, с этой задачей... :blink:
 
U

ultra

Напиши подробнее что тебе нужно.
Просто считать из файла поля и переписать файла с полями в обратном порядке?
 
B

Beavis

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

Kmet

Well-known member
25.05.2006
904
8
BIT
0
"бинарные поля" - поясни термин.
Насколько понял задачу, естественного и простого решенмя нет, единственный вариант работать напрямую с памятью, только надо учитывать выравниваение.

и еще: а зачем такой изврат?
 
B

Beavis

т.е. не бинарные а битовые поля...
т.е. например
Код:
struct _bit
{
int b1:2;
int b2:3;
int b3:1;
} bit;
вот=)
а нужно это чтоб зачет в институте получить)) больше ни для чего
 
U

ultra

Хмм,интересно а как это ты собрался считывать битовые поля,если к примеру тот же char занимает 1 байт? ;)
 

Kmet

Well-known member
25.05.2006
904
8
BIT
0
Для: ultra ты не прав. С из тех времен когда и одного байта на флаг было жирно.

Средствами языка ни битовые ни обычные поля в рантайме не подвигуешь. Придется биты ручками двигать. Тут или асамблевровские вставки или что то такое value=(value<<shift)|(value>>(32-shift))(это для DWORD). ТОлько здесь можно косяков наловить на расширении(под этим я понимаю что если ты объявишь struct {unsigned i:1} то размер струтуры будет никак не 1 бит, а как минимум 1 байт, а то и все четыре). В общем читай стандарт, какая организация битовых полей гарантируется, а какая зависит от релаизации компилятора. Хотя если это только для зачета, то можно и методом тыка
 
6

62316e

Тут или асамблевровские вставки или что то такое value=(value<<shift)|(value>>(32-shift))(это для DWORD).
Опа. Тепеть давай росказывай к чему тут асм, твой код и DWORD o_O
 

Kmet

Well-known member
25.05.2006
904
8
BIT
0
А чего тут рассказывать... Раз язык не позволяет манипулировать с порядком битовых полей в рантайме, то необходимр работать напрямую с их представлением в памяти. Но си не имеет стандартной команды для циклического сдвига, поэтому надо использовать асм вставки и комбинации допустимых битовых опреций. Если представить циклический сдвиг то станет ясно что его реализация допустимыми битовыми опрециями зависит от размера операнда
 
6

62316e

Черт. Сорри.. я не врубался в тему с первого раза.
 
Статус
Закрыто для дальнейших ответов.
Мы в соцсетях:

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