Вопрос № 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