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

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


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

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

Выпуск № 447
от 19.12.2002, 13:10

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


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

masquer
Статус: Профессиональный
Общий рейтинг: 149.22
[Подробней >>]
Traish
Статус: Доверительный
Общий рейтинг: 135
[Подробней >>]
Gibbel
Статус: Профессиональный
Общий рейтинг: 108.49
URL: Страничка обо мне и моих друзьях
[Подробней >>]
 
Portnov
Статус: Профессиональный
Общий рейтинг: 115.39
URL: Мой сайтик...
[Подробней >>]
Ayl
Статус: Профессиональный
Общий рейтинг: 117.45
[Подробней >>]
Maverick
Статус: Профессиональный
Общий рейтинг: 138.53
URL: Задачи по ассемблеру
Телефон: 89039415024 (BeeLine GSM)
[Подробней >>]
 
Bob Johnson
Статус: Профессиональный
Общий рейтинг: 152.86
[Подробней >>]
LIFO
Статус: Профессиональный
Общий рейтинг: 120.92
URL: наш сайт
Телефон: 8 01710 24758
[Подробней >>]
Max
Статус: Доверительный
Общий рейтинг: 108.51
[Подробней >>]
 
Dark_Lord
Статус: Профессиональный
Общий рейтинг: 122.21
[Подробней >>]
ASMодей
Статус: Профессиональный
Общий рейтинг: 118.75
[Подробней >>]
wiggler
Статус: Начальный
Общий рейтинг: 101.7
[Подробней >>]
 
St
Статус: Опытный
Общий рейтинг: 115.51
[Подробней >>]
vitya
Статус: Профессиональный
Общий рейтинг: 108.22
[Подробней >>]
igorash
Статус: Профессиональный
Общий рейтинг: 115.19
Телефон: 8(903)251-86-01
[Подробней >>]


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

Вопрос № 2146. Приветствую всех. У меня вопрос, как можно перехватить (не hook) определенную API-функцию, и чтобы п... (ответов: 2)
Вопрос № 2148. Hi! Во первых спасибо за доки по PE (q2036). Вот разбирался с ними, но кое-что непонятно. Может объя... (ответов: 2)
Вопрос № 2149. Hi ! Если у кого-нибудь есть рабочий пример алгоритма огня под DOS? то вышлите плиз! Заранее спасибо... (ответов: 2)
Вопрос № 2150. Привет, уважаемые эксперты! Написал вот следующую программулину: резидент, озвучивает нажатие на кла... (ответов: 1)
Вопрос № 2152. День добрый! Что указывает ASMу директива: .Model ... 1.Какие (типы-виды)она имеет? 2.Какое различ... (ответов: 7)
Вопрос № 2153. Дарова всем. Использовать ассемблер мона в 1. Написании прог 2. Взлом шароварных прог ... А можно ли... (ответов: 3)
Вопрос № 2154. Вопросов сразу несколько, посылаю все сразу (Win32): 1) Как присвоить создаваемому *.exe иконку? 2) ... (ответов: 6)
Вопрос № 2155. Предлогаю задачку: Реализовать на светодиодах клавиатуры бегущие огни. Порадок следования огоньков в... (ответов: 4)

Вопросов: 8, ответов: 27


 Вопрос № 2146

Приветствую всех. У меня вопрос, как можно
перехватить (не hook) определенную API-функцию, и чтобы перехват работал на уровне системы, не через VxD технологию. У меня одна программа есть на Дельфи написана, но перехват работает только на уровне самой программы, а не всей системы. Заранее блогадарю.



Вопрос отправлен: 14.12.2002, 15:33
Отправитель: xJoker (xjoke@online.com.ua)

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

Отвечает masquer

Доброе время суток, xJoker!
Ух ты, и не хуками, и не драйвером, а не знамо как? Тогда маловато информации будет. Можешь, конечно, подпатчить нужную функцию в библиотеке, и передавать управление на себя... А вообще большинство функции перехвата апи функций базируются все таки на хуках, смысл в том, что внедрить свою длл в адресное пространство перехватываемого процесса, а вот как это сделать в общем случае без хуков, может кто-то знает, я нет.
На эту тему почитай Рихтера, статьи на сайте EliCZ-a, на wasm.ru есть.

