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

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


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

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

Выпуск № 421
от 20.11.2002, 17:00

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


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

Bob Johnson
Статус: Профессиональный
Общий рейтинг: 155.4
[Подробней >>]
masquer
Статус: Профессиональный
Общий рейтинг: 152.14
[Подробней >>]
Ayl
Статус: Профессиональный
Общий рейтинг: 117.41
[Подробней >>]
 
Maverick
Статус: Опытный
Общий рейтинг: 136.53
URL: Задачи по ассемблеру
Телефон: 89039415024 (BiLine GSM)
[Подробней >>]
Broken Sword
Статус: Профессиональный
Общий рейтинг: 130.2
URL: моя рассылка по Protected Mode
[Подробней >>]
Dark_Lord
Статус: Профессиональный
Общий рейтинг: 125.85
[Подробней >>]
 
keleb-glin
Статус: Начальный
Общий рейтинг: 118.18
[Подробней >>]
ASMодей
Статус: Профессиональный
Общий рейтинг: 120.2
[Подробней >>]
GL
Статус: Опытный
Общий рейтинг: 104.06
[Подробней >>]
 
LIFO
Статус: Профессиональный
Общий рейтинг: 127.21
URL: наш сайт
Телефон: 8 01710 24758
[Подробней >>]
Gibbel
Статус: Профессиональный
Общий рейтинг: 108.45
URL: Страничка обо мне и моих друзьях
[Подробней >>]
Portnov
Статус: Профессиональный
Общий рейтинг: 117.28
URL: Мой сайтик...
[Подробней >>]


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

Вопрос № 1815. Broken sword, отправь и мне сырец с издевками над таймером, пожалуйста. Нельзя ли вместо call Next N... (ответов: 5)
Вопрос № 1816. У меня проблема - я учусь програмировать на встроеном в Delphi Ассемблере и мне надо написать програ... (ответов: 1)
Вопрос № 1817. Здравствуйте Эксперты ! Как запросить и ввести дата в формате "дд/мм/гг" используя функции... (ответов: 5)
Вопрос № 1818. Здравствуйте Эксперты ! Напишите процедуру для установки курсора, начинающегося на 5-й линии сканиро... (ответов: 4)
Вопрос № 1819. Здравствуйте Эксперты ! Напишите две команды для инициализации регистра DS, пологая, что имя сегмент... (ответов: 3)
Вопрос № 1820. Здравствуйте masquer я по вопросу № 1814 думаете я зря просил пример??? пишу типа такого CSEG seg... (ответов: 1)
Вопрос № 1821. -=В РАССЫЛКЕ МОЖНО НЕ ПУБЛИКОВАТЬ ЧТОБЫ НЕ ЗАСОРЯТЬ=- Здравствуйте товарищи ассемлерцики! Скажите p... (ответов: 1)
Вопрос № 1822. Привет. Вопрос ,опять только тебе, тут прога на Visual Basic. Чем ты обычно их взламываешь.... (ответов: 1)
Вопрос № 1823. Здравствуйте уважаемые эксперты! Почему в masm32 не работает способ определения длины кода: Len equ ... (ответов: 2)
Вопрос № 1824. Всем привет. Я тут начал вот MASM32 изучать и наткнулся на некоторые проблемы, а именно: 1. Я исполь... (ответов: 1)
Вопрос № 1826. Здравствуйте эксперты! Появилась у меня такая проблема! Может кто сталкивался и знает как ее решать.... (ответов: 4)
Вопрос № 1827. Господа эксперты! У кого есть документация по работе с IDE контролерами, какие команды и т.д. Поиско... (ответов: 1)
Вопрос № 1828. Здравствуйте ! Кто поможет с информацией по написанию драйверов под NT (Kernel mode). Кроме MSDN...... (ответов: 2)
Вопрос № 1829. Уважаемые эксперты. Нужна консультация по TASM 5.01 Пишу я программу, компилирую её, но ТАСМ32 отказ... (ответов: 1)
Вопрос № 1830. Не работает SoftIce под XP(или руки кривые?) Ставлю бряк: bpx MessageBoxA Выхожу - запускаю прогу(на... (ответов: 4)

Вопросов: 15, ответов: 36


 Вопрос № 1815

Broken sword, отправь и мне сырец с издевками над таймером,
пожалуйста.
Нельзя ли вместо
call Next
Next:
pop di
писать
lea Next,di?



Вопрос отправлен: 15.11.2002, 17:06
Отправитель: DyC

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

Отвечает Bob Johnson

Добрый день, DyC!
НЕТ... Вообще приведенный тобой кусок кода НЕЗАМЕНИМ, когда программа НЕ знает, по какому адресу она находится в памяти (вирус, напр). Потому что call использует относительное смещение, относительно следующей команды, т.е. оно всегда известно.
А вот lea Next, di - это вообще что? Как можно эффективный адрес загружать в память? Первый операнд - только регистр, второй - адрес в памяти. Вот так можно:
lea di, [Next] - но тогда необходимо ОБЯЗАТЕЛЬНО знать адрес метки Next - а он не известен, т.е. пришли к тому, где начинали.


Ответ отправлен: 16.11.2002, 19:32
Отправитель: Bob Johnson


Отвечает masquer

Здравствуйте, DyC!
Нельзя. Такой код (дельта-офсет) используется для кода, который будет внедряться в другой код (вирусы, например), т.е. адрес внедрения неопределен. А компилятор вместо твоего Next подставит твой реальный адрес, которые естественно будет не совпадать с новым адресом после внедрения. Доступно объяснил?

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


Отвечает Ayl

Здравствуйте, DyC!
lea Next, di - это что такое?
А lea di, Next писать нельзя, потому что нам нужно динамическое получение адреса, а lea di, Next выполнит статическое связывание.


Ответ отправлен: 15.11.2002, 18:42
Отправитель: Ayl


Отвечает Maverick

Доброе время суток, DyC!
МОЖНО.
Отправляйте вопрос лично экспертам.


Ответ отправлен: 16.11.2002, 10:03
Отправитель: Maverick


Отвечает Broken Sword

Здравствуйте, DyC!
насчет издевок над таймером - это я погорячился... ) там у меня в лабе не на портах висит delay, а на 1Ch :)
Насчет "можно ли", во первых, ты перепутал Next и DI местами, а во-вторых - тебе уже ответили совершенно верно, что "этот кусок кода незаменим" и все пр., но насколько я помню, этот кусок из того примера, присланного Maverick-ом, а там подразумевается, что вирь находится В НАЧАЛЕ COM-ника, а т.к. это всегда - 100h, то в данном конкретно случае заменить МОЖНО, и даже еще лучше - mov offset-ом (так короче)

