Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: программирование на языке Assembler


Информационный Канал Subscribe.Ru

RusFAQ.ru: программирование на языке Assembler

Выпуск № 366
от 13.09.2002, 23:00

Администратор:
Имя: Калашников О.А.
URL: Информационный ресурс
ICQ: 68951340
Россия, Москва
О рассылке:
Задано вопросов: 1236
Отправлено ответов: 3840
Активность: 310.6 %
[Задать вопрос >>][Регистрация эксперта >>]
[Поиск в базе][Обсудить на форуме]


От Администратора



Обновлены форумы! Добавлены фильтры, изменен дизайн, учтены ваши пожелания... Осталось сделать поддержку cookies.
Благодарю всех за помощь! Отдельное спасибо DivX.


Калашников О.А. (admin@rusfaq.ru)


 Список экспертов, ответы которых опубликованы в данном выпуске

SonicX
Статус: Доверительный
Общий рейтинг: 124.4
[Подробней >>]
Dark_Lord
Статус: Профессиональный
Общий рейтинг: 137.45
[Подробней >>]
ARDoS
Статус: Доверительный
Общий рейтинг: 106.29
[Подробней >>]
 
LIFO
Статус: Опытный
Общий рейтинг: 135.66
Телефон: 8 01710 24758
[Подробней >>]
masquer
Статус: Профессиональный
Общий рейтинг: 157.57
[Подробней >>]
Broken Sword
Статус: Профессиональный
Общий рейтинг: 134.91
URL: моя рассылка по Protected Mode
[Подробней >>]
 
Ayl
Статус: Профессиональный
Общий рейтинг: 119.66
[Подробней >>]
GL
Статус: Опытный
Общий рейтинг: 105.43
[Подробней >>]
Топор
Статус: Профессиональный
Общий рейтинг: 117.78
URL: Хорошая Русская Металлическая команда
Телефон: (8462)500298
[Подробней >>]
 
kvINT
Статус: Профессиональный
Общий рейтинг: 111.66
Телефон: (34316)2-31-45
[Подробней >>]
Igoryk
Статус: Опытный
Общий рейтинг: 112.33
URL: В помощь программисту
[Подробней >>]
Portnov
Статус: Профессиональный
Общий рейтинг: 122.14
URL: Мой сайтик...
[Подробней >>]
 
ASMодей
Статус: Опытный
Общий рейтинг: 124.31
[Подробней >>]
Dron
Статус: Профессиональный
Общий рейтинг: 120.52
URL: Операционная система с нуля!
[Подробней >>]
Sinner
Статус: Доверительный
Общий рейтинг: 106.48
[Подробней >>]
 
Pablo
Статус: Профессиональный
Общий рейтинг: 130.37
URL: Моя страничка
[Подробней >>]


 Краткий перечень вопросов

Вопрос № 1202. Здравствуйте уважаемые эксперты и читатели. Хочу заняться программированием под WINDы на ASMе,но ни... (ответов: 5)
Вопрос № 1203. Здравствуйте, уважаемые эксперты! Как бы защитить свою программу от взлома? Возможно, такие вопросы... (ответов: 3)
Вопрос № 1204. Можно ли в текстовом режиме подключить свой знакогенератор(новый набор символов) и выводить их на эк... (ответов: 3)
Вопрос № 1205. Приветствую Вас уважаемые эксперты! Извиняюсь если вопрос задан не коректно. Я не однократно слышал ... (ответов: 9)
Вопрос № 1206. Всем доброго вечера! Столкнулся тут с такой проблемкой. Подозреваю, что винда виновата. В общем, реш... (ответов: 4)
Вопрос № 1208. Привет всем! Кто-нибудь знает где можно скачать хорошую книгу по радиоэлектронике для начинающих. За... (ответов: 2)
Вопрос № 1209. Уважаемые эхсперты поможите кто чем может... Вот уже два часа сижу никак не могу взять в толк: ЧТО О... (ответов: 4)
Вопрос № 1210. Доброе время суток, уважаемые эксперты! Имеется несколько вопросов. 1. В книжке "Assembler учеб... (ответов: 6)
Вопрос № 1211. Дико извиняюсь за предыдущий вопрос (про элементы каталога), с "почему меняем местами только в ... (ответов: 3)

Вопросов: 9, ответов: 39


 Вопрос № 1202

Здравствуйте уважаемые эксперты и читатели.
Хочу заняться программированием под WINDы на ASMе,но никак немогу найти хорошей лит-ры по работе с памятью(на русском).
Если у кого есьт вышлите мне пожалуйсто хоть что нибудь.И если есть что то в печатном издании подскажите как называется.
Обьясните мне пожалуйсто,как написать резидентную программу
естественно под windы какие api для этого предназначены,и как мне отследить всякого рода события происходящие в текущей задаче(обращение к диску,чтение/запись в файл и т.д.)
За раннее благодарен WIX.



