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

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


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

РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / Assembler

Выпуск № 131
от 09.05.2005, 11:30

Администратор:Калашников О.А.
В номере:Вопросов: 2, Ответов: 5


Вопрос № 20380: Добрый день. Как составлять структуру на ассемблере, наподибие как это делается на Си и Паскале? Нужно разработать следующую структуру: Класс Поля: Фамилия, имя, отчество, дата рождения, пол, успеваемость. Поле успеваемость должно вмещат...
Вопрос № 20399: Меня интересует DOSовская часть программы, работающей под окнами. Точнее: как можно её изменить, или убрать вообще, компилируя ехе’шник МАСМОМ версии 6.14 и используя линковщик 5.12. Я видел Windows прогу которая начинается так: «MZfarbrauschPE». Что...

Вопрос № 20380
Добрый день. Как составлять структуру на ассемблере, наподибие как это делается на Си и Паскале?
Нужно разработать следующую структуру: Класс
Поля: Фамилия, имя, отчество, дата рождения, пол, успеваемость.
Поле успеваемость должно вмещать данные по предметам: Физика, Математика, Ботаника.
Составить программу, позволяющую запмсывать данную структуру в файл и считывать их из файла. В программе необходимо реализовать функцию выбора диска и каталога для записи файла в среде МС-ДОС.
Отправлен: 03.05.2005, 16:16
Вопрос задал: MMM72 (статус: Посетитель)
Всего ответов отправлено: 2

Отвечает: Стас
Здравствуйте, MMM72!
Опять же, раз никто...
В ассемблере в принципе нафиг не нужно описывать структуру. Читаешь ннадцать байт, и знаешь что первые 30 (например) фамилия, следующие 20 имя и так далее...
Ну а если все таки нужно то (для MASM):
Class struc
family db 30 dub (0)
name db 20 dub (0)
surname db 15 dub (0)
birthday dd ?
Class ends
Так вроде...

;=========
не согласен с тобой, Стас.
структуры очень полезнейшая вещь в программировании.
и в Ассемблере тоже.
она позволяет уйти в абстракцию..
не думать о числах.
а только названия
очень удобно.
;=========

Ответ отправил: Стас (статус: Практикант)
Отправлен: 06.05.2005, 01:41

Отвечает: Евгений Иванов
Здравствуйте, MMM72!
Структуры на Ассемблере создавать очень просто. Ещё существуют объединения.
STRUC
UNION
потом указываешь элементы внутри.
Это просто обычные типы данных.
Объявлять структуру (образец) - для этого используй название структуры как тип данных.
Доступ к элементам структуры идёт через точку (.)
Есть расширенный вид структур.
Также присутствует TABLE. Это уже ООП.
Структуры можно вкладывать друг в друга.
Вот твоя (твои) структура:
(привожу программирование для win32)
t equ type
struc dbd
year dd ?
month db ?
day db ?
ends
struc prg
num_subject dd ?
adr_subjects dd ?
ends
struc one_subject
subj_name dd ?
subj_progress dd ?
;... и т.п.
ends
struc class
str_family dd ?
str_name dd ?
str_patronymic dd ?
bdday dbd ?
sex db ?
progress dd ?
ends
str0 db "Математика", 0
str1 db "Физика", 0
str2 db "Ботаника", 0
str3 db "Иванов", 0
я тут немного импровизировал. ;)
объясняю.
;1.создаёшь образец (объект) class:
Call GlobalAlloc, GPTR, size class
or eax,eax
jz @@Exit
xchg esi,eax
;2.создаёшь образец (объект) prg:
Call GlobalAlloc, GPTR, size prg
or eax,eax
jz @@Exit
xchg edi,eax
;заполняю предметами объект
mov eax, 3
mov [(t prg edi).num_subject], eax
imul eax, size one_subject
Call GlobalAlloc, GPTR, eax
or eax,eax
jz @@Exit
xchg ebx, eax
mov [(t prg edi).adr_subjects], ebx
;===
mov eax, size one_subject
mov [(t one_subject ebx).subj_name], ofs str0
mov [(t one_subject ebx).subj_progress], 10

mov [(t one_subject ebx+eax).subj_name], ofs str1
mov [(t one_subject ebx+eax).subj_progress], 5
mov [(t one_subject ebx+eax*2).subj_name], ofs str2
mov [(t one_subject ebx+eax*2).subj_progress], 7
;===
mov [(t class esi).str_family], ofs str3
;.....
mov [(t class esi).progress], edi
mov [(t class esi).bdday.year], 2005
mov [(t class esi).bdday.month], 5
mov [(t class esi).bdday.day], 7
вот так вот работают со структурами в Ассемблере.
не правда ли, мощно?
в файл записывать - проще некуда.
Удачи!