Ответ отправлен: 17.11.2002, 00:53
Отправитель: Broken Sword


 Вопрос № 1816

У меня проблема - я учусь програмировать на встроеном в Delphi Ассемблере и мне надо написать программу: чтобы можно было в pcm-файл вставлять какой-нибудь текст (так называемые "водяные знаки"), а я не представляю как это делать! помогите хоть чем!
спасибо!



Вопрос отправлен: 15.11.2002, 17:29
Отправитель: Алекс (Piero_S@tut.by)

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

Отвечает masquer

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

Ответ отправлен: 15.11.2002, 17:56
Отправитель: masquer


 Вопрос № 1817

Здравствуйте Эксперты !
Как запросить и ввести дата в формате "дд/мм/гг" используя функции дос.
Программма под DOS



Вопрос отправлен: 15.11.2002, 18:11
Отправитель: Биржа

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

Отвечает Dark_Lord

Здравствуйте, Биржа!
Используйте int 1Ah с ах=4, в сх будет возвращён год, в dh месяц, а в dl день, формат BCD

Ответ отправлен: 19.11.2002, 19:14
Отправитель: Dark_Lord


Отвечает keleb-glin

Здравствуйте, Биржа!
Для этого рекомендую воспользоваться 04h функцией прерывания 1ah. Это прерывание предназначено для работы с дата-временными настройками CMOS. Функция выдаёт результат в таком виде:
ah = 0
ch - век
cl - год
dh - месяц
dl - день ( всё в BCD - сейчас объясню )
carry flag = 1, если часы временно недоступны.
BCD - формат хранения десятичных чисел. Число в этом формате - шестнадцатиричное число, по запись совпадающее с десятичным и ему соответствующее. Т.е. если сейчас 14-е число, в dl будет 14h, а не 0Eh.



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


Отвечает Bob Johnson

Добрый день, Биржа!
Думаю, что только ручками разбирать введенную строку и также выводить самому в нужном формате.


Ответ отправлен: 16.11.2002, 19:32
Отправитель: Bob Johnson


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

Приветствую Вас, Биржа!
Насколько я знаю - никак. Придется писать ручками или использовать
готовые библиотеки функций (но их еще нужно найти).


Ответ отправлен: 16.11.2002, 16:42
Отправитель: ASMодей


Отвечает Ayl

Добрый день, Биржа!
Вызываешь функцию ввода строки, а потом ее разбираешь. Если не подходит по формату - можешь запросить заново.
Либо посимвольно вводить.
Стандартной функции нет.
Для ввода строки символов можно использовать функцию 0Ah прерывания 21h

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


 Вопрос № 1818

Здравствуйте Эксперты !
Напишите процедуру для установки курсора, начинающегося на 5-й линии сканирования и заканчивающегося на 12-й линии
Программма под DOS



Вопрос отправлен: 15.11.2002, 18:11
Отправитель: Николай

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

Отвечает GL

Доброе время суток, Николай!
А зачем писать какую-то процедуру?
Есть ведь функция 1h прерывания 10h.
mov ah,1
mov cx,0512h
int 10h

Ответ отправлен: 16.11.2002, 13:25
Отправитель: GL


Отвечает Maverick

Доброе время суток, Николай!
Хмм, напишите...
Напишите, что вам непонятно при написании данной процедуры и вам помогут.

Ответ отправлен: 16.11.2002, 09:04
Отправитель: Maverick


Отвечает Ayl

Здравствуйте, Николай!
Прерывание 10h
Функция 01h
Параметры:
AH = 01h
CH = 5
CL = 12

Ответ отправлен: 15.11.2002, 18:49
Отправитель: Ayl


Отвечает keleb-glin

Приветствую Вас, Николай!
Я тут попытался представить курсор, начинающийсы на пятой строке и заканчивающийся на двенадцатой, но не смог. Ты немного некорректно задал вопрос, но если ты имел в виду, как установить курсор в определённое место экрана, тогда есть функция 2h прерывания 10h. Перед вызовом ты должен запихнуть в dh номер строки, а в dl - номер столбца ( нумерация с нуля ). Например:
mov ah, 2h
mov dx, 0400h
int 10h
Это выставит курсор на начало пятой строки.


Ответ отправлен: 16.11.2002, 18:37
Отправитель: keleb-glin


 Вопрос № 1819

Здравствуйте Эксперты !
Напишите две команды для инициализации регистра DS, пологая, что имя сегмента данных DATSEG.
Программма под DOS



Вопрос отправлен: 15.11.2002, 18:11
Отправитель: Дмитрий

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

Отвечает keleb-glin

Приветствую Вас, Дмитрий!
Если тебе нужны две строчки, вот они:
mov bx, DATASEG
mov ds, bx
При этом в assume надо указать, что ds:DATASEG. А также объявить сам DATASEG:
DATASEG segment
db 'data'
DATASEG ends



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


Отвечает Maverick

Здравствуйте, Дмитрий!
assume ds:datseg


Ответ отправлен: 16.11.2002, 09:04
Отправитель: Maverick


Отвечает Ayl

Добрый день, Дмитрий!
Вариант 1 (для любого процессора):
mov ax, seg DATSEG
mov ds, ax
Вариант 2 (286+):
push seg DATSEG
pop ds
Второй вариант короче на 1 байт


Ответ отправлен: 15.11.2002, 18:52
Отправитель: Ayl


 Вопрос № 1820

Здравствуйте masquer я по вопросу № 1814
думаете я зря просил пример??? пишу типа такого
CSEG segment
org 100h
Begin:
invoke ExitWindowsEx,EWX_SHUTDOWN,NULL
CSEG ends
end Begin
ну и как догодались все придирается к
invoke ExitWindowsEx,EWX_SHUTDOWN,NULL
P.s. ну это конечно не весь код ...



Вопрос отправлен: 15.11.2002, 19:47
Отправитель: lamachok (lamachok@mail.ru)

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

Отвечает masquer

Доброе время суток, lamachok!
Дык "хто ж так пишет"? Для виндов программа несколько не так оформляется
.386
.model flat, stdcall
option casemap :none
include masm32includewindows.inc
include masm32includeuser32.inc
include masm32includekernel32.inc
includelib masm32libuser32.lib
includelib masm32libkernel32.lib
.data
...
.code
start:
...
end start

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


 Вопрос № 1821