Вопрос отправлен: 09.09.2002, 02:12
Отправитель: WIX (rasdr@mail.ru)

[Следующий вопрос >>] [Список вопросов]

Отвечает SonicX

Доброе время суток, WIX!
Подпишись на рассылку Subscribe.ru
"Ассембер?Это просто!Учимся программировать"


Ответ отправлен: 09.09.2002, 20:33
Отправитель: SonicX


Отвечает Dark_Lord

Здравствуйте, WIX!
Зайдите на www.subscribe.ru, там есть много рассылок на эту тему. Могу порекомендовать ту, которую пишу, "Ассемблер? Это просто! Учимся программировать!", она только начинается!

Ответ отправлен: 09.09.2002, 18:27
Отправитель: Dark_Lord


Отвечает ARDoS

Добрый день, WIX!
Скачай туториалы Iszeliona там всё хорошо раписано про винды,про VxD, про хуки и прочее, но всё под МАСМ.

Ответ отправлен: 11.09.2002, 13:46
Отправитель: ARDoS


Отвечает LIFO

Доброе время суток, WIX!
Зайди на wasm.ru, скачай список API и еще ... купи книгу Рихтера.


Ответ отправлен: 11.09.2002, 09:24
Отправитель: LIFO


Отвечает masquer

Доброе время суток, WIX!
Ищи книгу Джеффри Рихтера, там есть все ответы на твои вопросы. В инете есть на английском, но лучше найти деньги и купить - выпускает Питерпресс.

Ответ отправлен: 09.09.2002, 07:53
Отправитель: masquer


 Вопрос № 1203

Здравствуйте, уважаемые эксперты! Как бы защитить свою программу от взлома?
Возможно, такие вопросы уже задавались ранее, поэтому приношу свой извинения - у меня проблема вот в чем: накодил одну WinAPI-шную программку, да нужно встроить в нее защиту от взлома, вернее несколько видов защит :) Сломать можно любую программу, но хотя бы можно попортить кровь взломщику. Как встроить защиту от пошаговой отладки в Win32 приложения? И вообще, любой вид защиты под Win. Полезен был бы любой пример, благо АСМовые вставки под Delphi можны.



Вопрос отправлен: 09.09.2002, 03:23
Отправитель: Rasa (rasa@fromru.com)

[Следующий вопрос >>] [Список вопросов]

Отвечает SonicX

Здравствуйте, Rasa!
Шифруй тело программы.
Но пошаговый дизасм расшифрует,
а ты попробуй вот этот код:
...
in al,40h
mov bl,al
in al,40h
cmp al,bl
je exit
Decrypt:
....
Program:
...
Exit:
int 20h
Дело в том что регистр не возвратит два
раза одно и тоже значение и интерактивный дизасм выйдет из программы.


Ответ отправлен: 09.09.2002, 20:33
Отправитель: SonicX


Отвечает Broken Sword

Приветствую Вас, Rasa!
Не знаю как другим, но мне больше всего действует на нервы когда прога ЗАПАКОВАНА, причем хуже всего, когда не стандартным паковщиком (типа ASPack, Armadila и т.п.) - тут уже все изучено, а своим собственным, "авторским". Вот тут больше всего портят кровь всякие антиотладочные хитрости (для SI в основном), типа SEH, мутки с кэшем (эти вообще просто добивают), и т.п. А вообще, как сказал великий Masquer: "Если будет что ломать - взломают"! :), т.ч. я на твоем месте поработал бы именно над тем, что будут ломать :).

Ответ отправлен: 09.09.2002, 09:38
Отправитель: Broken Sword


Отвечает masquer

Доброе время суток, Rasa!
См. функцию IsDebuggerPresent, правда, в 95 ее еще не было. А вообще - не заморачивайся - нужно будет - все равно сломают. Делай демо - на сегодняшний день самый надежный вид защиты

Ответ отправлен: 09.09.2002, 07:56
Отправитель: masquer


 Вопрос № 1204

Можно ли в текстовом режиме подключить свой знакогенератор(новый набор символов) и выводить их на экран?Если можно, покажите небольшой пример.
Спасибо.



Вопрос отправлен: 09.09.2002, 07:38
Отправитель: BOH (stimul_s@itech.ru)

[Следующий вопрос >>] [Список вопросов]

Отвечает Dark_Lord

Доброе время суток, BOH!
Елементарно! Функция BIOS 11h прерывания 10h

Ответ отправлен: 09.09.2002, 18:17
Отправитель: Dark_Lord


Отвечает Ayl