Ответ отправлен: 15.12.2002, 15:32
Отправитель: masquer


Отвечает Traish

Добрый день, xJoker!
Хех... А ты думаешь, что система позволит тебе перехватить ее функции? Ты, видимо, сплайсинг ввиду имеешь. Но тут свои проблемы: Если перехватываешь функцию из kernel32.dll, к примеру, то тебе не обойтись без привилегий на уровне 0 или хотя бы без возможности разрешить запись в указанную область памяти (а для этого придется воспользоваться функцией _PageModifyPermissions), да к тому же надо будет найти себе место в области памяти выше 2 Гбайт. И как это все проделать, не используя VxD? Или можешь модифицировать дескрипторы импорта каких-нибудь модулей, но опять же просто так тебе это сделать не дадут.


Ответ отправлен: 15.12.2002, 16:05
Отправитель: Traish


 Вопрос № 2148

Hi! Во первых спасибо за доки по PE (q2036). Вот разбирался с ними, но кое-что непонятно. Может объясните что я делаю неправильно: в формате написано, что в заголовке по смещению 88h и 8Ch лежит адрес таблицы ресурсов (RVA) и ее размер. Я рассматриваю файл, в нем:
88h: 00 40 08 00
8Ch: 50 29 02 00
Те вроде как бы адрес таблицы ресурсов 84000h, а ее размер 22950h. Размер же файла A2FF0h (меньше их суммы). По ходу проблема в том что я не оттуда считаю адрес, если это так то скажите плз как будет правильно (в смысле как считать RVA).



Вопрос отправлен: 14.12.2002, 19:47
Отправитель: HeX (x-nucleus@yandex.ru)

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

Отвечает Traish

Здравствуйте, HeX!
Конечно, размер секции + RVA может быть и больше размера всего файла (и как правило больше), потому что RVA - это Relative Virtual Address и отсчитывается он от базового адреса в памяти. А если хочешь получить оффсет в файле, то это делается не так. Например, нужно получить оффсет начала секции .text - смотришь значение в таблице секций по смещению 14h (от ее начала). Это смещение в файле, где находятся данные для секции, а в поле 0ch будет указан RVA по которому загрузчик должен будет загрузить секцию, отсчитывая от начала в ПАМЯТИ. И если там значение 00400800, то это значит, что загрузчик поместит данные из файла по адресу в памяти Image_base + 84000h.


Ответ отправлен: 14.12.2002, 20:58
Отправитель: Traish


Отвечает masquer

Приветствую Вас, HeX!
А теперь смотрим, что у нас находится по значению заголовок+34h и прибавляем к этому значению твой RVA, получим адрес, по которому загрузчик ПОПЫТАЕТСЯ запихнуть твой ресурс, а для того чтобы получить физический адрес, тебе уже написали, что нужно секцию смотреть...

Ответ отправлен: 15.12.2002, 15:22
Отправитель: masquer


 Вопрос № 2149

Hi !
Если у кого-нибудь есть рабочий пример алгоритма огня под DOS? то вышлите плиз!
Заранее спасибо!



Вопрос отправлен: 14.12.2002, 22:36
Отправитель: Alex (alexneta@aport2000.ru)

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

Отвечает Gibbel

Здравствуйте, Alex!
Смотри здесь

Ответ отправлен: 15.12.2002, 14:17
Отправитель: Gibbel


Отвечает Portnov

Здравствуйте, Alex!
Отправил на мыло.

Ответ отправлен: 15.12.2002, 16:21
Отправитель: Portnov


 Вопрос № 2150

Привет, уважаемые эксперты!
Написал вот следующую программулину:
резидент, озвучивает нажатие на клавиши.
Но за недостатком опыта, знаний и всего такого
возникла куча глюков:
- при обработке видны маленькие тормоза в отклике;
- при нажатии клавиш-стрелок (и Shift и Alt какой-то:
то ли левый, то ли правый) возникает пищание до
потери пульса пока не переполнится буфер, и на их
не реагируют остальные приложения (DN к примеру).
Ведь у них расширенный скан-код, а как его обработать - х.з.
Да и вообще ведь под NT-системы такие
проги работоть не должны, ведь так?
Вообщем прошу помощи, а то это лаба. ;)
Да и вообще может замечания какие по коду с радостью
хотел бы увидеть...