-=В РАССЫЛКЕ МОЖНО НЕ ПУБЛИКОВАТЬ ЧТОБЫ НЕ ЗАСОРЯТЬ=-

Здравствуйте товарищи ассемлерцики! Скажите pls где бы мне качнуть книжку по в нете или какойнить такой документ где был бы сборник задач для асема. Ну тоесть просто мелкие задачки на математику, программинг, смекалку, оптимизацию и просто интересные задачки, не примитивные но и не слишком сложные... не могу найти задачничка никак.. А так было бы очень удобно тренироваться



Вопрос отправлен: 15.11.2002, 19:53
Отправитель: Эдвард Самохвалов (zeleniy_kot@yahoo.com)

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

Отвечает Maverick

Доброе время суток, Эдвард Самохвалов!
На моей ссылке вверху рассылки RusFAQ можно подписаться на рассылку "Задачи по ассемблеру".
http://subscribe.ru/catalog/comp.soft.prog.asmtasks
Пропихну в рассылку, может еще кому надо...


Ответ отправлен: 16.11.2002, 09:04
Отправитель: Maverick


 Вопрос № 1822

Привет. Вопрос ,опять только тебе, тут прога на Visual Basic. Чем ты обычно их взламываешь.



Вопрос отправлен: 15.11.2002, 20:22
Отправитель: mud (mudvayne@inbox.ru)

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

Отвечает masquer

Приветствую Вас, mud!
SmartCheck+SoftIce. Я обычно ничего не взламываю, это называтеся reverse engeneering, это несколько разные вещи :))

Ответ отправлен: 18.11.2002, 13:43
Отправитель: masquer


 Вопрос № 1823

Здравствуйте уважаемые эксперты! Почему в masm32 не работает способ определения длины кода: Len equ $ - Start? Если точнее, то при попытке использовать Len компилятор выдает сообщение, что символ не определен. Подскажите, как можно это сделать? Заранее благодарен.



Вопрос отправлен: 15.11.2002, 22:16
Отправитель: axydas

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

Отвечает masquer

Здравствуйте, axydas!
Все замечательно работает. Может ты где-то еще ее определяешь?

Ответ отправлен: 18.11.2002, 13:45
Отправитель: masquer


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

Приветствую Вас, axydas!
Вообще-то все работает (проверил на всех имеющихся версиях
TASM и MASM). Значит ошибка где-то в программе, может регистр
букв изменил или еще что-нибудь, без исходника не разберешь.


Ответ отправлен: 16.11.2002, 16:42
Отправитель: ASMодей


 Вопрос № 1824

Всем привет. Я тут начал вот MASM32 изучать и наткнулся на некоторые проблемы, а именно:
1. Я использую диалоговое окно из ресурсов как главное. Как мне убрать с него caption & border навсегда. А ещё лучше сделать рамочку в 1 пиксель вокруг окна. Я использую RedASM и там в редакторе диалогов всё выглядит ОК (свойство диалога Border = Boarder), но после asm&link получаем обычное окно с заголовком и бордером... В чём тут дело и екаки есть ещё пути сделать ТАКОЕ окно?
2. Как мне дописать в конец ехе-файла некоторую информацию (из другой программы), а потом запустив тот ехе-файл, в который писали прочитать то, что в него было дописано. Кажется понятно написал =)
Любые примеры, в тч исходники приму с радостью. Заранее всем спасибо... Ответы можно на мыло - tosha@bratan.ru



Вопрос отправлен: 16.11.2002, 00:25
Отправитель: ToSHA (tosha@bratan.ru)

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

Отвечает masquer

Приветствую Вас, ToSHA!
1. В диалоге стили пропиши соответствующие
WS_VISIBLE | WS_POPUP | WS_BORDER
2. Совсем непонятно. Все возможно, только проблема в реализации, учи формат РЕ.

Ответ отправлен: 19.11.2002, 11:06
Отправитель: masquer


 Вопрос № 1826