Приложение:

Прикреплённый файл: Загрузить >>
Срок хранения файла на сервере RusFAQ.ru составляет 14 суток с момента отправки ответа.

Ответ отправил: Евгений Иванов (статус: Профессор)
Отправлен: 07.05.2005, 19:21


Вопрос № 20399
Меня интересует DOSовская часть программы, работающей под окнами. Точнее: как можно её изменить, или убрать вообще, компилируя ехе’шник МАСМОМ версии 6.14 и используя линковщик 5.12. Я видел Windows прогу которая начинается так: «MZfarbrauschPE». Что это означает?
А вообще где можна найти все значения параметров командной строки линковщика?
И второй вопрос. Антиотладка. У меня есть несколько программ, которые вешают дизассемблер, когда ее собираются ТОЛЬКО дизассемблировать, даже не отлаживая. Как можно это сделать под DOSом, Windows’ом. Можно ли это сделать на VB6? А как вообще можно повесить отладчик?
Отправлен: 03.05.2005, 21:43
Вопрос задал: Nieh (статус: Посетитель)
Всего ответов отправлено: 3

Отвечает: Boriss
Здравствуйте, Nieh!
О MZfarbrauschPE - описания не нашел. Похоже на сжатый фромат файла - такое впечатление, что MZ "налезает" на PE (укороченный MZ)
Демок много есть на http://www.farb-rausch.com/
"farbrausch is a demo-group taking part in the so called "demoscene"
----------------------
Возможно, что это самомодифицирующийся код, и вероятно, отслеживающий флаг пошагового выполнения команд (трассировки) TF. В реальном режиме DOS - это проходит без проблем, а защищенном и в Windows есть небольшие проблемы
То есть зациклить на переходах - самое простое
На VB и B, в частности, никогда не пытался делать такое ...
Ответ отправил: Boriss (статус: Профессор)
Отправлен: 04.05.2005, 11:02

Отвечает: _vt
Здравствуйте, Nieh!
1) DOS-заглушка. На сайте wasm.ru лежит архив сайта assembler.ru - в этом архиве есть подробная статья по этому поводу. Вкратце - в PE-заголовке каждого exe-файла зарезервировано место под небольшую программу-"заглушку", которая работает при запуске Windows-программы в DOS, и в простейшем случае выводит строку "This program cannot run in DOS mode" и завершает работу. В "линковщиках" фирмы Microsoft предусмотрена возможность скомпоновать свою программу с альтернативной "заглушкой", указав ее с помощью ключа /STUB:prog.exe, где prog.exe - имя этой программы. Сама программа-заглушка должна иметь формат DOS EXE, при этом быть скомпонована с ключом /KNOWEAS. Это официальные требования :) Неофициально - заглушку можно упростить, главное чтобы не были изменены некоторые ключевые поля PE-заголовка, иначе Windows-часть перестанет запускаться. В вышеуказанной статье имеется описание заглушки размером в 20 байт :)
2) Офиц иальные ключи линковщика можно найти в MSDN. Неофициальные - в гугле, например по запросу "link.exe undocumented". ;-)
3) Конкретных советов по антиотладночным приемам дать не могу, могу только сказать, что это возможно под любой ОС и любым инструментом, в том числе и VB. Вооружившись поисковиком, можно найти достаточное количество примеров.
--

* In Gates we trust! :)

Ответ отправил: _vt (статус: Посетитель)
Отправлен: 04.05.2005, 20:26

Отвечает: Евгений Иванов
Здравствуйте, Nieh!
убрать вообще её нельзя.
изменить можно - это несложно. зная заголовок MZ, можно многое.
там ничего сложного нет. размеры, смещения и т.п.
смотри во вложении мой личный stub.
:)
272 байта.
хотя можно ещё намного меньше сделать, но не рекомендуется.

Прикреплённый файл: Загрузить >>
Срок хранения файла на сервере RusFAQ.ru составляет 14 суток с момента отправки ответа.

Ответ отправил: Евгений Иванов (статус: Профессор)
Отправлен: 07.05.2005, 12:38


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

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

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2005, RusFAQ.ru, Россия, Москва. Все права защищены.
Идея, дизайн, программирование, авторское право: Калашников О.А.


http://subscribe.ru/
http://subscribe.ru/feedback/
Подписан адрес:
Код этой рассылки: comp.soft.prog.faq
Отписаться

В избранное