Приложение:


Вопрос отправлен: 15.12.2002, 00:15
Отправитель: m0rfey

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

Отвечает Ayl

Приветствую Вас, m0rfey!
Ну, во-первых, у меня претензии к обработчику. Зачем ты выполняешь действия по оповещению контроллера клавиатуры о принятии символа и контроллера прерывания об освобождении прерывания, а потом вызываешь оригинальный обработчик (ОО)? Тут или полностью сам обрабатываешь клаву, или поручаешь это ОО.
Зачем сохранять значение кода нажатой клавиши, если оно нигде не используется?
Вызов прерывания из обработчика аппаратного прерывания в DOS'е - вообще смертельная вещь. Может привести к непредсказуемым последствиям вследствии того, что DOS - нереентерабельная система. Допустим, что фоновая программа (та, которая была прервана нажатием клавиши) как раз выполняла прерывание 1Ah. В результате ты из своего обработчика снова вызываешь это прерывание - и легко можешь разрушить данные предыдущего вызова. Так что попробуй обойтись без 1Ah.


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


 Вопрос № 2152

День добрый!
Что указывает ASMу директива:
.Model ...
1.Какие (типы-виды)она имеет?
2.Какое различие между ними?
Если можно, ПОДРОБНЕЕ.
СПАСИБО.






Вопрос отправлен: 15.12.2002, 06:12
Отправитель: Vlad (vlob_2002@mail.ru)

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

Отвечает Maverick

Доброе время суток, Vlad!
Это дирретива для задания модели памяти.
В приложении ее значения.


Приложение:

Ответ отправлен: 15.12.2002, 07:46
Отправитель: Maverick


Отвечает Bob Johnson

Доброе время суток, Vlad!
Тип используемой модели памяти для упращения описания сегментов.
                         Стандартные модели памяти         Таблица 7.1
