Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2010.11.07;
Скачать: [xml.tar.bz2];

Вниз

Неясности в формате файла   Найти похожие ветки 

 
Sha ©   (2010-07-21 11:33) [240]

> Виталий ©   (21.07.10 09:09) [236]
> Я именно в материале по первой ссылке и прочел описание каталоговой записи

Там же описан способ хранения длинных имен.
Т.е. сектор каталога может содержать записи двух типов.
Чтобы выполнить задание [234] надо просто добавить к коду
недостающее описание и переписать GetUniLFN.

> Виталий ©   (21.07.10 11:12) [239]
> Но как из описания полей можно понять,
> что за хитрые вещи проводятся с их содержимым и для чего?

Никак.
Потому что у автора нет описания этих полей для случая
хранения на тех же местах частей длинного имени.


 
Sha ©   (2010-07-21 11:44) [241]

> Sha ©   (21.07.10 11:33) [240]
> Никак.

Ну, или знать,
что в IA-32 целые типы хранятся в Little Endian (меньшим концом вперед) представлении,
что Chr(i) эквивалентно Chr(Byte(i)) или Chr(i and 255),
что после Shr 8 первый байт становится нулевым, второй - первым и т.д.,
что после Shr 16 .........


 
Anatoly Podgoretsky ©   (2010-07-21 11:51) [242]

> Виталий  (21.07.2010 11:12:59)  [239]

Мы уже говорили про WinApi, а здесь надо знать DOSApi, что проще, но уже все
забыли.
Ты не в ту степь полез.


 
Anatoly Podgoretsky ©   (2010-07-21 11:52) [243]

> Sha  (21.07.2010 11:33:00)  [240]

Автор честно признается, что он не пользовалься документированой
информацией, а делал хакерский анализ и не несет ответственности за
достоверность данной информации.


 
Sha ©   (2010-07-21 11:59) [244]

> Anatoly Podgoretsky ©   (21.07.10 11:51) [242]
> а здесь надо знать DOSApi,

Да там ваще никакой апи не нужен.
Обычная функция преобразования данных.

Достаточно уметь работать с массивами и со структурами данных.
Объявить record как надо и пройтись по массиву record"ов,
сцепляя данные в одно длинное имя.


 
Anatoly Podgoretsky ©   (2010-07-21 12:11) [245]

> Sha  (21.07.2010 11:59:04)  [244]

Ты разве не видел там int 21/25 АПИ в ДОС реализовывалось через вызов
прерывания.


 
Sha ©   (2010-07-21 12:21) [246]

> Anatoly Podgoretsky ©   (21.07.10 12:11) [245]

Мы ща говорим конкретно о функции GetUniLFN


 
Anatoly Podgoretsky ©   (2010-07-21 12:26) [247]

> Sha  (21.07.2010 12:21:06)  [246]

Внутри которой непонятные функции и операции.


 
Sha ©   (2010-07-21 12:28) [248]

> Anatoly Podgoretsky ©   (21.07.10 12:26) [247]

Ждем. Виталий разъяснить должен.


 
Alien1769 ©   (2010-07-21 12:58) [249]


> Alien1769, вы привели то, какие значения может принимать
> поле атрибута. Но в коде оно вообще не используется.


Ошибочное мнение. Как же функция узнает про каталог ?? :)


 
Виталий ©   (2010-07-21 13:49) [250]


> что в IA-32 целые типы хранятся в Little Endian

Это читал в википедии.

> что Chr(i) эквивалентно Chr(Byte(i)) или Chr(i and 255),

Догадываюсь. В третьем случае поразрядное AND, а 255 - это 11111111, то есть число в итоге даст опять же i

> что после Shr 8 первый байт становится нулевым, второй -
>  первым и т.д.,
> что после Shr 16 .........

- вероятно, третий - вторым, 4-й - третьим, ведь сдвиг вправо на 8 разрядов - это заполнение их (старших на х86) нулями, а то, что было младшими 8 разрядами, исчезнет.
-----------------------------------
Но в мою голову никак не приходит, как эти полезные знания использовать. А способ хранения длинных имен мне неясен. Откуда там эти 12 байт (6 юникод-символов)?


 
Виталий ©   (2010-07-21 13:50) [251]


> Ошибочное мнение. Как же функция узнает про каталог ?? :
> )

Я имею ввиду про только эту рассматриваемую функцию.


 
Виталий ©   (2010-07-21 13:53) [252]

Ой, простите, не понял вас. Но там if Dir[I].Attr<>15, а 15 - это вообще что? $10 - это 16dec


 
Anatoly Podgoretsky ©   (2010-07-21 13:54) [253]

> Виталий  (21.07.2010 13:49:10)  [250]

Не совсем