Добрый день, BOH!
Для адаптеров CGA и MDA - нет.
Для остальных можно переопределить.
Примера у меня нет, а писать - времени тоже нет.
Попробуй сам.
Во-первых, есть функция 11h прерывания 10h для работы со знакогенератором.
Во-вторых, можно посмотреть книжки (старые), например, В.П.Григорьев "Видеосистемы ПК фирмы IBM" или Р.Уилтон "Видеосистемы персональных компьютеров IBM PC и PS/2". Это те, которыми я пользуюсь. Правда, где их сейчас найти, только в библиотеке, может быть...


Ответ отправлен: 09.09.2002, 11:34
Отправитель: Ayl


Отвечает GL

Доброе время суток, BOH!
Да, можно. Пример в приложении (для символов 8х16). В примере отображены для краткости коды только двух символов.

Приложение:

Ответ отправлен: 09.09.2002, 14:22
Отправитель: GL


 Вопрос № 1205

Приветствую Вас уважаемые эксперты!
Извиняюсь если вопрос задан не коректно. Я не однократно слышал следущую фразу типа в ???? кольце ядра и др. Хотелось бы получить доходчивое обьяснение, что такое кольца ядра.
Заранне благодарю всех кто откликнется!



Вопрос отправлен: 09.09.2002, 08:22
Отправитель: Yuran (yuran@male.ru)

[Следующий вопрос >>] [Список вопросов]

Отвечает Топор

Добрый день, Yuran!
В защищённом режиме процессора Intel предусмотрено 4 уровня доступа к памяти (кольца): 0 - высший, 3 - низший. Windos при своей инициализации устанавливает, кому какой уровень положен. Само собой, области памяти для своего ядра и *.vxd она присваивает уровень 0, для приложений и DLL отводится область с уровнем 3. Программа может производить операции с кодом и данными только в своём уровне и ниже, потому и называется режим защищённым.


Ответ отправлен: 09.09.2002, 17:28
Отправитель: Топор


Отвечает masquer

Доброе время суток, Yuran!
Кольцо ядра? Наверное речь идет об уровнях привелигированности - тогда ring0 - уровень ядра ОС, драйверов, ring3 - пользовательский код.
Подробно в интеловских мануалах можно почитать

Ответ отправлен: 09.09.2002, 08:48
Отправитель: masquer


Отвечает Ayl

Приветствую Вас, Yuran!
В зашищенном режиме есть 4 уровня доступа к сегменту - от 0 до 3. К сегменту, имеющим уровень защиты r может обращаться программа, имеющая уровень p <= r.
Соответственно, всю память можно представить разбитой на 4 кольца. Каждое кольцо будет иметь номер от 0 до 3, номера увеличиваются от центра наружу.
Ядро операционной системы, драйвера и т.п. располагаются в кольце 0. Пользовательские программы - в кольце 3.

Ответ отправлен: 09.09.2002, 11:17
Отправитель: Ayl


Отвечает kvINT

Здравствуйте, Yuran!
Это уровни привилегий (флаг IOPL). Соответственно, чем меньше значение этого флага, тем более привилегий получает программа. Ядро системы работает в нулевом кольце (max уровень привилегий), приложения - в 3-ем кольце (min уровень привилегий). Т.е. приложения не могут, например, непосредственно обращаться к портам ввода-вывода и др. Просто имеется некая диаграмма, где эти уровни изображаются концентрическими кольцами (ядро, естественно, в центре), отсюда и пошло название.

Ответ отправлен: 09.09.2002, 13:41
Отправитель: kvINT


Отвечает Igoryk

Доброе время суток, Yuran!
Иногда под кольцом ядра подразумевают уровень привелегий программы, т.е. 0 кольцо - 0-вой уровень привелегий и т.д.

Ответ отправлен: 09.09.2002, 14:11
Отправитель: Igoryk


Отвечает Portnov

Здравствуйте, Yuran!
Надеюсь, наиболее доходчиво BrokenSword объяснит, см. также его рассылку, через энное количество выпусков там это должно быть. А если просто: есть четыре кольца защиты, от 0 до 3. 0-е соответствует наиболее высокому уровню привилегий, 3-е - наиболее низкому. Из-за всяких тонкостей кольца 1 и 2 обычно не используются (в винде, AFAIK, вообще никогда). В третьем кольце запускаются все программы пользователя, т.е. обычные программы. В нулевом работает ядро оси и наиболее приближенные к нему программы (драйвера etc). Ну, например, простая программа (3-е кольцо) может оказаться не в состоянии даже прочитать (в RAM!) данные, принадлежащие ядру или драйверу (0-е кольцо), а ядро может делать все что хочет с обычными программами.
С уважением, Portnov.

Ответ отправлен: 09.09.2002, 14:11
Отправитель: Portnov


Отвечает Broken Sword

