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

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


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

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

Выпуск № 713
от 20.04.2004, 11:30

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


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

_vt
Статус: Профессиональный
Общий рейтинг: 117.65
[Подробней >>]
Foamplast
Статус: Профессиональный
Общий рейтинг: 151.54
URL: мой личный сайт
[Подробней >>]
Acid Burn
Статус: Доверительный
Общий рейтинг: 147.36
[Подробней >>]
 
VOVAN
Статус: Доверительный
Общий рейтинг: 105.05
[Подробней >>]
Portnov
Статус: Профессиональный
Общий рейтинг: 106.08
URL: Мой сайтик...
[Подробней >>]
Artemy
Статус: Опытный
Общий рейтинг: 112.9
Телефон: 8 905 549 38 66
[Подробней >>]
 
Pawel
Статус: Профессиональный
Общий рейтинг: 159.23
[Подробней >>]
Евгений Иванов
Статус: Профессиональный
Общий рейтинг: 133.53
URL: Super Assembler Software
Телефон: НСС +7 831 3107039
[Подробней >>]
ASMодей
Статус: Профессиональный
Общий рейтинг: 111.7
[Подробней >>]
 
fC
Статус: Профессиональный
Общий рейтинг: 136.38
URL: Самоподобие сетевого трафика
[Подробней >>]
flasher
Статус: Начальный
Общий рейтинг: 118.18
[Подробней >>]
SedHg
Статус: Опытный
Общий рейтинг: 111.83
[Подробней >>]
 
Dark_Lord
Статус: Профессиональный
Общий рейтинг: 109.87
[Подробней >>]


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

Вопрос № 5145. hello! я хочу спросить у вас про win & openGL у меня есть окно с графикой и вызовом messagebox графи... (ответов: 2)
Вопрос № 5146. Добрый день, уважаемые эксперты. Не сочтите за тупость, но почему если засунуть программу (любую) в ... (ответов: 5)
Вопрос № 5147. Я задавал вопрос (№5140) по поводу того что загрузчику нужна таблица импорта. Ответил Евгений Иванов... (ответов: 4)
Вопрос № 5150. > Ваш Вопрос № 5146 > Добрый день, уважаемые эксперты. > Не сочтите за тупость, но почему если засун... (ответов: 5)
Вопрос № 5151. Пишу: .data ScreenBufferSize COORD <> .code mov ScreenBufSi... (ответов: 3)
Вопрос № 5152. рассссьти... а что с сервером было я неделю не мог попасть сюда?... ну это еще не вопрос, вопрос вот... (ответов: 5)
Вопрос № 5154. Пожалуста обясните как ползоваться программой MASM 6.11 под WIN2000? Программу в NC нобрал но MASM с... (ответов: 9)

Вопросов: 7, ответов: 33


 Вопрос № 5145

hello!
я хочу спросить у вас про win & openGL
у меня есть окно с графикой и вызовом messagebox
графика - всё нормально.
а вот messagebox не видно сразу, а только после нажатия ALT. Что же это такое и как с этим бороться?
(а вот в DELphi - всё ок)
и ещё. Visual c++ 6 делает из СРР аsм, но жутко корявит имена функций, и вообще не сильно дружит с TASM32/TLINK32.
можно ли образумить этот компилятор, и если да, то как?



Вопрос отправлен: 13.04.2004, 16:11
Отправитель: soflot (soflot@ukr.net)

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

Отвечает _vt

Добрый день, soflot!
> Visual c++ 6 делает из СРР аsм, но жутко корявит имена функций, и вообще не сильно дружит с TASM32/TLINK32.
Для того, чтобы не было проблем, используй VC+MASM. Или BCB+TASM.
E-Man : Life begins at 1000Mhz!


Ответ отправлен: 14.04.2004, 23:41
Отправитель: _vt


Отвечает Foamplast

Здравствуйте, soflot!
1. Проследи сообщения окну (например, с помощью Spy++), может там послать чего-нибудь надо.
2. "Корявить" по-английски будет "mangle". Это называется манглинг (mangling). Компиляторы так кодируют информацию, чтобы по имени функции узнать, что она делает и какие ей параметры надо.
3. Если уж взял Microsoft Visual C, то и ассемблер бери от Microsoft - MASM. Хотя меня настолько заколебали все эти несовместимости и настройки, что я пересел на NASM и его только и использую сейчас.