Chr(256) и Chr(256 and 255) дадут разные результаты. Chr(I and 255) нужно
для выделения младшего байта, а Chr поддерживает и Юникод.


 
Виталий ©   (2010-07-21 13:55) [254]


> Откуда там эти 12 байт

Подразумеваю, что в статье сказано о "дополнительной" каталоговой записи. Но в коде автор, по-моему, работает совсем не с ней.


 
Виталий ©   (2010-07-21 13:58) [255]


> Chr(I and 255) нужно
> для выделения младшего байта, а Chr поддерживает и Юникод.
>

Понял вас, спасибо (проверил в калькуляторе и на бумаге работу).


 
Sha ©   (2010-07-21 14:00) [256]

> Виталий ©   (21.07.10 13:55) [254]
> Подразумеваю, что в статье сказано о "дополнительной" каталоговой записи.
> Но в коде автор, по-моему, работает совсем не с ней.

Да.
Не пытайся понять, что делает автор.
Выполни задание [234].
А там, глядишь, и поймешь.


 
Виталий ©   (2010-07-21 14:03) [257]

Как же я перепишу эту функцию, если мне неясен принцип ее работы?


 
Sha ©   (2010-07-21 14:09) [258]

> Виталий ©  
> а 255 - это 11111111, то есть число в итоге даст опять же i

Нет. -1<>255, но chr(-1)=chr(255)

> Anatoly Podgoretsky ©   (21.07.10 13:54) [253]
> Chr поддерживает и Юникод.

В код функции написан задолго до юникодовой Chr,
там везде имеется в виду AnsiChr


 
Виталий ©   (2010-07-21 14:11) [259]


>
> Нет. -1<>255, но chr(-1)=chr(255)

А вот это откуда узнать и так ли важна работа с отрицательными числами?


 
Sha ©   (2010-07-21 14:14) [260]

> Виталий ©   (21.07.10 14:03) [257]
> Как же я перепишу эту функцию, если мне неясен принцип ее работы?

Есть описание способа хранения длинного имени
http://www.ipm.kstu.ru/os/lec/13.php
этого достаточно, чтобы, (почти) не заглядывая в код чужой функции, написать свою.

Ведь ты же можешь написать код вычисления факториала,
не глядя на то, как это делают другие?


 
Anatoly Podgoretsky ©   (2010-07-21 14:14) [261]

> Виталий  (21.07.2010 13:53:12)  [252]

Dir[I].Attr<>15 это грубо, надо использовать именованые константы, а так это
набор флагов.
Смотри справку по FindFirst, а значение констант в файле windows.pas


 
Sha ©   (2010-07-21 14:17) [262]

> Виталий ©   (21.07.10 14:11) [259]
> А вот это откуда узнать и так ли важна работа с отрицательными числами?

А зачем тебе узнавать это?
Вот положительные
МахInt<>255, но chr(MaxInt)=chr(255)
511<>255, но chr(511)=chr(255)


 
Anatoly Podgoretsky ©   (2010-07-21 14:18) [263]

> Виталий  (21.07.2010 14:03:17)  [257]

Зачем тебе ее переписывать?
На чем ее переписывать, укажи точное название компилятора.
Принцип будет ясен, если изучить формат хранения длинных имен, за этим в
MSDN.


 
Виталий ©   (2010-07-21 14:19) [264]


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

Мне, к сожалению, недостаточно. Факториал написать проще. А тут, даже если я опишу эту "дополнительную" каталоговую запись, то у меня явно возникнет еще куча вопросов, и, что самое сложное, нужно еще будет написать немаленьку обертку типа той, что описана автором и в которой я совершенно ничего не понимаю.


 
Виталий ©   (2010-07-21 14:21) [265]


> Зачем тебе ее переписывать?

дали же задание "удобочитаемо" ее переписать.

> На чем ее переписывать, укажи точное название компилятора.

У меня RAD Studio 2010. Вопрос лицензионности, прошу вас, отложите.

> Принцип будет ясен, если изучить формат хранения длинных
> имен, за этим в
> MSDN.

Есть подозрение, что он отличен от того хака, который сделан автором кода.


 
Anatoly Podgoretsky ©   (2010-07-21 14:22) [266]

> Sha  (21.07.2010 14:09:18)  [258]

Это так, но ты попробуй это на Д2010
А то что функция написана неверна, то это не является заслугой автора. Он
мог бы ее и правильно написать, хотя бы как предложено Chr(Byte(i)) или
Chr(i and 255)


 
Виталий ©   (2010-07-21 14:22) [267]


> 511<>255, но chr(511)=chr(255)

все, что за пределами типа 0..255, становится равным тому, что вернется по коду 255?


 
Anatoly Podgoretsky ©   (2010-07-21 14:23) [268]

> Виталий  (21.07.2010 14:11:19)  [259]