Здравствуйте, Yuran!
кольца, уровни привилегий - эта система разграничения доступа. Т.е. грубо говоря - если у тебя нулевой уровень привилегий - то ты самый крутой в системе. ОС - это и есть код, к-рый выполняется на нулевом уровне привилегий (или как их называет микрософт - на нулевом кольце). Дальше по нарастающей - до третьего. Третий уровень самый отстойный, по сути с таким уровнем привилегий в системе ты никто, все с тобой творят чего хотят. А вообще если ты этим интересуешься в серьез, то подпишись на мою рассылку здесь
http://subscribe.ru/catalog/comp.soft.prog.intelpm
скоро начнуться выпуски посвященные механизму защиты в защищенном режиме, а это и есть самое оно.

Ответ отправлен: 09.09.2002, 15:51
Отправитель: Broken Sword


Отвечает ASMодей

Приветствую Вас, Yuran!
Вообще выражение "кольцо ядра", не совсем корректно.
Правильнее будет сказать кольцо защиты микропроцессора.
Это кольцо защиты есть ни что иное как уровень привилегий,
который имеют программы при выполнении.
Нулевое кольцо защиты - это кольцо с наивысшими
привилегиями при выполнении кода программы. В этом кольце
обычно работает ядро операционной системы и некоторые
драйверы.
Третье кольцо защиты - это кольцо с наименьшими привилегиями.
В этом кольце обычно работают программы пользователя.
Промежуточные кольца защиты могут и не использоваться.
Подробнее (и понятнее ;) о кольцах защиты можно прочитать
в книге Зубкова "Ассемблер для DOS, Windows и UNIX"


Ответ отправлен: 10.09.2002, 08:24
Отправитель: ASMодей


Отвечает Dron

Здравствуйте, Yuran!
Для того чтобы это понять - лучше всего взять книгу по процессору и почитать...
не кольца ядра а кольца защиты, и то кольцами они называются чисто условно, на самом деле это просто уровни привелегий.
Это как в нашей стране, уровень секретности.
третий уровень - почти ничего не знаешь...
первый уровень - знаешь и можешь многое, но за границу 10 лет не можешь выехать после окончания работы... :)

Ответ отправлен: 13.09.2002, 12:12
Отправитель: Dron


 Вопрос № 1206

Всем доброго вечера!
Столкнулся тут с такой проблемкой. Подозреваю, что винда виновата.
В общем, решил тут написать для Паскаля (Borland Pascal 7.0 for DOS) модулек для работы с клавой. Есс-но, на асме.
В общем, смысл в следующем.
В асме определяю циклический буфер (словный) и 2 указателя (в общем, как в BIOS'овском буфере клавиатуры).
Соответственно, написал процедуры/функции работы с этим буфером.
И самое главное, написал обработчик прерывания таймера для того, чтобы в нем проверялось, что в BIOS'овском б.к. есть символ, забирался оттуда, преобразовывался как мне надо и складывался в мой буфер.
Написал.
Сделал TPU. Написал тестовую прогу. Запускаю - работает. Еще раз - работает. Еще раз - вываливает виндовое сообщение типа или попытка выполнить некорректную инструкцию, или общая ощибка защиты, или еще какой-нибудь бред.
Причем постоянно по разным адресам, то в сегменте c800h, то в f000h, то в 0036h. Это то, что я записал.
Причем когда я пытался перехватить прерывание 8, то прога вылетала сразу же на команде jmp xxxx:yyyy (вызов старого обработчика). Сейчас работает на 1ch.
Прерывание перехватываю через int21h (fn. 25h/35h). ОС - Windows ME. Запускал из-под FAR Manager и из командной строки DOS.
Из командной строки работает стабильнее, но иногда все равно вываливается.
В чем дело?



Вопрос отправлен: 09.09.2002, 17:52
Отправитель: Ayl (ayl@kot.spb.ru)

[Следующий вопрос >>] [Список вопросов]

Отвечает SonicX

Здравствуйте, Ayl!
Этот вопрос отправь экспертам по Виндам и Паскалю.

Ответ отправлен: 09.09.2002, 20:34
Отправитель: SonicX


Отвечает LIFO

Доброе время суток, Ayl!
Исходник бы хоть дал, а то написал тут, что черт ногу сломит:)


Ответ отправлен: 11.09.2002, 09:24
Отправитель: LIFO


Отвечает ASMодей

Доброе время суток, Ayl!
Говорить об ошибке программы для DOS можно только
протестировав ее работу именно под DOS, а не под
эмуляторами, каковыми являются все версии Windows.


Ответ отправлен: 10.09.2002, 08:25
Отправитель: ASMодей


Отвечает Топор

Добрый день, Ayl!
Если пишешь для линковки к паскалевой проге, надо сохранять и восстанавливать ВСЕ регистры общего назначения и очень желательно все используемые сегментные для данных. Прерывания лучше хукать прямой писаниной в память.


Ответ отправлен: 10.09.2002, 16:46
Отправитель: Топор


 Вопрос № 1208

Привет всем! Кто-нибудь знает где можно скачать хорошую книгу по радиоэлектронике для начинающих. Заранее благодарен.