Ответ отправлен: 17.04.2004, 13:30
Отправитель: Foamplast


 Вопрос № 5146

Добрый день, уважаемые эксперты.
Не сочтите за тупость, но почему если засунуть программу (любую) в дизассемблер там нигде нет int21, хотя известно, что программа работает с файлами. И еще вопрос, что такое int 03 ?



Вопрос отправлен: 13.04.2004, 20:11
Отправитель: thirteenth

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

Отвечает Acid Burn

Приветствую Вас, thirteenth!
Дп потому. что многие программы работают либо с портами, либо напрямую сжестким диском


Ответ отправлен: 14.04.2004, 15:11
Отправитель: Acid Burn


Отвечает VOVAN

Добрый день, thirteenth!
какой дизасемблер?
int 03 - прерывание, которое использует дизассемблер.
прога может работать с хардом.

Ответ отправлен: 14.04.2004, 18:34
Отправитель: VOVAN


Отвечает Portnov

Доброе время суток, thirteenth!
У меня первое предположение - программа под Винду? Тогда там int21h и быть не может...

Ответ отправлен: 14.04.2004, 19:39
Отправитель: Portnov


Отвечает Artemy

Здравствуйте, thirteenth!
Вот пример использования int 21h без вызова int 21h:
.model tiny
.code
.286
org 100h
start:
push cs
pop ds
mov si,offset vector_int_21
xor ax,ax
mov es,ax
mov bx,es:[21h*4]
mov ax,es:[21h*4+2]
mov ds:[si],bx
mov ds:[si+2],ax


mov ax,0900h
mov dx,offset txt1
pushf
call cs:[vector_int_21]

mov ax,4C00h
pushf
call cs:[vector_int_21]

vector_int_21 dd ?
txt1 db 0Dh,0Ah,'Hello world',24h

end start


Ответ отправлен: 16.04.2004, 10:18
Отправитель: Artemy


Отвечает Foamplast

Приветствую Вас, thirteenth!
Скорее всего, если программа не специального назначения, то она вызывает библиотечные функции, а в них и есть int21. Также можно без прерываний читать диск по портам, но это только в специальных программах, потому что сложно и не на всех дисках получится одинаково. Также можно читать диск с помощью BIOS (int13, если не ошибаюсь).
Int 03 - прерывание, генерируемое командой INT3. Это однобайтная команда с кодом 0хСС, её отладчики вставляют вместо первого байта команды, на которой поставлена точка останова. Получив прерывание, отладчик восстанавливает байт и делает всё, что надо.


Ответ отправлен: 17.04.2004, 13:30
Отправитель: Foamplast


 Вопрос № 5147

Я задавал вопрос (№5140) по поводу того что загрузчику нужна таблица импорта.
Ответил Евгений Иванов: "Загрузчику не нужна таблица!
Она нужна тебе, чтобы работали функции, нужные для распаковки."
Ну я не знаю как надо задавать вопрос, чтоб было ясно, что я не верблюд:)
Мне таблица НЕ НУЖНА! Я сам гружу нужные библиотеки и функции.
Ну если и загрузчику она не нужна, тогда объясните одну простую вещь. Почему при обнулении соответсвующих импорту (смещение и размер таблицы импорта) полей в ПЕ-заголовке запустить программу не удаётся. То есть прога не глючит, а просто процесс не создаётся.
Логично ведь, что прога, не использующая импорт, то бишь АПИ-функции, в винде работать не будет. То есть так загрузчик думает. Вот я и спрашиваю, а какую собственно таблицу по минимуму ему надо?
Если я не прав, то в чём?
Спасибо.



Вопрос отправлен: 14.04.2004, 01:17
Отправитель: ПАПА

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

Отвечает Pawel

Здравствуйте, ПАПА!
Создай хотя-бы минимальную таблицу импорта, и не мучийся.

Ответ отправлен: 17.04.2004, 17:53
Отправитель: Pawel


Отвечает Евгений Иванов

Здравствуйте, ПАПА!
Не забивай этим себе голову. :)
* EMan: -=- Любовь существует! =-=


Ответ отправлен: 16.04.2004, 22:18
Отправитель: Евгений Иванов


Отвечает Portnov

Здравствуйте, ПАПА!
Не, мне интересно, как вы будете "грузить нужные библиотеки и функции"? Ну пусть даже не LoadLibrary/GetProcAddress, ну тогда что - CreateFile/ReadFile? Это ведь все WinAPI! Или вообще через int29h !?
Мой вам совет - не мучайтесь и импортируйте LoadLibrary и GetProcAddress из kernell32.dll, ну или из него же CreateFile, ReadFile, CloseHandle. Без всего остального обойтись несложно.

Ответ отправлен: 14.04.2004, 19:43
Отправитель: Portnov


Отвечает Foamplast

Здравствуйте, ПАПА!
Насчёт верблюдов не вопрос, у них копыта на клавиши не уместятся. Да и мышь возить неудобно. Таблица импорта действительно нужна, Евгений Иванов просто в лесу долго ходил. Как я уже писал, достаточно импортировать ЛЮБУЮ функцию из ЛЮБОЙ библиотеки. Это я сто раз проверял. Теоретически проверку можно сделать тщательнее, но тогда загрузчик тормозить будет, вот он и смотрит, чтобы что-нибудь да было.
Кстати, глянул сейчас программу Pixie, запакованную UPX-ом. Там есть нормальная таблица импорта. И какой-то mslaugh.exe (троян, что ли), я его подцепил откуда-то, он тоже UPX-ом запакован и тоже есть таблица импорта. Она правда расширяется во время распаковки, но, судя по вопросу, Вам с этим всё ясно.
И ещё, всё что я сказал относится к Windows 2000. То есть это должно быть так же и на XP, но не обязательно, а вот про 9Х вообще ничего не могу сказать.


Ответ отправлен: 17.04.2004, 13:31
Отправитель: Foamplast


 Вопрос № 5150

> Ваш Вопрос № 5146
> Добрый день, уважаемые эксперты.
> Не сочтите за тупость, но почему если засунуть программу (любую) в дизассемблер там нигде нет int21, хотя известно, что программа работает с файлами. И еще вопрос, что такое int 03 ?
> Вопрос отправлен: 13.04.2004, 20:11
>
> Отвечает Acid Burn
> Приветствую Вас, thirteenth!
> Дп потому. что многие программы работают либо с портами, либо напрямую сжестким диском
А как можно узнать где прога открывает файл, пишет в него etc ?
--
С уважением,
thirteenth mailto:yury_lo@mail.ru



Вопрос отправлен: 14.04.2004, 20:55
Отправитель: thirteenth

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

Отвечает Pawel

Приветствую Вас, thirteenth!
Вообщето это зависет от типа платфотмы под которую работает прога(dos,win,Linyx).
int 03 это перрывание отладчика, ставится для остановки проги и её отладки,


Ответ отправлен: 17.04.2004, 18:02
Отправитель: Pawel


Отвечает _vt

Здравствуйте, thirteenth!
Отвечу сначала:
> если засунуть программу (любую) в дизассемблер там нигде нет int21, хотя известно, что программа работает с файлами.
Судя по постановке вопроса, если ТЫ "засунешь" любую программу в дизассемблер, то не увидишь там ничего, даже если там есть всё, что тебе нужно. Ответь на вопросы: программа под DOS? Программа не упакована? В какой дизассемблер и как ты ее "засовываешь"? Если ты используешь Win32-программы, то никаких int21 там и нету.

И еще вопрос, что такое int 03 ?
Это прерывание отладчика.
> Дп потому. что многие программы работают либо с портами, либо напрямую сжестким диском
А как можно узнать где прога открывает файл, пишет в него etc ?
Это можно узнать с помощью дизассемблера. ;-)

Не сочтите за тупость

Это не тупость, это просто нехватка знаний.
В общем, займись изучением ассемблера сначала, если тебя это всё-таки интересует.
E-Man : Life begins at 1000Mhz!


Ответ отправлен: 14.04.2004, 23:41
Отправитель: _vt


Отвечает Acid Burn

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


Ответ отправлен: 15.04.2004, 07:13
Отправитель: Acid Burn


Отвечает Евгений Иванов

