Рассылка закрыта
При закрытии подписчики были переданы в рассылку "RFpro.ru: Ассемблер? Это просто! Учимся программировать" на которую и рекомендуем вам подписаться.
Вы можете найти рассылки сходной тематики в Каталоге рассылок.
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.
Вопрос и дополнение |
Ваш вопрос:
Приложение (если необходимо):
Получить ответов:
Выбор рассылки |
Программисту 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.
http://subscribe.ru/
E-mail: ask@subscribe.ru |
Отписаться
Убрать рекламу |
В избранное | ||