Вопрос отправлен: 09.09.2002, 20:02
Отправитель: Boss (kondratev@mail.kz)

[Следующий вопрос >>] [Список вопросов]

Отвечает SonicX

Доброе время суток, Boss!
Отправь это вопрос в группу "Железо".

Ответ отправлен: 09.09.2002, 20:35
Отправитель: SonicX


Отвечает ASMодей

Здравствуйте, Boss!
На сайте books.org.ua есть куча книг по разным темам,
посмотри, может и найдешь.
PS. Вообще-то радиоэлектроника и ассемблер это несколько
разные вещи. Ближе к радиоэлектронике будет рассылка
по железу.


Ответ отправлен: 10.09.2002, 08:26
Отправитель: ASMодей


 Вопрос № 1209

Уважаемые эхсперты поможите кто чем может... Вот уже два часа сижу никак не могу взять в толк: ЧТО ОБОЗНАЧАЮТ слова по смещениям 14h и 1Ah в структуре элемента каталога (FAT32). В умной книге написано, что это старшее и младшее слова первого кластера файла. Так? Ну вот, значит беру я утилиту WinHex (с помощью которой можно лазить по секторам винта как у себя дома и смотреть все в УДОБНОЙ и наглядной форме, всем рекомендую) и нахожу в корневом каталоге допустим какой то файл. Так вот, в соотв. полях стоят значения: по смещению 14h: 10h 00h и по смещению 1Ah: 25h 00h. Вроде все хорошо. Значит получается, СТАРШЕЕ СЛОВО - 0010h, а младшее - 0025h. Так? Следовательно если собрать все до кучи выходит число 1025h (4133 dec). Смотрю что находится в данном кластере - муть какая-то (не файл). Открываю WinHex на Root-е в режиме Template (он выводит справку по всем полям). Смотрю и вижу: старшее слово - 16, младшее - 37. Это десятичные значения. Все как и у меня. А теперь ниже в WinHex-е вижу загадочную строку: 32-bit cluster # 1048613. Смотрю по этому кластеру - пошел мой файл! Вопрос: каким макаром получается это значение??? Дело в том, что 1048613 (десятичное) получится только в том случае, если поменять местами байты ТОЛЬКО В СТАРШЕМ СЛОВЕ (т.е. 100025h действительно будет равно 1048613). По какому такому праву? Вообще этот трюк (поменять байты только в старшем слове) был разгадан совершенно случайно... Так что проверьте плз - у кого такая же лажа?
p.s. теперь я окончательно нихрена не понимаю: при чем здесь вообще таблица FAT? Ведь по идее те два слова (по смещениям 14h и 1Ah) должны содержать НОМЕР ЭЛЕМЕНТА в таблице FAT, а на деле получается что они указывают НА НАЧАЛО САМОГО ФАЙЛА! Что то я запутался, раздуплите плз.
p.s. как вам нравится такое (вырезка из книги): "...номер первого кластера файла (и точка входа в таблицу FAT) в структуре элемента каталога задаются полями ..." :) Ну разве это не звучит как бред?
Если вы уже забыли вопрос то повторю: :) ПО КАКОМУ ТАКОМУ ПРАВУ МЕНЯТЬ БАЙТЫ НУЖНО ТОЛЬКО В СТАРШЕМ СЛОВЕ?



Вопрос отправлен: 09.09.2002, 21:59
Отправитель: FAT32

[Следующий вопрос >>] [Список вопросов]

Отвечает Ayl

Доброе время суток, FAT32!
Ну, батенька, вы действительно запутались!
По поводу номера первого кластера. Нам нужно из двух слов по указанным адресам составить двойное слово. В чем проблема? Первое (старшее) слово равно 0010h. Записываем его на листочке. Берем второе (младшее) слово. 0025h. Приписываем его ПОЛНОСТЬЮ, как есть, со всеми впереди идущими нулями (!), справа к старшему. Что получаем? Правильно, 00100025h. Ничего не напоминает?
Теперь по поводу первого кластера и цепочек FAT. Двойное слово из записи каталога несет в себе 2 вещи:
- указывает первый кластер файла. Сразу же, без обращения к таблице FAT.
- является индексом в таблице FAT для нахождения 2-го кластера файла. Соответственно, номер второго кластера будет индексом для поиска 3-его и т.д. До достижения значения, обозначающего конец файла.
Поэтому в книжке все правильно написано. И как бред совсем не звучит, потому что так и есть на самом деле.

Ответ отправлен: 10.09.2002, 12:56
Отправитель: Ayl


Отвечает Portnov

Добрый день, FAT32!
Да, запутались вы сильно. Будем распутывать.
1. Вот смотрите: в поле "старшее слово" - 10h,00h, в поле "младшее слово" - 25h,00h. А всего, стало быть. должно быть двойное слово. Собираем его: старшее слово - 0010h, младшее - 0025h, всего (приписываем младшее после старшего) - 00100025h (а не 1025h!). Это и есть 1048613 (dec)! Как видите, мы все байты переставили. Вы просто подумали, что нули в начале 0025h незначащие, но это ведь не начало, а середина двойного слова!
2. "точка входа в FAT", или, что то же самое, номер элемента FAT - это и есть номер первого кластера!
Вот смотрите. Помните, как FAT устроена? Имеется n записей, где n - количество кластеров. Каждому кластеру сопоставлена запись c тем же номером, что и у кластера. Запись содержит номер следующего кластера в цепочке (цепочка кластеров - это последовательность кластеров, занятых одним файлом); если данный кластер последний в цепочке, то в записи FAT будет какое-то специальное значение (ноль, по-моему... Не суть важно какое, важно, что всегда можно понять, последний это кластер в цепочке или нет). Еще не прояснилось? Эти самые старшее и младшее слова содержат номер первого кластера в цепочке, он же - номер элемента в FAT, который этому первому в цепочке кластеру соответствует. А по записи в FAT под этим номером легко увидеть номер следующего кластера, а там - следующего, и вот мы найдем все кластеры, принадлежащие файлу, в нужной последовательности. Еще раз: номер элемента в FAT - это и есть номер первого кластера файла!
PS. Так что в книжке все правильно написано...
С уважением, Portnov.

Ответ отправлен: 10.09.2002, 10:14
Отправитель: Portnov


Отвечает Dron

Добрый день, FAT32!
Ох-ох-ох
Если старшее слово равно 0010, а младшее слово равно 0025, то получаемое двойное слово без всяких там переворотов равно 00100025...
А что там и куда указывает, это я без доки тебе конечно не скажу... логично предположить что действительно номер первого кластера.
я так понял эта шняга у тебя в Directory Entry...

Ответ отправлен: 10.09.2002, 11:52
Отправитель: Dron


Отвечает Sinner

Приветствую Вас, FAT32!
Поздравляю! Кто ищет проблемы, тот их обязательно находит!
Посмотри повнимательнее и подумай, - правильно ли ты составил двойное слово?
0010h и 0025h => 00100025h == 1048613d (не так ли?)

Ответ отправлен: 10.09.2002, 04:52
Отправитель: Sinner


 Вопрос № 1210

Доброе время суток, уважаемые эксперты!
Имеется несколько вопросов.
1. В книжке "Assembler учебный курс" Юров, Хорошенко сказано, что можно
использовать сегменты размером не более 64КБ. В то же время, сказано, что
можно использовать 32-разрядное смещение и адресовать до 4ГБ. Можно ли в
32-разрядной Windows (XP) в реальном режиме работать с сегментами, большими
64Кб? Например, загрузить из файла или передать из другой программы массив
в сегмент данных размером 100МБ, обработать его и выгрузить опять в файл?
2. Скажите, пожалуйста, как загружать в оперативную память и сохранять на
HD файлы средствами TASM?
3. Пакет TASM является платным или бесплатным? Есть ли сайт Borland,
посвященный этому пакету, на котором можно взять какие-то обновления,
исправления или новую версию пакета? Вообще, какая версия этого пакета
самая новая?
4. В выше упомянутой книге приведены примеры программ. Я пробовал создавать
exe-файлы этих программ утилитами tasm32 и tlink32. При создании объектного
файла никаких ошибок или замечаний нет, а при компоновке выдается
сообщение:
Fotal: 16 bit segments not supported in module prg.asm
Если использовать tasmx и tlink (для 16-разрядных Windows), получаю
exe-файл, но отладчик для 16-разрядных окошек (TDW) утверждает, что это не
Windows приложение. У меня WinXP, TASM5.0. В чем проблема и как создавать
32- и 16- битные приложения для 32-разрядных Windows при помощи TASM?



Вопрос отправлен: 09.09.2002, 22:15
Отправитель: Sergey

[Следующий вопрос >>] [Список вопросов]

Отвечает masquer

Доброе время суток, Sergey!
1. Нашел, кого читать, плюс там все под дос. А под виндой - да сколько угодно - Memory Mapped Files.
2. Смотри функции 21 прерывания дос - а не средствами тасм.
3. Бесплатный, давно не выпускается, не поддерживается и не обновляется. Кажется, 5-я версия последняя, хотя могу ошибиться здесь.
4. Используй use32 или use16. Для виндов лучше масм используй.

Ответ отправлен: 10.09.2002, 10:19
Отправитель: masquer


Отвечает Portnov

Добрый день, Sergey!
1. Windows, тем паче XP, не может (в принципе) работать в реальном режиме. Это во-первых. Во-вторых. В реальном режиме сегмент не может быть больше 64Кб - это напрямую связано с архитектурой процессора. В то же время, если вы работаете в Windows, то вы автоматически работаете в защищенном режиме, так что можно работать с сегментами до 4Гб.
2. Ну, во-первых, "средств Tasm для работы с винтом" нет вообще, т.к. Tasm - это только ассемблер. Для этого есть средства: а) самого винта - можно чего-то там мудрить с портами (in, out..); б)BIOS - Int13h, Int25/26h, но работает только в реальном режиме; в)конкретной операционки - у Дос это Int21h, AH=39h..40h, у Windows - ф-ции API CreateFile(), OpenFile(), и др.
3. Последняя версия, AFAIK - 5.01. Про обновления не знаю.
4. Программы Tasm, Tlink создают, AFAIK, не Windows, а DOS приложения. Как создавать 16-bit Windows приложения - я не знаю, но это, IMHO, никому не нужно, т.к. все распространенные версии Windows (9x-NT4-2k-Me) - 32-хразрядные. А для создания 32-bit Windows приложений используйте Tasm32,Tlink32. Насчет той ошибки, которую линкер выдает - правильно ругается, пишите 32-х битные сегменты, Tlink32 других не понимает.
С уважением, Portnov.

Ответ отправлен: 10.09.2002, 10:33
Отправитель: Portnov


Отвечает Dark_Lord

Приветствую Вас, Sergey!
В windows можно занять хоть 4 Гб, но в Досе, даже в его эмуляции в Windows, макс размер сегмента 64к, 65536 байт!

Ответ отправлен: 10.09.2002, 19:08
Отправитель: Dark_Lord


Отвечает ASMодей

Здравствуйте, Sergey!
Для начала нужно определиться, что программы можно писать
для DOS, а можно - для Windows. И те и другие программы
можно будет запускать под Windows, но они отличаются друг
от друга по внутреннему устройству.
Теперь можно приступить к ответам:
1. В реальном режиме процессора можно использовать сегменты
размером не более 64Кб. В защищенном режиме можно
адресовать до 4Гб. Windows запускает DOS-приложения в
реальном режиме (ну почти в реальном), а Win32-приложения -
в защищенном режиме, следовательно в первом случае можно
адресовать до 64Кб, а во втором - до 4Гб.
2. TASM - это всего лишь компилятор языка Ассемблер и
требовать от него каких-то средств для работы с файлами
все равно, что попросить Photoshop отформатировать диск.
3. Платный TASM или бесплатный я сказать не могу, так как
прочитав документацию к нему не нашел ни одного упоминания
о цене. Хотя возможно народные умельцы все это убрали ;)
Самая новая версия, по-моему это 5.3.
4. Для компиляции DOS-программ следует использовать
TASM32.EXE + TLINK.EXE.
Для компиляции Win32-программ: TASM32.EXE + TLINK32.EXE.


Ответ отправлен: 10.09.2002, 08:27
Отправитель: ASMодей


Отвечает Топор

Здравствуйте, Sergey!
1. Там не реальный режим, а виртуальный 86. Поэтому есть ограничения. Непосредственно в сегмент данных грузить нельзя, можно за концом файла, но по любому не более 1 Мб.
2. Не средствами TASM, а средствами ОС, используемыми через TASM. Литературы масса.
3. Вообще-то платный, на сайте Борланда его продают за $128, но купить CD на рынке рублей за 50-60 обычно нет проблем.
4. В проге под Win32 не забывай в начале ставить директиву .386 (в режиме masm) или p386 (ideal), а в описании сегментов писать use32.


Ответ отправлен: 10.09.2002, 16:38
Отправитель: Топор


Отвечает Pablo

Добрый день, Sergey!
1. В Виндах начиная с Win95 да и даже с Win32 сегменты как таковые отсутствуют и каждому процессу доступно 2Гбайта памяти (остальные 2Гбайта для системных нужд). Так ты можешь себе забубенить массив любой длиной в пределах всего свободного пространства для твоего процесса.
2. Загружать и записывать файлы можно функциями, которые предлагает Винды: CreateFile, OpenFile, ReadFile, WriteFile, CloseFile.
3. Вообще АФАЙК он платный, правда если купить какойнить продукт от Борланда, например, C++ или C++Builder, то в данном случае он бесплатный.
4. Такая ошибка выдается потому как ты пытаешься создать в 32-е приложение с использованием 16-битных сегментов, да и вообще ИМХО tasm32 и tlink32 могут только 32-битные приложения создавать.

Ответ отправлен: 11.09.2002, 16:17
Отправитель: Pablo


 Вопрос № 1211

Дико извиняюсь за предыдущий вопрос (про элементы каталога), с "почему меняем местами только в старшем слове" я уже раздуплился...
Но второй вопрос все же остается: если в элементе каталога содержится кластер с которого НАЧИНАЕТСЯ ФАЙЛ, то при чем здесь вообще фат? нет, понятно, что один кусок файла может быть вначале диска другой в конце, и именно для этого он и нужен, но непонятно КАК ОС определяет где именно в ФАТ-е "начинается" файл... Да еще и фраза из умной книги: "... в каталоге файлов для каждого файла приводится номер начального элемента в таблице FAT, соотвтествующий первому кластеру файла". ГДЕ ОНО СПРАШИВАЕТСЯ???? ЭТОТ НОМЕР ДЛЯ КАЖДОГО ФАЙЛА??????



Вопрос отправлен: 09.09.2002, 22:24
Отправитель: FAT32

[Следующий вопрос >>] [Список вопросов]

Отвечает Ayl

Добрый день, FAT32!
Ну, смотри на примере.
Пусть у нас есть такая таблица FAT (первая строка - индексы, первые два элемента FAT не используются, конец цепочки обозначим как '$'):
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
$, $, 3, 4, 7, 6, 12, $, 10, $, 9, $, 15, $, 13, 14
Вот такая маленькая FAT.
И каталог (в скобках - номер первого кластера):
FILE1 (2)
FILE2 (11)
FILE3 (5)
FILE4 (8)
Как нам найти все кластера файла FILE1? Берем номер первого кластера. Это 2. Лезем в таблицу FAT и берем оттуда 2-й элемент (Нумерация, как обычно, с 0). FAT [2] = 3. Значит, следующий кластер, распределенный файлу, будет 3. Смотрим дальше. FAT [3] = 4. FAT [4] = 7. FAT [7] = $. Ура! Достигли конца цепочки! Значит, FILE1 записан в кластерах 2, 3, 4 и 7.
Теперь смотрим FILE2. Первый кластер равен 11. FAT [11] = $, то есть файл занимает только один 11-й кластер.
Берем FILE3. Первый кластер равен 5. FAT [5] = 6. FAT [6] = 12. FAT [12] = 15. FAT [15] = 14. FAT [14] = 13. FAT [13] = $. Значит, FILE3 = (5, 6, 12, 15, 14, 13 - именно в таком порядке!).
Ну, с FILE4 ты теперь должен справиться и сам. Его цепочка получается (8, 10, 9).


Ответ отправлен: 10.09.2002, 13:19
Отправитель: Ayl


Отвечает Dron

Доброе время суток, FAT32!
Не понял что тебя смущает...
в таблице FAT задается лишь порядок следования кластеров...
а к кому они относятся - по таблице этого не определить.
для этого берется запись в директории, оттуда берется номер первого кластера, и пошли по цепочке кластеров до тех пор, пока цепочка не кончится.

Ответ отправлен: 10.09.2002, 11:55
Отправитель: Dron


Отвечает Топор

Здравствуйте, FAT32!
Если я правильно понял вопрос, то:
Элементы FAT оформлены в виде связанного списка, т.е. в каждом элементе FAT есть указатель на следующий элемент, либо признак конца файла. В каждом элементе - адрес кластера. Отсюда следует, что достаточно знать лишь начало.


Ответ отправлен: 10.09.2002, 15:39
Отправитель: Топор



Форма отправки вопроса

Внимание!
Форма может работать некорректно в почтовых программах "Microsoft Outlook" и "Microsoft Outlook Express". В программе The Bat! подобные формы не работают вообще!
После нажатия на кнопку "Отправить", будет открыто второе окно. Заметьте, что в некоторых браузерах могут стоять запреты на открытие других окон, а также "чрезмерное" кэширование данных, при этом факт отправки Вашего вопроса стоит под сомнением.
Мы рекомендуем открывать рассылку в программе Internet Explorer 5.0+ или отправлять вопросы с сайта по адресу: http://rusfaq.ru/cgi-bin/Message.cgi.

© 2002 Команда RusFAQ.ru.

 Персональные данные

Ваше имя:

Ваш e-mail:

Опубликовать мой e-mail в рассылке


 Вопрос и дополнение

Ваш вопрос:


Приложение (если необходимо):


Получить ответов:


 Выбор рассылки

Программисту
Assembler (42)
C / C++ (29)
Perl (9)
Delphi (14)
Pascal (25)
Basic / VBA (10)
Java / JavaScript (12)
PHP (8)
MySQL / MSSQL (10)
Пользователю
Windows 95/98/Me (40)
Windows NT/2000/XP (29)
"Железо" (37)
Поиск информации (13)
Администратору
Windows NT/2000/XP (14)
Linux / Unix (16)
Юристу
Гражданское право (10)
Семейное право (6)
Трудовое право (8)
КоАП (5)

Отправить вопрос всем экспертам выбранной рассылки.




be number one Яндекс цитирования

© 2002 Россия, Москва. Авторское право: RusFAQ.ru


http://subscribe.ru/
E-mail: ask@subscribe.ru
Отписаться
Убрать рекламу

В избранное