А что ты тогда будешь делать если встретишь в чужом коде отричательные
числа, да в том же MSDN можно встретить и то и другое.


 
Sha ©   (2010-07-21 14:25) [269]

> А тут, даже если я опишу эту "дополнительную" каталоговую запись,

А ты попробуй.


> то у меня явно возникнет еще куча вопросов

Эти вопросы будут только по букварю.

> немаленьку обертку типа той, что описана автором

С чего взял? У автора немаленькая из-за его стремления экономить на описаниях.
А у тебя должно быть просто сцепление кусков.

> и в которой я совершенно ничего не понимаю.

А нафиг тебе это понимать до написания своего кода?


 
Sha ©   (2010-07-21 14:26) [270]

> все, что за пределами типа 0..255, становится равным тому, что вернется по коду 255?

chr(256)=chr(0)


 
Виталий ©   (2010-07-21 14:28) [271]


> А что ты тогда будешь делать если встретишь в чужом коде
> отричательные
> числа, да в том же MSDN можно встретить и то и другое.

Тогда приду домой и попробую в книгах, которые мне порекомендовали здесь, найти поведение Chr, поскольку гугление ничего не дало.

> А ты попробуй.

Это я тоже попробую
Только затык с:

> С чего взял? У автора немаленькая из-за его стремления экономить
> на описаниях.
> А у тебя должно быть просто сцепление кусков.

Я имею ввиду все эти ассемблерные вставки и прочее.


 
Anatoly Podgoretsky ©   (2010-07-21 14:30) [272]

> Виталий  (21.07.2010 14:21:25)  [265]

Смею тебя огорчить, RAD не пишет программы под ДОС, а указаная программа
исключительно только под ДОС, на Виндоус она не нужна, да и замучаешься
использовать прерывания.


 
Anatoly Podgoretsky ©   (2010-07-21 14:31) [273]

> Виталий  (21.07.2010 14:22:27)  [267]

Нет CHR(Byte(256))


 
Виталий ©   (2010-07-21 14:32) [274]


> chr(256)=chr(0)

Понял. Чтобы получить равенство, нужно проводить AND с 255. Получая младшие биты, имеем равенство. Наверное, c unicode-символами и большими кодами будет как-то иначе, поскольку там может получаться 2 и более младших бит.


 
Anatoly Podgoretsky ©   (2010-07-21 14:33) [275]

> Виталий  (21.07.2010 14:28:31)  [271]

Хорошо, тогда почему ты так не поступил, да хотя бы справку посмотрел бы,
при том для старой Дельфи и для Дельфи 2009+


 
Виталий ©   (2010-07-21 14:34) [276]


> Смею тебя огорчить, RAD не пишет программы под ДОС

я догадался, но думаю, что какой-то способ написать подобное, считывая данные на низком уровне, должен быть и под Windows?


 
Sha ©   (2010-07-21 14:35) [277]

> Виталий ©   (21.07.10 14:21) [265]
> У меня RAD Studio 2010.

Тогда в этом коде используй
AnsiChr вместо Chr,
AnsiString вместо String.

> Я имею ввиду все эти ассемблерные вставки и прочее.

В функции GetUniLFN нету всех этих ассемблерные вставок и прочего.
Не хочешь писать - не морочь нам голову.
Но букварь все же лучше выучить наизусть.


 
Виталий ©   (2010-07-21 14:38) [278]


> Хорошо, тогда почему ты так не поступил, да хотя бы справку
> посмотрел бы

Нету сейчас под рукой. А гугль молчит.


 
Виталий ©   (2010-07-21 14:39) [279]


> Не хочешь писать - не морочь нам голову.

Если бы я не хотел писать и понимать, я бы не спрашивал все это. Я вижу, что в функции нету ассемблерных вставок. Но она - не вещь в себе. И ее надо будет откуда-то вызвать. А вызывается она у автора именно после всех подобных свистоплясок.


 
Sha ©   (2010-07-21 14:44) [280]

> И ее надо будет откуда-то вызвать.

Это просто учебный пример.
Напишешь подыгрывающую программу.



Страницы: 1 2 3 4 5 6 7 8 9 
10 11 12 вся ветка

Форум: "Прочее";
Текущий архив: 2010.11.07;
Скачать: [xml.tar.bz2];

Наверх





Память: 1.07 MB
Время: 0.08 c
15-1280158011
AKE
2010-07-26 19:26
2010.11.07
Скажите это развод??


15-1280041741
Loginov Dmitry
2010-07-25 11:09
2010.11.07
Пишем свой wysiwyg HTML-редактор


8-1180443656
borodaj
2007-05-29 17:00
2010.11.07
еще вопрос по изображениям )


2-1281722016
Дмитрий Стариков
2010-08-13 21:53
2010.11.07
Снова за помощью


2-1281499635
6ruse
2010-08-11 08:07
2010.11.07
Помогите с полем





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский