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

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


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

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

Выпуск № 555
от 01.06.2003, 21:00

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


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

Maverick
Статус: Профессиональный
Общий рейтинг: 132.46
URL: Задачи по ассемблеру
Телефон: 89039415024 (BeeLine GSM)
[Подробней >>]
[MozgC]
Статус: Опытный
Общий рейтинг: 171.42
[Подробней >>]
_vt
Статус: Опытный
Общий рейтинг: 117.66
[Подробней >>]
 
Дмитрий
Статус: Доверительный
Общий рейтинг: 134.18
[Подробней >>]
Tigran K. Kalaidjian
Статус: Опытный
Общий рейтинг: 117.25
URL: Методы оптимизации работы ПК
[Подробней >>]
Bob Johnson
Статус: Профессиональный
Общий рейтинг: 151.05
URL: Программирование
[Подробней >>]
 
keleb-glin
Статус: Опытный
Общий рейтинг: 108.95
[Подробней >>]
Lynx
Статус: Опытный
Общий рейтинг: 128.77
[Подробней >>]
Hayk
Статус: Доверительный
Общий рейтинг: 112.5
[Подробней >>]
 
Gibbel
Статус: Профессиональный
Общий рейтинг: 108.03
URL: Страничка обо мне и моих друзьях
Телефон: +7 902 168 02 65
[Подробней >>]
Pin
Статус: Опытный
Общий рейтинг: 122.22
URL: My HOMEPAGE
[Подробней >>]
Ayl
Статус: Профессиональный
Общий рейтинг: 118.97
[Подробней >>]
 
baldr
Статус: Профессиональный
Общий рейтинг: 112.44
URL: Сайт об ОС DOS. Всем, кто любит эту ОС!
[Подробней >>]
masquer
Статус: Профессиональный
Общий рейтинг: 138.43
[Подробней >>]
St
Статус: Опытный
Общий рейтинг: 107.72
[Подробней >>]


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

Вопрос № 3286. Всем привет, помогите пожалуйста, завтра надо лабу сдавать по асемблеру, я вот пытаюсь разобраться в... (ответов: 6)
Вопрос № 3287. Извините, за ламерские мои вопросы, но вот еще 1 вопрос : что делают строки mov ax,@data mov ds,ax... (ответов: 7)
Вопрос № 3288. Здравствуйте! Даже не знаю куда отправлять, поэтому в самую многочисленную. Вот что у меня есть: win... (ответов: 1)
Вопрос № 3289. Привет всем! Подскажите кто знает как работать с портами в винде. Под дос на асме было просто in out... (ответов: 7)
Вопрос № 3290. Конкурс Кто такой Пентковский? Снова я получил достаточно правильных(иногда - и... (ответов: 4)
Вопрос № 3291. Я только читатель этой рассылки, но на вопрос 3256 & 3257 могу дать ответ потому как имел похожую п... (ответов: 1)
Вопрос № 3293. Здавствуйте Гуру(ы)! С помощью какой-то матери и божьей тоже написал вот это.Ура получилось.Но работ... (ответов: 3)
Вопрос № 3294. Привет, эксперты! Кто знает, как правильно задавать слэши и бэкслеши в вопросах и ответах (дублирова... (ответов: 4)
Вопрос № 3295. Здравствуйте! К примеру, имеется три файла: Vasya.txt, Pupkin.exe и Cool_dude.chm. Каким образом мо... (ответов: 11)

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


 Вопрос № 3286

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



Вопрос отправлен: 27.05.2003, 22:08
Отправитель: GosuProger

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

Отвечает Maverick

Добрый день, GosuProger!
............
mov dx,offset string
.........
string db '12'
Так вот, вместо offset string компилятор вставит смещение этой строки, относительный адрес.

Ответ отправлен: 28.05.2003, 05:27
Отправитель: Maverick


Отвечает [MozgC]

Начну с того, что регистр DS указывает на сегмент данных,т.е. область в памяти, где хранятся данные программы.
Чтобы получить доступ к чему-либо в сегменте данных надо обратиться к адресу хранящемуся в DS + какое-то смещение. Это какое-то смещение прибавляется из-за того, что данные у нас хранятся в сегменте данных последовательно, к примеру сначала хранится какое-то двухбайтовое число, потом строка, потом какой-то массив 1 байтовых чисел и т.д.,чтобы получить к ним доступ надо к адресу сегмента данных прибавить число байт от начала сегмента данных до того, к чему нам нужно обратиться, это число байт называется смещением, В асме, чтобы например врегистр занрузить, что-то из сегмента данных используют offset, и записывают к примеру mov eax, offset Str или например mov edx, offset MAS+2 (обратится ко 2 элементу массива MAS) Вообщем я надеюсь понятно

Ответ отправлен: 27.05.2003, 22:18
Отправитель: [MozgC]


Отвечает _vt

Приветствую Вас, GosuProger!
Скачай архив рассылки по ассемблеру для MS-DOS c http://rusfaq.ru и внимательно прочитай первые несколько глав. До утра поймешь... (:


Ответ отправлен: 28.05.2003, 00:36
Отправитель: _vt


Отвечает Дмитрий

Приветствую Вас, GosuProger!
Надеюсь мой ответ не запоздал. Все очень просто:
mov ax, wdata ; запишет в ax 12345
mov ax, offset wdata ; запишет в ax смещение относительно начала сегмента, по которому расположено wdata
.....
wdata db 12345

Ответ отправлен: 28.05.2003, 10:24
Отправитель: Дмитрий


Отвечает Tigran K. Kalaidjian

Доброе время суток, GosuProger!
Offset=смещение от начала сегмента.
Пример применения:
mov ax, offset stri
или, что тоже самое:
lea ax, stri

Ответ отправлен: 28.05.2003, 11:02
Отправитель: Tigran K. Kalaidjian


Отвечает Bob Johnson

Приветствую Вас, GosuProger!
offset - это адрес (смещение от начала сегмента) какого-либо элемента данных или кода. Например, если ты пишешь так:
.data
d1 dw 10
d2 dw 20
То в сегменте данных переменная d1 будет расположена по адресу 0 (в начале), т.е. ее смещение будет 0, а d2 - по адресу 2 (сразу за d1), т.е. смещение будет 2.
mov ax, offset d2
даст 2 в ах.


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


 Вопрос № 3287

Извините, за ламерские мои вопросы, но вот еще 1 вопрос :
что делают строки
mov ax,@data
mov ds,ax



Вопрос отправлен: 27.05.2003, 22:10
Отправитель: GosuProger

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

Отвечает Maverick

Здравствуйте, GosuProger!
Настраивает сегментный регистр, в данном случае на сегмент данных.


Ответ отправлен: 28.05.2003, 05:27
Отправитель: Maverick


Отвечает [MozgC]

Во-первых, что такое @data - это идентификатор DATASEG при компиляции и сборки приложения на место этого слова будет поставлено реальное смещение сегмента, в котором находятся данные. Ведь до сборки программы мы этого не знаем. Так как при данному модели памяти данных хранятся в конце кода программы, то даже добавление одной команды к изменению его местоположения. И реально это число будет известно только при сборке.
А почему мы помещаем сначала в регистр AX? То же все просто есть правило - Вы не можете непосредственно изменять содержимое регистров CS,DS,SS. То есть мы не можем написать так:
mov ds,12345
Мы можем изменить этот регистр только используя другие регистры.

Ответ отправлен: 27.05.2003, 22:24
Отправитель: [MozgC]


Отвечает keleb-glin

Доброе время суток, GosuProger!
загружают в ds адрес выделенного ДОСом под данные сегмента


Ответ отправлен: 27.05.2003, 22:52
Отправитель: keleb-glin


Отвечает Дмитрий

Добрый день, GosuProger!
Эти две строчки настраивают регистр ds на твой сегмент с данными. @data - это предопределенная константа, в которой записан адрес начала сегмента данных твоей программы. Удачи!

Ответ отправлен: 28.05.2003, 10:35
Отправитель: Дмитрий


Отвечает Tigran K. Kalaidjian

Доброе время суток, GosuProger!
Инициализация регистра сегмента данных DS. Т.е. запись в ds адреса сегмента данных.
Для справки:
ds=data segment
cs=code segment
ss=stack segment
es, gs, fs - дополнительные сегменты под произвольное использование.

Ответ отправлен: 28.05.2003, 11:20
Отправитель: Tigran K. Kalaidjian


Отвечает Lynx

Приветствую Вас, GosuProger!
mov ax, @data ; - Загрузить в ax смещение сегмента даных
mov ds, ax ; - ds = ax = смещению сегиента даных.
Предчувствую вопрос: А нельзя было сразу так и написать mov ds, @data??? Отвечаю: Нельзя, т.к. в системе команд процессора нет команды 'mov ds, @data'.


Ответ отправлен: 28.05.2003, 15:21
Отправитель: Lynx


Отвечает Bob Johnson

Приветствую Вас, GosuProger!
Загружают регистр ds значением сегмента данных программы. Когда ты пишешь программу, ты еще не знаешь, в какое конкретно место памяти ее загрузит ДОС, это зависит от количества программ (резидентов, драйверов и т.д.), загруженных до твоей (каждая занимает память), поэтому в момент запуска программы дос заменит @Data на верное значение сегмента памяти, соответствующего данным твоей программы. Т.е. в реальной программе будет:
mov ax, число
mov ds: ax


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


 Вопрос № 3288

Здравствуйте!
Даже не знаю куда отправлять, поэтому в самую многочисленную.
Вот что у меня есть:
win2000 sp3
msvc 6.0 standart edition
win2000 ddk
Numega Driver Studio 2.6

Вот что у меня получается:
DDK кричит, что не работает с vc 6.0 standart edition, а работает только с Enterprise и Professional.
При создании проекта с использованием Driver Wizard от Numega - все компилится без проблем.

Как можно узнать, что делает(какие переменные настраивает и т.д.) Driver Wizard, что все работает. Я понимаю, что можно все из командной строки, но всетаки хочется разобратся.

Ещё вопрос: будет ли 2000 ddk пониматьлюбитьподдерживать MSVC 7.0???



Вопрос отправлен: 28.05.2003, 01:35
Отправитель: Илья (b.i@date.by)

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

Отвечает [MozgC]

Извини за невтемный вопрос, но пошли мне пожалуйста на email MozgCnoSpam@avtograd.ru как у тебя работает софтайс в Windows XP. Мне это надо другу сказать, а то некоотрые говорили что SoftICE из DS2.6 глючит в WinXP а друг нигде не может найти диска с DS 2.7 вот и думает стоит ли ему брать DS 2.6

Ответ отправлен: 28.05.2003, 01:43
Отправитель: [MozgC]


 Вопрос № 3289

Привет всем!
Подскажите кто знает как работать с портами в винде. Под дос на асме было просто in out. А вот в винде никак не могу найти функций для работы с портами. Кинул такой вопрос на форум мне там поприсылали ответы типа смотри CreateFile. Смотрю и ничего не вижу! Там написано про com порты и так далее. А у меня есть номер (510h) порта. И как к нему через винду достучаться-беспонятия. Буду очень благодарен.



Вопрос отправлен: 28.05.2003, 03:26
Отправитель: AlexNor

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

Отвечает Hayk

Здравствуйте, AlexNor!
_inp, _inpw, _inpd - dlya chteniya iz porta
_outp, _outpw, i _outpd - dlya zapisi v port


Ответ отправлен: 29.05.2003, 14:14
Отправитель: Hayk


Отвечает Gibbel

Здравствуйте, AlexNor!
Просто так доступ к портам из винды не возможен. Тебе надо писать свой драйвер.

Ответ отправлен: 28.05.2003, 10:01
Отправитель: Gibbel


Отвечает [MozgC]

А чем не устраивают стандартные in и out ?

Ответ отправлен: 28.05.2003, 12:02
Отправитель: [MozgC]


Отвечает Tigran K. Kalaidjian

Приветствую Вас, AlexNor!
Под Delphi - так же, как и под ДОС (см. приложение)
Не знаю, как с 510h(звук, что ли ?), но с 378h (LPT1) это проходит нормально.

Приложение:

Ответ отправлен: 28.05.2003, 13:02
Отправитель: Tigran K. Kalaidjian


Отвечает Bob Johnson

Здравствуйте, AlexNor!
Винда не разрешает всем подряд работать напрямую с портами. И это правильно - не известно, что ты там можешь написать, а ОС должна верно работать и дальше. Для работы со стандартными портами, такими как com, действительно можно использовать CreateFile, для работы же с произвольными портами - драйвер. Либо драйвер того устройства, кому принадлежит порт, либо свой собственный, который просто выполнит in или out. А команды, в принципе, те же...


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


Отвечает Maverick

Доброе время суток, AlexNor!
Я в винде новичок, но на ск-ко я знаю, винда не дает доступа к портам, надо из ring0


Ответ отправлен: 28.05.2003, 16:34
Отправитель: Maverick


Отвечает Pin

Добрый день, AlexNor!
Да точно также, только прогу лучше запускать как службу.

Ответ отправлен: 28.05.2003, 23:40
Отправитель: Pin


 Вопрос № 3290

Конкурс
Кто такой Пентковский?
Снова я получил достаточно правильных(иногда - исчерпывающих) ответов.
Да, Пентковский - это бывший советский инженер по процессоростроению. Когда государство нашей бывшей СССР стало прикрывать его работы, он уехал в США, создал Pentium, и сейчас работает в Intel ведущим инженером. Поддержи отечественного производителя - КУПИ PENTIUM!

Вопрос 3: Кто изобрёл компьютерную мышь?

P.S.: Если кто-то считает эти вопросы лёгкими, могу сказать, что задать тяжёлый вопрос легко, я придумываю интересные, познавательные вопросы.
P.P.S.: Конечно, ответ можно найти в Интернете или в книгах. Я оставляю это на совести самих экспертов. К тому же видно, кто просто знает, а кто ловко находит...



Вопрос отправлен: 28.05.2003, 09:22
Отправитель: URiS (neff.narod.ru) (urisff@inbox.ru)

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

Отвечает Дмитрий

Добрый день, URiS (neff.narod.ru)!
В принципе, на этот вопрос можно ответить серьезно. Изобретения - это самая больная тема для человечества. Как по вашему, кто изобрел радио? Маркони. Он был первым, кто применил радио по назначению. Иногда имена реальных изобретателей не упоминаются ни в патентах, ни где либо еще. Я не хочу рыться в Инете и искать фамилию человека, запатентовавшего мышь. Мне это не надо. Я точно знаю, что ребята из Apple проделали титаническую работу и именно от них пошел МЫШИННО-оконный интерфейс. Все это было ориентированно на художников и мышь была всего-лишь одним из многочисленных устройств ввода (световое перо, планшеты и т. д.). Кстати! После выхода Windows 1.0 Microsoft судилась с Apple по поводу интерфейса и выиграла процесс. Выходит Apple не создала "окошек"? И кто был первым?

Ответ отправлен: 29.05.2003, 08:51
Отправитель: Дмитрий


Отвечает [MozgC]

И по каким это параметрам видно, кот знает а кто ловко назодит ?

Ответ отправлен: 28.05.2003, 12:00
Отправитель: [MozgC]


Отвечает Ayl

Доброе время суток, URiS (neff.narod.ru)!
Не знаю, да и честно говоря, мне глубоко пофиг. Потому как мне от этого не жарко, ни холодно. Точнее, конечно, большое спасибо ему, но в моей повседневной работе его фамилия мне не требуется. Если когда-нибудь мне понадобится это найти, то мне будет не влом потратить 5 минут на поиск в Инете. Я никогда не считал, что запоминание справочной информации имеет какой-либо глубокий смысл. То, что используется постоянно и так запоминается само собой, а другое - только место в голове занимает.
С одной стороны может показаться, что я отрицаю всякие знания, которые не относятся к повседневной работе. Это не так. Просто что-то запоминается, а что-то нет. И специально прилагать усилия, что бы это запомнить я не буду. Есть вещи, которые я считаю, что обязан знать. Данный вопрос к таким вещам не относится.
Все глубоко ИМХО.

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


Отвечает Bob Johnson

Здравствуйте, URiS (neff.narod.ru)!
> Когда государство нашей бывшей СССР стало прикрывать его работы
Не все совсем так - просто оно перестало их финансировать. Самое интересное, что процессор Пентковского (Эльбрус, кажется) работал ТОЛЬКО в программе эмуляции, которая работала на тех же IBM... Поэтому совсем не факт, что он мог бы вообще завершить эту работу, т.к. при переходе от эмуляции к реальному железу возникает куча проблем. Может быть все как раз и закончилось именно потому, что получить реального образца не представлялось возможным...
> что задать тяжёлый вопрос легко
Не факт. Хороший и действительно качественный вопрос всегда задать трудно. А вот как раз в стиле "Кто придумал..." - это да. Вот, например, кто первым сделал клавиши фортепьяно?... и т.д.
> Конечно, ответ можно найти в Интернете или в книгах. Я оставляю это на совести самих экспертов
Знаешь, с точки зрения эффективности русфака - это монопенисуально (sorry), потому как конечному читателю, особенно тому, кому лень просто зайти на yandex или google совершенно не важно, где был взят ответ. Главное, чтобы он ему подходил.
Да, еще вот что - если уж ты тут решил поднять популярность рассылки за счет "интересных и познавательных" вопросов - то делай это один раз на один выпуск рассылки - так действительно будет интересно и читателям и экспертам. Будет интересней просто смотреть выпуски потом. Но когда таких вопросов будет в одном выпуске 3, то это уже даст обратный эффект...


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


 Вопрос № 3291

Я только читатель этой рассылки, но на вопрос 3256 & 3257
могу дать ответ потому как имел похожую проблемму.Сорри за вмешательство!(Обратите внимание на первый параметр регистрации хука, работает в теле основной проги)


Приложение:


Вопрос отправлен: 28.05.2003, 10:28
Отправитель: Evgen

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

Отвечает Bob Johnson

Доброе время суток, Evgen!
Это, конечно, хорошо, но!
Так вот, но - самая большая проблема при установке хуков заключается в следующем - почему, как вы думаете, написано в мсдн что системый хук должен находиться в библиотеке? Да просто потому, чтобы для выполнения своих функций эта библиотека подгружалась в адресное пространство других процессов. Таким образом мы имеем то, что каждый процесс будет иметь свою копию сегмента данных dll, отличную от других. Что это значит? А то, что в приведенном тобой примере fApp.Handle будет иметь правильное значение только для одного процесса - того, который и поставил это хук... В других же там в лучшем случае будет 0!
Для того, чтобы с этим бороться необходимо:
1. Создать shared data segment, который будет общим у dll во всех процессах. Тогда в нем будет храниться информация, например, о хэндле главного окна приложения, которому процедура хука будет пересылать (посылать) сообщения. Все ок...
2. ИЛИ - создать какой-либо способ получения какого-либо уникального в системе средства связи с главным приложением. Например, можно в DLLMain вызывать FindWindow главного окна, тогда каждый процесс выполнит эту функцию по 1 разу и у всех будет hwnd.
Как сделать (1) я, например, не знаю :(. Поэтому всегда пользуюсь (2).
(*) Замечания: главная особенность хуков - возможность "внедрения" в чужие приложения под 95/98/МЕ - мы как-бы заставляем приложение загрузить нашу библиотеку. Можно этим пользоваться при создании, например, вирусов и всего такого - на DLLMain делаем CreateThread, после чего спокойно отключаемя от приложения. DLL можно даже выгрузить... А поток-то останется (сам еще не проверял, но должно быть так).
Под НТ системы есть CreateRemoteThread - если есть права, то вперед... Но под НТ и хуки-то не всегда (читай оочень редко) подключаются к другим процессам. Обычно они выполняют свои функции "как-нибудь так", в контексте твоего процесса. Часто это удобно, потому что не надо заморачиваться с данными. Например, у меня работает хук WH_LOWLEVEL_KEYB (или как там?), в общем клавиатурный, который находится в моей программе (даже не в dll), работает везде, при этом никаких проблем с данными - просто я делаю SendMessage (или что-то еще).
В общем, надо с этим вопросом быть внимательным, особенно в первый раз :).


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


 Вопрос № 3293

Здавствуйте Гуру(ы)!
С помощью какой-то матери и божьей тоже написал вот это.Ура получилось.Но работает только на PC.На моём ноутбуке не хочет.Ноутбук-400мг 32мб.
Может кто-нибудь подскажет где загвостка.Я не имею практического опыта.И ещё.Может быть проблема в самом ноутбуке?
.386p
IDEAL
MODEL small
STACK 1024
ComPort = 0 ;0 = COM1:,1 = COM2
IF ComPort EQ 0
Port EQU 03F8h ;8250-Basisadresse
VectorNum EQU 0Ch ;Interrupt Vektornummer
EnableIRQ EQU 0EFh ;Maske enable 8259 IRQ
DisableIRQ EQU 10h ;Maske disable 8259 IRQ
ELSEIF ComPort EQ 1
Port EQU 02F8h ;siehe oben
VectorNum EQU 0Bh
EnableIRQ EQU 0F7h
DisableIRQ EQU 08h
ELSE
DISPLAY "ComPort muss 0 oder 1 sein!"
ERR
ENDIF
;----- Register Adressen RS232
TxRegister = Port + 0 ;Transmit Register
RxRegister = Port + 0 ;Receive Register
IntEnable = Port + 1 ;Interrupt Enable Register
IntIdent = Port + 2 ;Interrupt Identification
LineControl = Port + 3 ;Line Control Register
ModemControl = Port + 4 ;Modem Control Register
LineStatus = Port + 5 ;Line Status Register
ModemStatus = Port + 6 ;Modem Status Register
;----- Andere Equates
Ctrl8259_0 EQU 020h ;8259 Port
Ctrl8259_1 EQU 021h ;8259 Port (Masken)
EOI EQU 020h ;8259 End-of-Interrupt
BufSize EQU 32768 ;Groesse Inputpuffer
cr EQU 13 ;ASCII Carriage Return
lf EQU 10 ;ASCII Line Feed
bd9600 EQU 0e3h ;9600 Baud, keine Paritaet
;1 Stopbit, 8 Datenbits
ExitKey EQU 100 ;GetCh Wert fr F10


Приложение:


Вопрос отправлен: 28.05.2003, 13:35
Отправитель: Rosa (comtech@gmx.de)

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

Отвечает Дмитрий

Доброе время суток, Rosa!
Так не честно! Давай прогу полностью!

Ответ отправлен: 28.05.2003, 13:51
Отправитель: Дмитрий


Отвечает baldr

Здравствуйте, Rosa!
Скорей всего, просто адрес порта на ноутбуке другой...
Или модем вообще не на том порту висит.

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


Отвечает Bob Johnson

дНАПНЕ БПЕЛЪ ЯСРНЙ, Rosa!
с РЕАЪ-РН МЮБЕПМНЕ ЛНДЕЛ МЮ PC-РН НАШВМШИ, ЙНРНПШИ Й com-ОНПРС ОНДЙКЧВЮЕРЯЪ, Ю МЮ МНСРАСЙЕ - PCMCI, ЙНРНПШИ БННАЫЕ МЕ ОНДЙКЧВЮЕРЯЪ МХ Й ЙЮЙНЛС com-ОНПРС. бХДХЛН ОНЩРНЛС Х МЕ ПЮАНРЮЕР (РНКЭЙН БНР ВРН С РЕАЪ МЕ ПЮАНРЮЕР, Ъ РЮЙ Х МЕ ОНМЪ ...)

Ответ отправлен: 29.05.2003, 03:24
Отправитель: Bob Johnson


 Вопрос № 3294

Привет, эксперты!
Кто знает, как правильно задавать слэши и бэкслеши в вопросах и ответах (дублировать их что-ли)? См. мой ответ на вопрос 3260. Боюсь я этим "ответом" человека только запутал.



Вопрос отправлен: 28.05.2003, 13:58
Отправитель: Дмитрий (demetrius2003@mail.ru)

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

Отвечает [MozgC]

А как посмотреть ответ на какой-либо вопрос?

Ответ отправлен: 28.05.2003, 14:02
Отправитель: [MozgC]


Отвечает Gibbel

Здравствуйте, Дмитрий!
Угадал, дублировать... ;-)

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


Отвечает Ayl

Доброе время суток, Дмитрий!
Бек-слеш считается экранирующим символом, соответственно, его нужно дублировать, чтобы получить одиночный бек-слеш.
Простой слеш допускается употреблять просто так.
Апостроф и кавычки также нужно экранировать, иначе вопрос (ответ) не будет отправлен.

Ответ отправлен: 28.05.2003, 14:46
Отправитель: Ayl


Отвечает Bob Johnson

Приветствую Вас, Дмитрий!
слеш ("/") задается как есть - т.е. просто.
бэкслеш ("\") повторяется два раза.
Еще, чтобы написать знак больше (>), например, надо писать его через амперсант: >

Ответ отправлен: 29.05.2003, 03:52
Отправитель: Bob Johnson


 Вопрос № 3295

Здравствуйте!
К примеру, имеется три файла: Vasya.txt, Pupkin.exe и Cool_dude.chm. Каким образом можно всё перегнать в один файл Dude.exe, чтобы потом при запуске этого файла, он (Dude.exe) восстанавливал обратно прежние три файла. Короче, нужно что-то вроде инсталлятора.
И ещё:
mov eax,offset Vasya_Pupkin
lea eax,Vasya_Pupkin
mov eax,[Vasya_Pupkin]
Это одно и тоже или нет?
Большое спасибо!



Вопрос отправлен: 28.05.2003, 14:06
Отправитель: Drahus (Drahus@yandex.ru)

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

Отвечает Tigran K. Kalaidjian

Здравствуйте, Drahus!
1.Это умеет практически любой современный архиватор. Только создавать надо не простой, а sfx-архив, т.е. самораспаковывающийся.
2. Первая и вторая процедуры эквивалентны - записывают в eax смещение, т.е. АДРЕС Vasya_Pupkin, а третья процедура запихивает в eax значение, располагающееся в памяти по адресу, записанному в Vasia_Pupkin.

Ответ отправлен: 29.05.2003, 09:40
Отправитель: Tigran K. Kalaidjian


Отвечает Hayk

Доброе время суток, Drahus!
Dumayu nado sozdat' binarni resurs dlya kajdogo faila vnutri etogo novogo exe installyatora. I zapisat' kod, kotory chitayet eti binarnie dannie, zapisyvayet v fail.

Ответ отправлен: 29.05.2003, 14:23
Отправитель: Hayk


Отвечает Дмитрий

Добрый день, Drahus!
Самое простое, по-моему, использовать самораспаковывающийся архив. Если он тебя по какой-либо причине не устраивает, то возьми любой инсталляционный пакет. Благо их сейчас развелось тьма-тьмущая. По поводу команд. Строго говоря все они родят разные опкоды. Но первые две одинаковы по смыслу, они загружают в eax смещение, по которому расположена переменная. Последняя команда загрузит в eax саму переменную.

Ответ отправлен: 29.05.2003, 07:32
Отправитель: Дмитрий


Отвечает [MozgC]

mov eax, offset Vasya_Pupkin
помещает в eax смещение Vasya_Pupkin относительно сегмента данных
lea eax, Vasya_pupkin - тоже самое
mov eax, [Vasya_pupkin] - помещает в eax 4 байта хранящиеся по адресу Vasya_pupkin

Ответ отправлен: 28.05.2003, 14:19
Отправитель: [MozgC]


Отвечает masquer

Доброе время суток, Drahus!
Архивируешь все в один файл, дописываешь распаковщик и все.
Про еще - не не одно и тоже, по крайней мере в первых двух вариантах в eax будет адрес переменной, а в последнем случае - первые 4 байта переменной, и то есть dword ptr поставить перед скобками.

Ответ отправлен: 28.05.2003, 14:39
Отправитель: masquer


Отвечает Ayl

Добрый день, Drahus!
1. arj a dude -je -y Vasya.txt Pupkin.exe Cool_dude.chm
2. В данном случае mov eax, offset Vasya_Pupkin и lea eax, Vasya_Pupkin обозначают одно и то же - загрузку смещения метки Vasya_Pupkin в сегменте.
mov eax, [Vasya_Pupkin] - совсем другое, а именно загрузку 4 байт, расположенных по метке Vasya_Pupkin в регистр eax

Ответ отправлен: 28.05.2003, 14:55
Отправитель: Ayl


Отвечает St

Привет, Drahus!
mov eax,offset Vasya_Pupkin - да
lea eax,Vasya_Pupkin - да
mov eax,[Vasya_Pupkin] - нет
St


Ответ отправлен: 28.05.2003, 15:19
Отправитель: St


Отвечает baldr

Здравствуйте, Drahus!
Если тебе все равно как это делать, то могу посоветовать архиватор RAR, который может делать довольно неплохие вещи... Я с помощью его скриптового языка писал свои инсталляшки. Правда, DOS-овские, но виндовый, AFAIK, еще проще...

Ответ отправлен: 28.05.2003, 15:45
Отправитель: baldr


Отвечает Lynx

Добрый день, Drahus!
1. Да любой Install Maker из инета слей и он тебе всё сделает. Или ИМХО в MS Visual Studio такая хрень есть "Package Wizard" или что то в этом роде.
2. Вобщем то mov eax,offset Vasya_Pupkin и lea eax,Vasya_Pupkin это одно и тоже, а вот mov eax,[Vasya_Pupkin] - это уже не смещение переменной а её значение.



Ответ отправлен: 28.05.2003, 15:49
Отправитель: Lynx


Отвечает Maverick

Приветствую Вас, Drahus!
Есть же готовые программы, можно и самому написать, только надо ли?
mov eax,offset Vasya_Pupkin
lea eax,Vasya_Pupkin
В данном случае одно и тоже...
mov eax,[Vasya_Pupkin]
А здесь загрузится двойное слова с адреса "Vasya_Pupkin"
Да погляди в отладчике...

Ответ отправлен: 28.05.2003, 16:34
Отправитель: Maverick


Отвечает Bob Johnson

1. Пишешь программу, которая (зная размер своего выполняемого файла) находит, что к нему приписано дальше в специальном формате и вытаскивает это в отдельные файлы.
2. Берешь и приписываешь к этому файлу в специальном (в том, как сделал) формате эти нужные файлы.
3. Запускаешь его, он находит их и спокойно распаковавает.
Но для создания инсталлятора тогда уж лучше использовать что-то типа WinRar и SFX архив.
> mov eax,offset Vasya_Pupkin
> lea eax,Vasya_Pupkin
Это одно и то же.
> mov eax,[Vasya_Pupkin]
А это - нет.

Ответ отправлен: 29.05.2003, 03:56
Отправитель: Bob Johnson



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

Внимание!
Мы рекомендуем открывать рассылку в программе Internet Explorer 5.0+ или отправлять вопросы с сайта по адресу: http://rusfaq.ru/cgi-bin/Message.cgi.

(C) 2002-2003 Команда RusFAQ.ru.

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

Ваше имя:

Ваш e-mail:

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


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

Ваш вопрос:


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


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


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

Программисту
Assembler (40)
C / C++ (31)
Perl (5)
Builder / Delphi (15)
Pascal (29)
Basic / VBA (12)
Java / JavaScript (11)
PHP (7)
MySQL / MSSQL (5)
Пользователю
Windows 95/98/Me (36)
Windows NT/2000/XP (29)
"Железо" (28)
Поиск информации (14)
Администратору
Windows NT/2000/XP (15)
Linux / Unix (9)
Юристу
Гражданское право (5)
Семейное право (2)
Трудовое право (3)
КоАП (3)

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




Задать вопрос | Регистрация эксперта | Поиск в базе | Чат | Форумы | Новости
Проект экспертов RusFAQ.ru | Фотоальбом | Virus.RusFAQ.ru | Администрирование


Яндекс цитирования
© 2001-2003 Россия, Москва. Авторское право: Калашников О.А.


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

В избранное