Здравствуйте эксперты!
Появилась у меня такая проблема! Может кто сталкивался и знает как ее решать.
В общем, что-то случилось с TD5.0:
1) Он не запускается в полноэкранном режиме, экран становится черным и ничего не происходит, после нажатия на любую клавишу, вижу снова Рабочий стол, с мышкиным курсором, но он не движеться, хотя, мышка работает, можно в слепую потыкать куда-нибудь.:)
2) После запуска его в оконном режиме и завершения работы с ним, происходит следующее, ни одна ДОС программа не запускается, будь то Tasm,Tlink,Bp или еще что-то. Появляется окошко программы с надписью, "программа выполнила не допустимую операцию и будет закрыта", при желании можно посмотреть по какому адресу это произошло.:)
После чего это случилось, не знаю, как-то не смог отследить сей момент.:( Пробовал устанавливать Tasm заново, тот же косяк.:( Наверное дело в Винде(98se), но в чем именно?
В общем, к багу с мышкой, когда я проводил в полноэкранном режиме по экрану и после курсора оставались мигающие прямоугольнички добавился еще один.:(
----
Если кому поможет, то видяха у меня GeForce2MX-200.
PS: Сорри, что в эту рассылку, как-то больше она подходит для вопроса, чем Windows95/98/Me - Пользователю, программы специфические.:)
--
С уважением, ILYA D.



Вопрос отправлен: 16.11.2002, 01:06
Отправитель: ILYA D.

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

Отвечает LIFO

Здравствуйте, ILYA D.!
Попробуй запускать с Dos Navigator'а . У меня так бывает, если с Far'a запускать.
если не получится, то выход все равно есть - ты знаешь какой:)

Ответ отправлен: 16.11.2002, 21:03
Отправитель: LIFO


Отвечает Bob Johnson

Здравствуйте, ILYA D.!
1. Проверь на вирусы. Может быть вирус подхватил.
2. Посмотри свойства ярлыка для запуска TD - все ли там ОК, если что - попробуй вначале запустить что-то типа нортона и уже из него TD.
3. Проверь драйвера видеокарты - может имеет смысл поставить новые? Поставь версии 29.40 - вполне нормальные.


Ответ отправлен: 17.11.2002, 23:45
Отправитель: Bob Johnson


Отвечает Maverick

Здравствуйте, ILYA D.!
Мда, глобальный баг :)
Мож ответ и тупой, но я бы переставил винду.


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


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

Добрый день, ILYA D.!
Попробуй переустановить драйверы видюхи, а если не поможет,
то и всю винду. Больше я вряд ли что-то посоветую.


Ответ отправлен: 16.11.2002, 16:43
Отправитель: ASMодей


 Вопрос № 1827

Господа эксперты!
У кого есть документация по работе с IDE контролерами, какие команды и т.д. Поисковиком пользоваться умею.



Вопрос отправлен: 16.11.2002, 03:16
Отправитель: USA (usa-lesh@yandex.ru)

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

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

Доброе время суток, USA!
Раз умеешь, то вперед - ищи сайты с документацией, такие как
например www.wasm.ru, www.interface.ru, document.newmail.ru,
www.rusdoc.df.ru.


Ответ отправлен: 16.11.2002, 16:43
Отправитель: ASMодей


 Вопрос № 1828

Здравствуйте !
Кто поможет с информацией по написанию драйверов под NT (Kernel mode). Кроме MSDN...



Вопрос отправлен: 16.11.2002, 12:05
Отправитель: Magpie

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

Отвечает --- Нет данных ---

Доброе время суток, Magpie!
DDK + Soft+Ice + Numega Driver**** = RULEZ

Ответ отправлен: 18.11.2002, 13:43
Отправитель: --- Нет данных ---


Отвечает masquer

Здравствуйте, Magpie!
Кроме MSDN есть еще DDK и сайты, этому посвященные. Если что-то конкретно нужно, спрашивай - может кто-то из экспертов сможет ответить.

Ответ отправлен: 18.11.2002, 13:48
Отправитель: masquer


 Вопрос № 1829