----------T---------T--------T--------------T-------------------¬
¦Модель ¦ Код ¦Данные ¦Предполагаемые¦Описание ¦
¦ ¦ ¦ ¦регистры ¦ ¦
+---------+---------+--------+--------------+-------------------+
¦TINY ¦ ближний ¦ближний ¦cs=dgroup ¦Весь код и все дан-¦
¦ ¦ ¦ ¦ds=ss=dgroup ¦ные комбинируются¦
¦ ¦ ¦ ¦ ¦в одну группу с¦
¦ ¦ ¦ ¦ ¦именем DGROUP. Эта¦
¦ ¦ ¦ ¦ ¦модель используется¦
¦ ¦ ¦ ¦ ¦для программ, ас-¦
¦ ¦ ¦ ¦ ¦семблируемых в фор-¦
¦ ¦ ¦ ¦ ¦мат .COM. Некоторые¦
¦ ¦ ¦ ¦ ¦языки эту модель не¦
¦ ¦ ¦ ¦ ¦поддерживают. ¦
¦ ¦ ¦ ¦ ¦ ¦
+---------+---------+--------+--------------+-------------------+
¦SMALL ¦ ближний ¦ближний ¦cs=_text ¦Код представляет¦
¦ ¦ ¦ ¦ds=ss=dgroup ¦собой один сегмент.¦
¦ ¦ ¦ ¦ ¦Все данные комбини-¦
¦ ¦ ¦ ¦ ¦руются в группу с¦
¦ ¦ ¦ ¦ ¦именем DGROUP. Это¦
¦ ¦ ¦ ¦ ¦наиболее общая мо-¦
¦ ¦ ¦ ¦ ¦дель, использующая-¦
¦ ¦ ¦ ¦ ¦ся для автономных¦
¦ ¦ ¦ ¦ ¦программ на Ассемб-¦
¦ ¦ ¦ ¦ ¦лере. ¦
¦ ¦ ¦ ¦ ¦ ¦
+---------+---------+--------+--------------+-------------------+
¦MEDIUM ¦ дальний ¦ближний ¦cs= ¦Для кода использу-¦
¦ ¦ ¦ ¦<модуль>_text ¦ется несколько сег-¦
¦ ¦ ¦ ¦ds=ss=dgroup ¦ментов, по одному¦
¦ ¦ ¦ ¦ ¦на модуль. Данные¦
¦ ¦ ¦ ¦ ¦находится в группе¦
¦ ¦ ¦ ¦ ¦с именем DGROUP. ¦
¦ ¦ ¦ ¦ ¦ ¦
+---------+---------+--------+--------------+-------------------+
¦COMPACT ¦ ближний ¦дальний ¦cs=_text ¦Код находится в од-¦
¦ ¦ ¦ ¦ds=ss=dgroup ¦ном сегменте. Все¦
¦ ¦ ¦ ¦ ¦ближние данные на-¦
¦ ¦ ¦ ¦ ¦ходятся в группе с¦
¦ ¦ ¦ ¦ ¦именем DGROUP. Для¦
¦ ¦ ¦ ¦ ¦ссылки на данные¦
¦ ¦ ¦ ¦ ¦используются даль-¦
¦ ¦ ¦ ¦ ¦ние указатели. ¦
¦ ¦ ¦ ¦ ¦ ¦
+---------+---------+--------+--------------+-------------------+
¦LARGE ¦ дальний ¦дальний ¦cs= ¦Для кода использу-¦
¦ ¦ ¦ ¦<модуль>_text ¦ется несколько сег-¦
¦ ¦ ¦ ¦ds=ss=dgroup ¦ментов, по одному¦
¦ ¦ ¦ ¦ ¦на модуль. Все¦
¦ ¦ ¦ ¦ ¦ближние данные на-¦
¦ ¦ ¦ ¦ ¦ходятся в группе с¦
¦ ¦ ¦ ¦ ¦именем DGROUP. Для¦
¦ ¦ ¦ ¦ ¦ссылки на данные¦
¦ ¦ ¦ ¦ ¦используются даль-¦
¦ ¦ ¦ ¦ ¦ние указатели. ¦
¦ ¦ ¦ ¦ ¦ ¦
+---------+---------+--------+--------------+-------------------+
¦HUGE ¦ дальний ¦дальний ¦cs= ¦То же, что модель¦
¦ ¦ ¦ ¦<модуль>_text ¦LARGE (что касается¦
¦ ¦ ¦ ¦ds=ss=dgroup ¦Турбо Ассемблера). ¦
¦ ¦ ¦ ¦ ¦ ¦
+---------+---------+--------+--------------+-------------------+
¦TCHUGE ¦ дальний ¦дальний ¦cs= ¦Это эквивалентно¦
¦ ¦ ¦ ¦<модуль>_text ¦модели LARGE, но с¦
¦ ¦ ¦ ¦ds=nothing ¦другими предположе-¦
¦ ¦ ¦ ¦ss=nothing ¦ниями о сегментных¦
¦ ¦ ¦ ¦ ¦регистрах. ¦
¦ ¦ ¦ ¦ ¦ ¦
+---------+---------+--------+--------------+-------------------+
¦TPASCAL ¦ ближний ¦дальний ¦cs=code, ds ¦Эта модель поддер- ¦
¦ ¦ ¦ ¦=data, ss= ¦живается ранними¦
¦ ¦ ¦ ¦nothing ¦версиями Турбо Пас-¦
¦ ¦ ¦ ¦ ¦каля. В более позд-¦
¦ ¦ ¦ ¦ ¦них версиях не тре-¦
¦ ¦ ¦ ¦ ¦буется. ¦
¦ ¦ ¦ ¦ ¦ ¦
+---------+---------+--------+--------------+-------------------+
¦FLAT ¦ ближний ¦ближний ¦cs=_text ¦То же, что и модель¦
¦ ¦ ¦ ¦ds=ss=flat ¦SMALL, но подходит¦
¦ ¦ ¦ ¦ ¦для использования в¦
¦ ¦ ¦ ¦ ¦OS/2. ¦
L---------+---------+--------+--------------+--------------------

Для 32-разрядных приложений применяется модель FLAT, которая предполагает линейное представление памяти в пределах 4 Гб.


Ответ отправлен: 16.12.2002, 16:20
Отправитель: Bob Johnson


Отвечает Traish