Здравствуйте, thirteenth!
Существует 19-ое прерывание.
Его и используй.
А порт 1F0h, 170h
Удачи!
* EMan: -=- Любовь существует! =-=


Ответ отправлен: 17.04.2004, 14:03
Отправитель: Евгений Иванов


Отвечает Foamplast

Добрый день, thirteenth!
Если программа запрашивает имя файла, то надо искать его в памяти и в отладчике ставить точку останова на обращение к этому месту в памяти.
Если нет, можно попробовать искать обращения к портам ввода-вывода в диапазоне от 0х1F0 до 0х1F7.
А ещё можно поискать вызов int 13.


Ответ отправлен: 17.04.2004, 13:31
Отправитель: Foamplast


 Вопрос № 5151

Пишу:
.data
ScreenBufferSize COORD <>
.code
mov ScreenBufSize.x,80
mov ScreenBufSize.y,25
invoke SetConsoleScreenBufferSize,OutputStdHandle,ScreenBufferSize
Реакция -- нулевая. В чём проблема? Юзаю MASM32. Дайте пример использования на нём SetConsoleScreenBufferSize.



Вопрос отправлен: 15.04.2004, 05:35
Отправитель: Adr

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

Отвечает Pawel

Здравствуйте, Adr!
В данном куске кода ошибок невидно.
Может дело в чём то другом.

Ответ отправлен: 17.04.2004, 18:05
Отправитель: Pawel


Отвечает _vt

Здравствуйте, Adr!
Какую ошибку возвращает функция? (Используя GetLastError)
E-Man : Life begins at 1000Mhz!


Ответ отправлен: 17.04.2004, 15:38
Отправитель: _vt


Отвечает Acid Burn

Добрый день, Adr!
Я не уверен но может быть проблема в обьявлении данный!


Ответ отправлен: 15.04.2004, 07:08
Отправитель: Acid Burn


 Вопрос № 5152

рассссьти... а что с сервером было я неделю не мог попасть сюда?...
ну это еще не вопрос, вопрос вот он:
я вот думаю как задержку на ассме сдалать? я читал че-то у Джордейна, но так у меня ничего и не заработало, а в другой книге я вот что видел: (см. прил.)
так вот я и думаю, а откуда мы знаем сколько времени будет продолжаться этот цикл? (ну который loop @@1)...
заранее спасибо


Приложение:


Вопрос отправлен: 15.04.2004, 10:32
Отправитель: очень хочу научиться

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

Отвечает Pawel

Здравствуйте, очень хочу научиться!
Нужно использовать прерывание таймера.
Ваш способ будет зависеть от скорасти процессора.

Ответ отправлен: 17.04.2004, 18:07
Отправитель: Pawel


Отвечает _vt

Приветствую Вас, очень хочу научиться!
Скачай это: http://kalaidjian.narod.ru/rusfaq.rar. Там есть ответ на твой вопрос и на твои будущие вопросы =)
E-Man : Life begins at 1000Mhz!


Ответ отправлен: 17.04.2004, 15:38
Отправитель: _vt


Отвечает VOVAN

Здравствуйте, очень хочу научиться!
вроде бы так.

Приложение:

Ответ отправлен: 15.04.2004, 18:05
Отправитель: VOVAN


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

Добрый день, очень хочу научиться!
Такими задержками пользоваться не нужно. Предсказать какая будет задержка можно только экспериментальным путем. А на современных процессорах такие циклы вообще выполняются чуть ли не за 1 такт.

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


Отвечает Foamplast

Приветствую Вас, очень хочу научиться!
"а откуда мы знаем сколько времени будет продолжаться этот цикл?"
Из опыта. В этом примере задержка действительно зависит от скорости процессора.
Рекомендую использовать способы, предоставляемые операционной системой.
Если же система не предоставляет такого способа, то она наверное согласится передать нам прерывание от таймера.
Либо можно единожды замерить одну секунду и посчитать количество прошедших тактов командой RDTSC. Она, правда, не последовательная. То есть на момент снятия показаний счётчика может ещё продолжать выполняться предыдущая команда либо начать выполняться следующая. Но это самый точный метод.


Ответ отправлен: 17.04.2004, 13:31
Отправитель: Foamplast


 Вопрос № 5154