Уважаемые эксперты. Нужна консультация по TASM 5.01 Пишу я программу, компилирую её, но ТАСМ32 отказывается работать с ней. Компилирую так:
tasm32 /m /ml reboot.asm
tlink32 /Tpe /aa /c reboot.obj
Инклуды содержат следующее:
user32.inc:
includelib import32.lib
extrn ExitWindowsEx:near
kernel32.inc:
includelib import32.lib
extrn ExitProcess:near
При компиляции ассемблер пишет следующие строки:
32loader error: 'D:TASMBINTASM32.EXE'
Invalid import references:
- module 'kernel32.dll' entrypoint 'IsDBCSLeadByteEx'
Do you want to attempt running this program (Y/N)?
При попытке продолжить работу (Y) выдаётся ещё одно сообщение:
32loader runtime error:
Unresolved Import entry called at 0040118E
Объектный файл при этом не создаётся.
Пробовал заменить файл Import32.lib - без толку.
В чём может быть дело? Другие программы компилируются нормально, в том числе и содержащие кусок кода, приведённый ниже.
P.S.: Андрей, интересующийся программированием параллельного порта - сбрось мне письмо на s_man80@inbox.ru, и я вышлю тебе документацию по программированию параллельного порта.


Приложение:


Вопрос отправлен: 16.11.2002, 13:57
Отправитель: Джамаль (s_man80@inbox.ru)

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

Отвечает Bob Johnson

Добрый день, Джамаль!
У меня были проблемы, но не с TASM, а с TLINK32 - когда я пытался сделать прогу, в которой был пустой сегмент данных. Может быть у тебя - похожая ситуация. Хотя мой TASM (5.3) твою программу вполне нормально откомпилировал.
tasm32 /ml /t /m3 /z /q /iF:TASMInclude %FI%.asm
tlink32 -x -Tpe -ap -c -V4.0 -LF:TASMLib %FI%.obj, %FO%.exe , , import32.lib
Где %FI% и %FO% - переменные, в которых определено имя входного и выходного файлов.


Ответ отправлен: 17.11.2002, 23:45
Отправитель: Bob Johnson


 Вопрос № 1830

Не работает SoftIce под XP(или руки кривые?)
Ставлю бряк: bpx MessageBoxA
Выхожу - запускаю прогу(на VisualC++ своял специально:
void WinMain{MessageBox(NULL,"Test","!",MB_OK);})
- появляется мессаджбокс и все:-((
А САйс хоть бы пикнул!
SoftIce Driver Suite 2.0.1



Вопрос отправлен: 16.11.2002, 15:04
Отправитель: nix (nix.q@mail.ru)

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

Отвечает Gibbel

Добрый день, nix!
Все дело в том, что в Windows две функции соответствуют сишному макросу MessageBox. Это MessageBoxW для юникод-версий и MessageBoxA для не-юникод...
Соответственно, поставь бряк на обе - должно сработать...

Ответ отправлен: 16.11.2002, 15:24
Отправитель: Gibbel


Отвечает Broken Sword

Доброе время суток, nix!
Запомни раз навсегда: в Windows 9X все брейкпоинты BPX на диапазон адресов 400000h-7FFFFFFFh являются контекстно-зависимыми. Это означает, что брейкпоинт сработает только в том случае, если контекст, в котором он установлен, является активным. В Windows NT/2000/XP то же самое касается всех адресов ниже 2 Гб (80000000h). Теперь, ты спрашиваешь: "как поменять контекст"? А вот так. Ты должен загрузить прогу и брянуться в ней где нить ДО вызова messageboxa. Как это сделать - много способов. От замены на int 3 первого байта до загрузки чрез SL (про это поподробнее могу рассказать, пиши).
Так вот, как только ты брякнулся (хоть на loadlibrarya, которая вызывается 99% прог win32), - пишешь команду addr. Тебе вылезет список активных процессов. Находишь свой. Допустим, это myprog. Смотришь циферь рядом с этой myprog. Допустим, 666h. Далее пишешь: addr 666h. И все! Ты в контексте проги myprog! ВОТ ТЕПЕРЬ (!!!!) можешь писать bpx messageboxa. Если не поможет - пиши

Ответ отправлен: 16.11.2002, 17:15
Отправитель: Broken Sword


Отвечает Portnov

Приветствую Вас, nix!
Ставьте bpx MessageBoxW! AFAIK XP использует юникод.
С уважением, Portnov.

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


Отвечает masquer

Здравствуйте, nix!
Введи в айсе команду
exp MessageBox*
Получишь список функций и пробуй каждую :). Под ХР по любому будет MessageBoxW вызываться, даже если явно вызывается MessageBoxA, она потом в W переходит.

Ответ отправлен: 18.11.2002, 13:56
Отправитель: masquer



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

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

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




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

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


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

В избранное