Здравствуйте, Vlad!
".model модель_памяти, _язык_, _стек_" определяет модель памяти.
Параметр _модель_памяти_ может быть:
tiny - данные, код, стек - все в одном сегменте, размером до 64 Кб.
small - код размещается в одном сегменте, данные и стек - в другом.
compact - код в одном сегменте, а данные и стек - в других, поэтому считается, что они дальнего типа.
medium - почти то же, что и compact, но наоборот.
large - и код, и данные, и стек могут занимать несколько сегментов.
huge - то же.
flat - то же, что и tiny, но используются 32 битные смещения.
_язык_ указывает, что процедуры могут быть вызваны из соответствующего HLL - C, BASIC, FORTRAN, PASCAL, SYSCALL, STDCALL. Это связано с различными соглашениями о вызовах.
Стек может быть farstack или nearstack.

Ответ отправлен: 15.12.2002, 12:17
Отправитель: Traish


Отвечает LIFO

Здравствуйте, Vlad!
Модель памяти.
Данная директива устанавливает конкретную модель памяти.
Их бывает несколько
TINY - код и данные в одной группе(прога типа COM)
SMALL - код занимает один сегмент, данные тоже.
MEDIUM - код в нескольких сегментах , данные в одном.
COMPACT - код в одном сегменте , ссылка на данные типа far.
LARGE- код в нескольких сегментах.
FLAT - плоская модель памяти - код и данные в одном 32-битном сегменте.


Ответ отправлен: 17.12.2002, 16:20
Отправитель: LIFO


Отвечает Max

Хорошо если те оно так сильно горит!!!

Для простых программ, содержащих по одному сегменту для кода, данных и стека, хотелось бы упростить ее описание. Для этого в трансляторы MASM и TASM ввели возможность использования упрощенных директив сегментации. Но здесь возникла проблема, связанная с тем, что необходимо было как-то компенсировать невозможность напрямую управлять размещением и комбинированием сегментов. Для этого совместно с упрощенными директивами сегментации стали использовать директиву указания модели памяти MODEL, которая частично стала управлять размещением сегментов и выполнять функции директивы ASSUME (поэтому при использовании упрощенных директив сегментации директиву ASSUME можно не использовать). Эта директива связывает сегменты, которые в случае использования упрощенных директив сегментации имеют предопределенные имена, с сегментными регистрами (хотя явно инициализировать ds все равно придется).
В листинге 1 приведен пример программы с использованием упрощенных директив сегментации:

Листинг 1. Использование упрощенных директив сегментации
;---------Prg_3_1.asm-------------------------------
masm ;режим работы TASM: ideal или masm
model small ;модель памяти
.data ;сегмент данных
message db 'Введите две шестнадцатеричные цифры,$'
.stack ;сегмент стека
db 256 dup ('?') ;сегмент стека
.code ;сегмент кода
main proc ;начало процедуры main
mov ax,@data ;заносим адрес сегмента данных в регистр ax
mov ds,ax ;ax в ds
;далее текст программы (см. сегмента кода в листинге 3.1 книги)
mov ax,4c00h ;пересылка 4c00h в регистр ax
int 21h ;вызов прерывания с номером 21h
main endp ;конец процедуры main
end main ;конец программы с точкой входа main

Синтаксис директивы MODEL показан на рис. 16.