Пожалуста обясните как ползоваться программой MASM 6.11
под WIN2000? Программу в NC нобрал но MASM сказал отдыхай.

Почему debug не распознает команду mov dx,offset String
и вобще что это такое offset String
С Уважением Юрий!



Вопрос отправлен: 16.04.2004, 11:23
Отправитель: Yuri

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

Отвечает Pawel

Доброе время суток, Yuri!
Ну если MASM сказал... тут нечего не поделать.
Лучьше поставь версию поновее.

Ответ отправлен: 17.04.2004, 18:14
Отправитель: Pawel


Отвечает _vt

Здравствуйте, Yuri!
Если MASM сказал "отдыхай", тебе действительно нужно отдохнуть. ;-)
E-Man : Life begins at 1000Mhz!


Ответ отправлен: 17.04.2004, 15:38
Отправитель: _vt


Отвечает fC

Здравствуйте, Yuri!
Offtopic, но все-таки: переходите на fasm, он до сих пор развивается и ни каких проблем с новыми осями у него нет.

Ответ отправлен: 16.04.2004, 19:33
Отправитель: fC


Отвечает Acid Burn

Добрый день, Yuri!
1) Конфликт версий команднй строки. Ведь ВИНД2К это 32-битная ОС, а МАСМ - написан под 16-битную.
2) Offset string - эта строка означает смещение переменной в памяти.


Ответ отправлен: 17.04.2004, 22:09
Отправитель: Acid Burn


Отвечает flasher

Здравствуйте, Yuri!
Ставьте http://www.masm32.com/masmdl.htm 8'ую версию, и не мучайтесь. С GUI интерфейсом.

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


Отвечает SedHg

Здравствуйте, Yuri!
Вопервых, MASM говорит, что-то конкретное, а не "отдыхай", выражайся ясней.
Начну ответ на твои вопросы с последнего.
>>и вобще что это такое offset String
offset - это ассемблерная директива, говорящая транслятору, вставить в данном месте смещение строки от начала сегмента.
>>Почему debug не распознает команду mov dx,offset String
Есть некоторые операции, которая Debug не может проделать (в отличие от ассембера): ссылка на
метки, offset, тот же самый, и много еще чего, что невозможно сразу перевести в машинный код.

P.S. если тебя интересует Debug, прочитай статью Nyron'a "DZebug: руководство юZверя", она находится на
сайте wasm.ru


Ответ отправлен: 16.04.2004, 16:58
Отправитель: SedHg


Отвечает VOVAN

Здравствуйте, Yuri!
в NC копируешь прогу в каталог с масмом, заходишь в тот каталог. набираешь с клавы ml.exe program.asm /AT
жмешь ввод. кстати, а какую ошибку выдаёт масм?
offset String - вместо этого компилятор поставит адрес, на который указывает метка String.

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


Отвечает Dark_Lord

Приветствую Вас, Yuri!
offset String это число!, которое генерируется компилятором!

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


Отвечает Foamplast

Здравствуйте, Yuri!
1. Скорее всего у Вас masm для DOS. Надо masm для Windows. На сайте www.dmk.ru есть файлы к книге Зубкова "Assembler для DOS, WINDOWS и UNIX". Там есть masm 6.13, который работает под windows.
2. offset String - адрес в памяти переменной String.
А вообще хотелось бы знать подробнее, как именно Вам посоветовали отдохнуть и как именно debug не распознал команду.


Ответ отправлен: 19.04.2004, 08:37
Отправитель: Foamplast



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

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

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

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

Ваше имя:

Ваш e-mail:

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


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

Ваш вопрос:


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


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


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

Программисту
Assembler (22)
C / C++ (12)
Perl (1)
Builder / Delphi (16)
Pascal (16)
Basic / VBA (2)
Java / JavaScript (3)
PHP (9)
Криптография (6)
WinAPI (9)
Радиоэлектроника (6)
Пользователю
Windows 95/98/Me (32)
Windows NT/2000/XP (48)
"Железо" (23)
Поиск информации (15)
Администратору
Windows NT/2000/XP (23)
Linux / Unix (7)
Юристу
Гражданское право (9)
Семейное право (7)
Трудовое право (8)
КоАП (6)

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




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


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


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


В избранное