Рис. 16. Синтаксис директивы MODEL
Обязательным параметром директивы MODEL является модель памяти. Этот параметр определяет модель сегментации памяти для программного модуля. Предполагается, что программный модуль может иметь только определенные типы сегментов, которые определяются упомянутыми нами ранее упрощенными директивами описания сегментов. Эти директивы приведены в табл. 3.
Таблица 3. Упрощенные директивы определения сегмента
Формат директивы
(режим MASM) Формат директивы
(режим IDEAL) Назначение
.CODE [имя] CODESEG[имя] Начало или продолжение сегмента кода
.DATA DATASEG Начало или продолжение сегмента инициализированных данных. Также используется для определения данных типа near
.CONST CONST Начало или продолжение сегмента постоянных данных (констант) модуля
.DATA? UDATASEG Начало или продолжение сегмента неинициализированных данных. Также используется для определения данных типа near
.STACK [размер] STACK [размер] Начало или продолжение сегмента стека модуля. Параметр [размер] задает размер стека
.FARDATA [имя] FARDATA [имя] Начало или продолжение сегмента инициализированных данных типа far
.FARDATA? [имя] UFARDATA [имя] Начало или продолжение сегмента неинициализированных данных типа far
Наличие в некоторых директивах параметра [имя] говорит о том, что возможно определение нескольких сегментов этого типа. С другой стороны, наличие нескольких видов сегментов данных обусловлено требованием обеспечить совместимость с некоторыми компиляторами языков высокого уровня, которые создают разные сегменты данных для инициализированных и неинициализированных данных, а также констант.
При использовании директивы MODEL транслятор делает доступными несколько идентификаторов, к которым можно обращаться во время работы программы, с тем, чтобы получить информацию о тех или иных характеристиках данной модели памяти (см. табл. 5). Перечислим эти идентификаторы и их значения (табл. 4).
Таблица 4. Идентификаторы, создаваемые директивой MODEL
Имя идентификатора Значение переменной
@code Физический адрес сегмента кода
@data Физический адрес сегмента данных типа near
@fardata Физический адрес сегмента данных типа far
@fardata? Физический адрес сегмента неинициализированных данных типа far
@curseg Физический адрес сегмента неинициализированных данных типа far
@stack Физический адрес сегмента стека
Если вы посмотрите на текст листинга 1, то увидите пример использования одного из этих идентификаторов. Это @data; с его помощью мы получили значение физического адреса сегмента данных нашей программы.
Теперь можно закончить обсуждение директивы MODEL. Операнды директивы MODEL используют для задания модели памяти, которая определяет набор сегментов программы, размеры сегментов данных и кода, способ связывания сегментов и сегментных регистров. В табл. 5 приведены некоторые значения параметра модель памяти директивы MODEL.
Таблица 5. Модели памяти
Модель Тип кода Тип данных Назначение модели
TINY near near Код и данные объединены в одну группу с именем DGROUP.
Используется для создания программ формата .com.
SMALL near near Код занимает один сегмент, данные объединены в одну группу с именем DGROUP.
Эту модель обычно используют для большинства программ на ассемблере
MEDIUM far near Код занимает несколько сегментов, по одному на каждый объединяемый программный модуль.
Все ссылки на передачу управления — типа far.
Данные объединены в одной группе; все ссылки на них — типа near
COMPACT near far Код в одном сегменте;
ссылка на данные — типа far
LARGE far far Код в нескольких сегментах, по одному на каждый объединяемый программный модуль
Параметр модификатор директивы MODEL позволяет уточнить некоторые особенности использования выбранной модели памяти (табл. 6).
Таблица 6. Модификаторы модели памяти
Значение модификатора Назначение
use16 Сегменты выбранной модели используются как 16-битные (если соответствующей директивой указан процессор i80386 или i80486)
use32 Сегменты выбранной модели используются как 32-битные (если соответствующей директивой указан процессор i80386 или i80486)
dos Программа будет работать в MS-DOS
Необязательные параметры язык и модификатор языка определяют некоторые особенности вызова процедур. Необходимость в использовании этих параметров появляется при написании и связывании программ на различных языках программирования.
Описанные нами стандартные и упрощенные директивы сегментации не исключают друг друга. Стандартные директивы используются, когда программист желает получить полный контроль над размещением сегментов в памяти и их комбинированием с сегментами других модулей.
Упрощенные директивы целесообразно использовать для простых программ и программ, предназначенных для связывания с программными модулями, написанными на языках высокого уровня. Это позволяет компоновщику эффективно связывать модули разных языков за счет стандартизации связей и управления.
--------------------------------------------------------------------------------


Ответ отправлен: 16.12.2002, 15:57
Отправитель: Max


Отвечает Dark_Lord

Здравствуйте, Vlad!
Она указовает то, как будет использована память в программе, опредилённые фрматы файлов подерживают опредилённые форматы, например tiny это .com программа, small или large - это ехе под дос, flat под Windows...

Ответ отправлен: 15.12.2002, 16:48
Отправитель: Dark_Lord


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

Добрый день, Vlad!
Директивой .MODEL задается модель памяти:
TINY - код, данные и стек находятся в одном сегменте
SMALL - код в одном сегменте, данные и стек - в другом
COMPACT - код в одном сегменте, а данные могут быть в нескольких
сегментах. Используется дальняя адресация на данные
MEDIUM - код размещается в нескольких сегментах, а данные - в одном
LARGE, HUGE - код и данные могут занимать несколько сегментов
FLAT - плоская модель памяти, используются 32-разрядные смещения.


Ответ отправлен: 16.12.2002, 06:07
Отправитель: ASMодей


 Вопрос № 2153

Дарова всем. Использовать ассемблер мона в
1. Написании прог
2. Взлом шароварных прог
...
А можно ли использовать(т.е. пригодится ли) ассемблер для сетевого взлома? Интересно было бы узнать.... И примеры пожалуйста...



Вопрос отправлен: 15.12.2002, 07:21
Отправитель: KOl

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

Отвечает wiggler

Приветствую Вас, KOl!
Для сетевого взлома ассемблер очень даже пригодится - для проведения атак, основанных на переполнении буфера. Подробнее здесь:
http://www.void.ru/?do=printable&id=732


Ответ отправлен: 15.12.2002, 12:57
Отправитель: wiggler


Отвечает Maverick

Приветствую Вас, KOl!
Овчинка выделки не стоит :)


Ответ отправлен: 15.12.2002, 07:58
Отправитель: Maverick


Отвечает Bob Johnson

Здравствуйте, KOl!
- Он сказал: "Взлом"!!! Клево!!
- Хе-хе, да, да.
Зависит от типа взлома конкретно. В общем случае хакер обязательно должен знать ассемблер. Например, удаленный взлом, связанный с переполнением чего-либо, за счет чего переполняется буфер сервера и управление переходит твоему коду. "Управление переходит" - значит процессор начинает выполнять команды, которые находятся в твоих данных. А чтобы их написать - ты должен знать ассемблер (т.к. вряд ли подойдет другой язык программирования).
А чтобы найти дырку...
Если же происходит что-то типа атаки на отказ, тогда клиент может быть написан и не на асме, а на ЯВУ.


Ответ отправлен: 16.12.2002, 16:21
Отправитель: Bob Johnson


 Вопрос № 2154

Вопросов сразу несколько, посылаю все сразу (Win32):
1) Как присвоить создаваемому *.exe иконку?
2) Как мне создать MessageBox, в котором несколько строк, т.е. типа "Это первая строка Это вторая строка" (на C++). А как это сделать на Асме?
3) В какой из системных библиотек находятся ф-ции работы с реестром, как их ковырнуть и где о них почитать?



Вопрос отправлен: 15.12.2002, 10:44
Отправитель: Bobs

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

Отвечает Bob Johnson

Доброе время суток, Bobs!
1. Добавить ее в ресурсы приложения. Можно написать свой rc-script и там описать иконку, например:
1.rc:
MainIcon ICON My_Icon.ico
Тогда в ресурсы попадет иконка My_Icon.ico и будет иметь имя MainIcon. (Естественно, скрипт надо компилировать, например brc32 1.rc)
2. Разделитель строк - обычный CR/LF, т.е. 13,10. В С++:
"строка1\r\nстрока2\r\n" в асме:
txt db "str1", 13, 10, "str2", 13, 10 ...
3. Почитать - MSDN. ЧТо значит "ковырнуть"? Они находятся в библиотеке advapi32.dll. Определены в winreg.h, который подключается в windows.h.


Ответ отправлен: 16.12.2002, 16:21
Отправитель: Bob Johnson


Отвечает St

Привет, Bobs!
1) См Приложение. Создаете в ресурсах большую и маленькую иконки, загружаете (200 и 299 - это мои цифры, подставьте Id своих иконок), и регистрируете класс которому присвоены эти иконки.
2) Вставьте "обратный слэш"r"обратный слэш"n (без кавычек конечно :).
3) Advapi32.dll
Ищите в хелпе функции начинающиеся на Reg.
St

Приложение:

Ответ отправлен: 15.12.2002, 13:52
Отправитель: St


Отвечает Gibbel

Приветствую Вас, Bobs!
1) Что значит "Как присвоить создаваемому *.exe иконку"??? Если ты имел ввиду иконку, которая будет потом отображаться Explorerом, то это будет первая иконка из ресурсов этого .exe ...
2) Необходимо вставить код перевода строки. В C/C++ это "\n", в асме - код 0Ah.
3) AdvAPI32.dll. О функциях читай в MSDN.

Ответ отправлен: 15.12.2002, 14:25
Отправитель: Gibbel


Отвечает vitya

Здравствуйте, Bobs!
2. после каждого предложения просто пишиете - и система сделает перевод каретки. Думаю на ассемблере делается точно так же.
3. advapi32.dll. Почитать о них можно в МСДН, функции все начинаются с префикса Reg (e.g. RegQueryValueEx).

Ответ отправлен: 15.12.2002, 11:12
Отправитель: vitya


Отвечает masquer

Здравствуйте, Bobs!
1. Создаешь файл ресурса, в который включаешь приблизительно такую строку
200 ICON MOVEABLE PURE LOADONCALL DISCARDABLE "ICON.ICO"
дальше в коде можно и так (для диалогов)
invoke LoadIcon,hInstance,200
mov hIcon, eax
invoke SendMessage,hWnd,WM_SETICON,1,hIcon

2. Так и пишешь "Это первая строка",10,"Это вторая строка",0
3. advapi32.dll, называются все на Reg*, почитать - MSDN

Ответ отправлен: 15.12.2002, 15:12
Отправитель: masquer


Отвечает Dark_Lord

Доброе время суток, Bobs!
1)Делается это при помощи ресурсов, создаёшь в них объект иконку и всё.
2)Для перевода строки Windows использует два символа, 0dh,0ah, тоесть строка
strika db 'Первая строка',0dh,0ah,'вторая строка',0
выведется в две строки!
3) Все они находятся в advapi32.dll, инфы в Нете полно!

Ответ отправлен: 15.12.2002, 16:53
Отправитель: Dark_Lord


 Вопрос № 2155

Предлогаю задачку:
Реализовать на светодиодах клавиатуры бегущие огни.
Порадок следования огоньков выбирайте на свой вкус.
Програмка может быть под ДОС,(если кто захочет может и под
Windows написать)
Задачка простая.
Желаю удачи !!!



Вопрос отправлен: 15.12.2002, 13:02
Отправитель: Jhonny (kev3582@ed.rk.tusur.ru)

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

Отвечает Traish

Приветствую Вас, Jhonny!
Я пару лет назад писал нечто подобное, может, подойдет. См. приложение.


Приложение:

Ответ отправлен: 15.12.2002, 15:37
Отправитель: Traish


Отвечает igorash

Здравствуйте, Jhonny!
Так это у Зубкова есть в книжке... не интересно ;))
т.е. не совсем, но надо просто пару строк изменить и все...

Ответ отправлен: 15.12.2002, 18:58
Отправитель: igorash


Отвечает Maverick

Здравствуйте, Jhonny!
Хех, новуй способ подсовывания лаб? :)))
Задача тривиальная, у меня где то был самый короткий код неизвестного автора в пару строк. Не стал искать.


Ответ отправлен: 15.12.2002, 17:54
Отправитель: Maverick


Отвечает Bob Johnson

Здравствуйте, Jhonny!
Спасибо за предложение, конечно, но почему бы тебе не сделать это самому?
Могу предложить даже еще интереснее задачу - проиграть отрывок мелодии на флоппи-дисководе (у меня была прога, которая играла "чижика").


Ответ отправлен: 16.12.2002, 16:21
Отправитель: Bob Johnson



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

Внимание!
Форма может работать некорректно в почтовых программах "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 (39)
C / C++ (30)
Perl (5)
Delphi (21)
Pascal (24)
Basic / VBA (10)
Java / JavaScript (6)
PHP (4)
MySQL / MSSQL (5)
Пользователю
Windows 95/98/Me (32)
Windows NT/2000/XP (25)
"Железо" (33)
Поиск информации (14)
Администратору
Windows NT/2000/XP (9)
Linux / Unix (14)
Юристу
Гражданское право (8)
Семейное право (3)
Трудовое право (5)
КоАП (2)

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




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

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


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

В избранное