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

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


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

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

Выпуск № 383
от 05.10.2002, 08:50

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


От Администратора



Уважаемые читатели и эксперты!

26 октября, в субботу, планируется встреча посетителей сайта RusFAQ.ru. Было бы просто здорово, если бы мы могли собраться в разных городах в одно и то же время. Посему беру инициативу в свои руки и организовываю встречу в Москве. Эксперты и подписчики, живущие в других городах, могут написать мне письмо, в котором указать место встречи в их городе и время, а также иные условия (что и сколько с собой приносить, план и пр.). Я опубликую это в рассылке.
Для москвичей: планируется встреча 26 октября в 19:00 в метро Новогиреево (центр зала). В программе: пиво, закуска, караоке. С собой желательно взять 150-200 рублей (если можнете больше - хорошо). Двинемся в сторону Реутова (Новокосино, прибл. 10 мин. автобусом). Там есть хороший, недорогой, уютный бар. К тому же, в двух шагах находится интернет-клуб, в котором можно пить пиво!!! Кто едет со стороны Петушков - можем встретиться в центре платформы Реутово ИЗ Москвы. Если у кого есть другие предложения о месте проведения тусовки - пишите! Желающие принять участие, пожалуйста, напишите письмо в произвольной форме и отправьте по адресу admin@rusfaq.ru (обязательно укажите, где вы будете находиться: в метро или на платформе). Буду рад встретиться с экспертами.

Думаю, нам есть о чем поговорить!!!

Все предложения можно также оставлять на форуме.


Калашников О.А. (admin@rusfaq.ru)


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

Dark_Lord
Статус: Профессиональный
Общий рейтинг: 132.17
[Подробней >>]
Bob Johnson
Статус: Опытный
Общий рейтинг: 150
[Подробней >>]
LIFO
Статус: Опытный
Общий рейтинг: 131.53
Телефон: 8 01710 24758
[Подробней >>]
 
Kiss
Статус: Опытный
Общий рейтинг: 131.44
[Подробней >>]
masquer
Статус: Профессиональный
Общий рейтинг: 156.56
[Подробней >>]
Broken Sword
Статус: Профессиональный
Общий рейтинг: 133.19
URL: моя рассылка по Protected Mode
[Подробней >>]
 
baldr
Статус: Профессиональный
Общий рейтинг: 116.44
URL: Сайт об ОС DOS. Всем, кто любит эту ОС!
[Подробней >>]
Pablo
Статус: Профессиональный
Общий рейтинг: 131.91
URL: Моя страничка
[Подробней >>]
Portnov
Статус: Профессиональный
Общий рейтинг: 120
URL: Мой сайтик...
[Подробней >>]


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

Вопрос № 1373. Hi, я вот решил начать так сказать изучение Ассемблера, хотел бы от вас узнать какую литературу стои... (ответов: 4)
Вопрос № 1374. Подскажите пожалуйста, какая функция (с параметрами) отвечает за нажатие на кнопку на форме программ... (ответов: 3)
Вопрос № 1375. Доброго всем времени суток, как говорится. Я тут как-то изучал Structured Exception Handling (SEH) и... (ответов: 2)
Вопрос № 1376. Здравствуйте, Bob Johnson! Благодарю за то, что ответили на мой вопрос (см. приложение). В связи с э... (ответов: 1)
Вопрос № 1377. Доброго времени суток, эксперты. У меня тут такая проблемка возникла: есть некое PCI-устройство, нап... (ответов: 2)
Вопрос № 1378. Привет, эксперты! При программ. графики ДиректХ на ТАСМ где и как можно вызывать в синтакс. асма мет... (ответов: 2)
Вопрос № 1379. Здравствуйте! Я тут пару дней назад задавал вопрос о Софт Айсе: При запуске Loader-а он пишет &qu... (ответов: 2)
Вопрос № 1380. Здравствуйте уважаемые Эксперты! Вопросов вообще-то несколько, да и немного наивные (читай-ламерские... (ответов: 2)
Вопрос № 1381. Ув. эксперты! Я надыбал себе ТАСМ5.В папке тасма есть подпапки:BIN,DOC,EXAMPLES,INCLUDE,LIB.В конфиг... (ответов: 4)
Вопрос № 1382. Доброе время суток! Для взлома проги с помощью softice нужно поставить breakpoint на функцию!!! Напр... (ответов: 2)
Вопрос № 1383. Уважаемые эксперты. Вопрос - У меня Masm 6.14 kak правильно ассемблировать и линьковать проги. Линьк... (ответов: 2)

Вопросов: 11, ответов: 26


 Вопрос № 1373

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



Вопрос отправлен: 30.09.2002, 01:18
Отправитель: Roman

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

Отвечает Dark_Lord

Здравствуйте, Roman!
Что спрашиваешь, покупай! Всё связанное с асмом, ну на крайняк поброди по нету, поищи описания книг!

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


Отвечает Bob Johnson

Доброе время суток, Roman!
Зубков, Юров, почитай нашу рассылку, в начале можно воспользоваться более старыми книгами (про 86 процессор) - т.к. все они совместимы сверху вниз. В электронном виде - если есть интернет - поищи в яндексе.
Из программ - Borland TASM, MASM - это непосредственно компиляторы. Можешь начать с ассемблерных вставок в языки более высокого уровня (какие знаешь - Pascal, Delphi, Watcom C++, MS VC).


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


Отвечает LIFO

Приветствую Вас, Roman!
Хорошая литература - Зубков, но я бы тебе советовал сначала прочитать рассылки (Низкоуровневое программ...и Ассемблер - это просто)и изучая тему рассылки с той же главой в книге)- так легче будет.
Насчет диска - вот что на нем должно быть обязательно:
1. Turbo assembler 5.0 and Macro assembler 6.13
2. Numega driver studio(потом может пригодится)
3. NuMega Softice (for Dos and Windows)
4.Ida Pro Advanced (disassembler)
5.Api spy ,Regmon and FileMon
6.Hiew 6.11 and HexWorkshop 2.54
7.IDE (Redasm или другие среды разработки, хотя для началасойдет и блокнот)
Некоторые руководства(у меня например все мануалы от Pentium Pro до Pentium 3, а также Interrupt List)
Пункты 1-6 должны быть обязательно.


Ответ отправлен: 30.09.2002, 09:29
Отправитель: LIFO


Отвечает Kiss

Добрый день, Roman!
Купи себе тасм какой нибудь лижбы работал и книгу для начал потянит практически любая, лучше П.Нортона!


Ответ отправлен: 01.10.2002, 09:36
Отправитель: Kiss


 Вопрос № 1374

Подскажите пожалуйста, какая функция (с параметрами) отвечает за нажатие на кнопку на форме программы,
после которой срабатывает событие на какую-либо написанную например мной функцию.
PS: Желательно, представить этот процесс в мнемонике асма.



Вопрос отправлен: 30.09.2002, 02:30
Отправитель: Speedy Gonsalez

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

Отвечает masquer

Здравствуйте, Speedy Gonsalez!
Функция? Работа Винды основана на событиях - твоя программа должна обрабатывать какие-то события/сообщения для работы - для кнопки (которая является окном по большому счету) - WM_KEYDOWN, WM_KEYUP, WM_CHAR, WM_MOUSEMOVE
А ты уж выбирай, что тебе нужно.

Приложение:

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


Отвечает Dark_Lord

Приветствую Вас, Speedy Gonsalez!
сообщение bn_clicked
первый параметр сообщения это индетификатор кнопки
второй handle на кнопку!

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


Отвечает Bob Johnson

Здравствуйте, Speedy Gonsalez!
Ты не на дельфи-ли случайно пишешь? Там в событиях (Events) Object Inspector'а смотри OnClick - вот эта процедура и вызывается.
Если же ты программируешь под вин апи (не важно на каком языке), то твоей программе приходят сообщения - самой кнопке (на которую ты нажал мышью) - WM_LBUTTONDOWN, а твоему главному окну, на котором расположена кнопка (можно сравнить с формой в дельфи) - WM_COMMAND, которое содержит в старших 16-разрядах параметра wParam код BN_CLICKED. Младшие 16 разрядов содержат идентификатор нажатой кнопки. lParam содержит хэндл окна (HWND) нажатой кнопки.
Ты должен сам в процедуре окна (Window Procedure) реагировать на подобные сообщения (т.е. BN_CLICKED) и (по идентификатору или хэндлу окна) определять, какая кнопка была нажата, чтобы определить, какой процедуре надо передать управление дальше.


Приложение:

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


 Вопрос № 1375

Доброго всем времени суток, как говорится.
Я тут как-то изучал Structured Exception Handling (SEH) и понял что с fs:[0] начинается некая весьма крутая структура. Не могли бы вы, уважаетые эксперты, поделиться своей мудростью и прислать мне описалово ее формата.
Заранее благодарен.
Осипов Александр.



Вопрос отправлен: 30.09.2002, 10:49
Отправитель: Osipov Alexander (alex_osipov@inbox.ru)

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

Отвечает masquer

Доброе время суток, Osipov Alexander!
Нет, немного не так. fs:[0] указывает на структуру, а вот эелементы этой структуры уже являются "крутыми" - типа CONTEXT, ExceptionRecord. Долго все описывать - смотри Метта Питрека, Рихтера, на сайте Elicz-a было описание.

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


Отвечает Broken Sword

Доброе время суток, Osipov Alexander!
По FS:[0] действительно начинается крутая структура (которая зовется Thread Information Block - TIB или TEB). (masquer, извини, но ты IMO малехо неправ...) Кстати, значения полей этой структуры различны для win32s, OS/2, winNT и win95. Так вот, первый dword - общий для всех типов, это указатель на структуру EXCEPTION_REGISTRATION, к-рая нужна для обработки fault-ов.
Как написал сам великий Мат Питрек (кстати, самый гениальный из "официальных" реверс-инженеров),
the only place I could find a formal definition of an EXCEPTION_REGISTRATION was in the EXSUP.INC file from the Visual C++ runtime library sources:
_EXCEPTION_REGISTRATION struc
prev dd ?
handler dd ?
_EXCEPTION_REGISTRATION ends
т.е. единств. место, где есть описание этой стр-ры - это в EXSUP.inc из библиотеки VC++. Кстати, по заявлением того же Питрека, SEH является "underdocumented" фишкой, т.е. фактически ее не существует вообще.
Про остальные поля - могу кинуть доки.

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


 Вопрос № 1376

Здравствуйте, Bob Johnson!
Благодарю за то, что ответили на мой вопрос (см. приложение).
В связи с этим у конечно же возник следующий: как быть если
нужная нам библиотека является системной (кернел32, например) и мне очень хочется использовать ее функции, но она не отображена в адресное пространство моего процесса?
Допустим, я вычислил entrypoint необходимой мне функции (оставим вопрос о совместимости с другими системами), и как мне их использовать?
например:
_data_segment
k32name db "KERNEL32.dll",0
function_entry dd 0
_code_segment
----------------------
push offset k32name
mov eax, function_entry
call eax
----------------------
После этого в eax будет 0000000. Не могли бы вы посоветовать что тут можно сделать?
Заранее благодарен.
Осипов А.В.


Приложение:


Вопрос отправлен: 30.09.2002, 11:27
Отправитель: Osipov Alexander

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

Отвечает Bob Johnson

Приветствую Вас, Osipov Alexander!
Значит так. Если какая-либо библиотека загружена в систему, но не отражена в адресное пространство твоего процесса, использовать ее не стоит (даже если ты "своими" средствами нашел адрес какой-либо ее функции в своем адресном пространстве). Потому что по правилам виндовс у любой библиотеки есть так называемая entry-пойнт, т.е. функция, которую вызывает система, когда производит отображение библиотеки в адресное пространство какого-либо процесса (и в некоторых других случаях). При вызове этой функции библиотека выполняет все необходимые действия по инициализации (т.е. может память себе выделяет, может еще что), после чего она настраивается на работу с твоим процессом.
Что тебе нужно делать: некоторые стандартные библиотеки (ну, как kernel32.dll) обязательно отображены в адресное пространство твоего процесса - ты можешь получить их HModule с помощью функции GetModuleHandle с именем библиотеки (например, HModule hkrnl32 = GetModuleHandle ("kernel32.dll");). После этого можешь искать в них нужную тебе функцию - например: GetProcAddress (hkrnl32, "GetProcAddress");. Если же библиотека не отображена в адресное пространство твоего процесса - загрузи ее функцией LoadLibrary ("name");.
;-------------------------
Другое дело (вот только сейчас подумал) - если ты пишешь вирус и не можешь использовать ни одну функцию по имени (т.е. система для тебя их адреса не определила), тогда просто бери адрес необходимой тебе функции (который ты как-то вычислил) и вызывай его. Например, адрес функции GetProcAddress у меня равен 0BFF76DACh, необходимо ее вызвать:
push offset procname; - название функции
push [hmodule]; - HModule для kernel32.dll
Call [addr]; - адрес функции GetProcAddress в адресном пространстве твоего процесса.
addr dd 0BFF76DACh; - адрес GetProcAddress
hmodule dd 0BFF70000h; - hModule для kernel32.dll
Но только, если версия kernel32.dll на компьютере, где ты запускаешь прогу будет отличаться от твоей - то и адреса там будут другими.
А вот как узнать hModule для kernel32.dll, не вызывая функции API - я не знаю.
P.S. Некоторые функции внутри Вин32 имеют на конце дополнительню букву "А" - например GetModuleHandleA (что означает, ANSI-версию функции (не юникод)). Поэтому указывай правильное имя функции при обращении к GetProcAddress.


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


 Вопрос № 1377

Доброго времени суток, эксперты.
У меня тут такая проблемка возникла: есть некое PCI-устройство, например, сетевая карта, которая имеет в своём распоряжении 256 регистров с различной информацией, все регистры расположены в адресном постранстве PCI. Вопрос: как к ним обратиться (то есть я не знаю как обратиться к самому пространству памяти PCI)?
Заранее спасибо, Il.



Вопрос отправлен: 30.09.2002, 11:28
Отправитель: Il

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

Отвечает Broken Sword

Доброе время суток, Il!
Для этого существует прерывание 1Ah, а точнее его функции B10Bh, B10Ch и B10Dh. См. приложение

Приложение:

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


Отвечает baldr

Здравствуйте, Il!
Через порты и никак иначе. Хотя, возможно, через контроллер DMA тоже можно. В общем, тебе необходимо знать диапазон адресов (портов) этого устройства и очень желательно его описание на низком уровне.

Ответ отправлен: 01.10.2002, 16:29
Отправитель: baldr


 Вопрос № 1378

Привет, эксперты!
При программ. графики ДиректХ на ТАСМ где и как можно вызывать в синтакс. асма методы интерфейсов (нужно ли класть в стек идентифик. интерфейса?). Где можно найти аналог Import32.lib для ДиректХ? Или же остается работать только через LoadLibrary. Не могли бы привести пример для вызова каког-ниб метода (напр. для интерфейса Direct3DCreate8). Также, не знаете ли к-ниб. сайта по прогр. ДиректХ на Асм.



Вопрос отправлен: 30.09.2002, 12:38
Отправитель: oleg

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

Отвечает Bob Johnson

Доброе время суток, oleg!
Работать с DirectX из асма очень просто, даже проще, чем с OpenGL. Вот как начать:
Вначале необходимо создать объект Direct3D8 - для этого существует функция (как ты правильно заметил) Direct3DCreate8. Для ее вызова необходимо, чтобы компилер (ТАСМ или МАСМ) знал ее (т.е. описать ее прототип) и линкер знал, в какой она находится библиотеке. Т.е. тебе просто нужен LIB-файл.
Вариантов несколько - можно использовать D3D8.LIB из комплекта DirectX8 SDK, но тогда необходимо и линкер использовать от Microsoft Visual Studio (т.к. у него другой формат LIB-файлов).
Можно создать свой LIB-файл из D3D8.DLL. Для этого используется утилита IMPLIB.exe из пакете Borland TASM:
implib d3d8.lib c:windowssystemd3d8.dll
Она создаст либ файл в формате, который понимает Borland. После этого этот либ файл указывается TLink32 рядом с import32.lib (через пробел).
Можно, конечно, и через LoadLibrary и GetProcAddress.
Чтобы TASM понял твою функцию, ты должен ее описать в теле программы:
D3D_SDK_VERSION = 120
Direct3DCreate8 ProcDesc StdCall :DWord
И можно вызывать:
Call Direct3DCreate8, D3D_SDK_VERSION
mov [hd3d], eax
Теперь необходимо научиться вызывать методы интерфейсов. Для этого надо запомнить следующие правила:
1. Пусть есть указатель на какой-либо интерфейс. По этому адресу будет записано двойное слово, содержащее адрес таблицы его методов.
2. Таблица адресов методов интерфейса состоит из простой последовательности двойных слов (т.е. по 32 бита), каждое из которых определяет адрес функции интерфейса в порядке их задания при его определении. Определение интерфейсов (и последовательность задания функций в них) смотри в инклюдах DirectX8 SDK.
Лучше всего написать макрос вызова метода интерфейса:
PUSH_ MACRO par
IFNB
push par
ENDIF
ENDM
;--
CALL_ MACRO addr, this, p1, p2, p3, p4, p5, p6, p7
PUSH_
PUSH_
PUSH_
PUSH_
PUSH_
PUSH_
PUSH_
IFDIFI ,
mov eax,this
ENDIF
push eax
mov edx,[eax]
call [edx + addr*4]
ENDM
Call_ textequ

(не очень красиво заносятся параметры, ну да ладно - может кто из экспертов предложит вариант лучше)
Далее необходимо пронумеровать методы интерфейса для удобства (взял свой пример из DirectSound, так что методы его):
;IDirectSound
IDSQueryInterface equ 0
IDSAddRef equ 1
IDSRelease equ 2
IDSCreateSoundBuffer equ 3
IDSGetCaps equ 4
IDSDuplicateSoundBuffer equ 5
IDSSetCooperativeLevel equ 6
IDSCompact equ 7
IDSGetSpeakerConfig equ 8
IDSSetSpeakerConfig equ 9
IDSInitialize equ 10
Нумеруются в порядке, как они идут при определении интерфейса в h-файле из DX8 SDK.
и все, можно вызывать вот так (пример тоже из DS):
(заметь, первый параметр - адрес самого экземпляра интерфейса (this, говоря на С++))
Call DirectSoundCreate, 0, offset lpds, 0
test eax,eax
jnz @@DSError
;-- вот так --
Call_ IDSSetCooperativeLevel, [lpds], [HMainWnd], DSSCL_PRIORITY
test eax,eax
jnz @@DSError
Call_ IDSCreateSoundBuffer, [lpds], , , 0
test eax,eax
jnz @@DSError
Если чего непонятно - пиши
P.S. Почему DS через ASM удобней OGL? Например для написания минимальных программ (как 4к интро) - в ОГЛ - названия функций (много занимают места), а в D3D - только Direct3DCreate8 и дальше интерфейсы...


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


Отвечает Pablo

Доброе время суток, oleg!
Ты можешь с помощью программы ImpLib создать lib-файл из dll. Потом просто откопируй его в файл с расширением inc и отредактируй в текстовом виде выкинув все не нужное из него и у тебя получится файл с чистыми именами функций.
Ну а после при компиляции используешь file.inc, а при компоновке просто добавляешь lib-файл в проект и все функции должны стать видны, то есть не нужно будет использовать LoadLibrary.

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


 Вопрос № 1379

Здравствуйте!
Я тут пару дней назад задавал вопрос о Софт Айсе:
При запуске Loader-а он пишет "SoftIce is not active".
Как это исправить?
Так вот, система Win98SE; Айс (winice.exe 4.05) запускается через autoexec.bat.
Что посоветуете?



Вопрос отправлен: 30.09.2002, 18:12
Отправитель: EVG

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

Отвечает Dark_Lord

Приветствую Вас, EVG!
Переустановить SoftICE!

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


Отвечает masquer

Доброе время суток, EVG!
Если лоадер такое пишет, это значит что софтайс не загрузился. Почему, тебе уже смотреть нужно. Попробуй переустановить айс, просмотри, что еще в autoexec.bat находится.
Айс писать должен тебе на экране, чего-то типа
Compuware ...
4096 KB for Symbols и что-то в таком-же духе.

Ответ отправлен: 01.10.2002, 10:37
Отправитель: masquer


 Вопрос № 1380

Здравствуйте уважаемые Эксперты!
Вопросов вообще-то несколько, да и немного наивные (читай-ламерские) они, что ли... ну кому не в лом, помогите, подскажите...
1. Где бы почитать про методику перехвата вызовов апишных функций, желательно с доходчивыми примерами (желательно на асме ессно или дельфи поскольку юзаю и то и другое). Ну жна и теория и практические примеры.
2. Какие ещё возможны методы сокрытия прог в Вынь95/98, кроме RegisterServiceProcess? Пытался припаять поток к процессу - облом... только под НТ. Теперь пытаюсь слегка контролировать CreateToolhelp32Snapshot (см. 1 вопрос) с коррекцией возвращаемых данных, дабы мой процесс не светился...
3. Ну последнее - не сочтите за кульного хацкера, вопрос-просто уточнение. Можно ли под Вынь 95/98 сменить MAC-адрес сетевухи? Линукс это позволяет а вот Вынь? Поспорили с одним челом...
З.Ы. Извиняюсь что вопросы не совсем по теме, но право слово - больше обратится некуда...
Всем заранее спасибо, с уважением
Дмитрий



Вопрос отправлен: 30.09.2002, 20:25
Отправитель: Диман

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

Отвечает Bob Johnson

Здравствуйте, Диман!
Хе-хе, а вопросы-то совсем не ламерские... (вообще, последние несколько вопросов меня просто радуют - кто-то спросил про SEH и fs:[0] - вот этого не знаю и самому интересно, кто-то про D3D8 из ассемблера ну и т.д...)
1. Можно легко перехватить из драйвера (т.е. Vxd-файла) (это пробовал - под 9х работает). Значит (вот это не пробовал) можно по методу Win95Cih войти в 0-е кольцо и сделать все оттуда.
Делается просто - определяется адрес функции (с пом. GetProcAddress), передается твоему драйверу с пом. DeviceIOControl (за case неручаюсь...). Он спокойно (с пом. своего сегмента данных, 30h, кажется) пишет в переданный ему адрес ВСЕ, ЧТО ЗАХОЧЕТ (ну, а точнее, вначале ты дизассемблируешь длл, где есть нужная функция, запоминаешь код, затем пишешь по ее адресу в памяти джамп на свой код внутри драйвера и все... функция твоя. Если же нужно вызвать исходную функцию - то пишешь начальный ее код у себя и передаешь джампом управление назад).
Под НТ, мне кажется, это очень трудно (читай - если ты это сможешь - ты крут... я не смог), потому что там для каждого процесса свои копии длл (только свою длл полностью писать, что не есть хорошо).
2. Я не знаю ничего другого, кроме того, что ты написал. Есть идея - создать thread и приделать его к другому процессу (под НТ, говоришь, что сделал, значит) - под вин95 я видел сервис ВММ что-то типа CreateRing3Thread (посмотри vmm.inc из DDK) - он создает поток, непонятно к какому процессу... Может и получится. Если получится - напиши bobjohn@newmail.ru - самому очень интересно...
3. (Кажется) я видел адрес в свойствах какой-то сетевухи на каком-то компе (может, конечно, это была IOLA, которая почти целиком программная, а на других и нельзя).


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


Отвечает masquer

Здравствуйте, Диман!
1. Ищи книгу Джеффри Рихтера.
2. Тот же перехват функций, выход в ринг0.
3. Х.з., но если это вообще возможно, то и под виндой можно, через драйвер неверняка можно, но как - не знаю, не сталкивался.

Ответ отправлен: 01.10.2002, 10:44
Отправитель: masquer


 Вопрос № 1381

Ув. эксперты!
Я надыбал себе ТАСМ5.В папке тасма есть подпапки:BIN,DOC,EXAMPLES,INCLUDE,LIB.В конфиге тасма написано -LE:TASMLIB. По ней я как понимая тасм ищет библиотеки. Может лучше скинуть из всех подпапок файлы в одну папку?
Вопрос все функции какие я объявляю в файле EXTRN ExitProcess:PROC находятся LIBах?У меня два LIBа import.lib и import32.lib, функции каких Виндовских библиотек там описаны?(kernel32.dll? user32.dll? или что нибудь еще?)
И еще линкую(TLINK32.EXE) файл а тлинкер говорит что типа этого:UNRESOLVED 'EXITPROCESS'.Где ошибка в исходнике?


Приложение:


Вопрос отправлен: 30.09.2002, 23:50
Отправитель: SonicX (asm86@mail.ru)

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

Отвечает Bob Johnson

Доброе время суток, SonicX!
По-порядку. Конфиг не обязателен, забей на него. Для вин32 используй импорт32.либ. Там не все функции, которые есть вообще в винапи (но основные, принадлежащие kernel32 и user32, там конечно есть). Можешь (если хочешь) сделать себе библиотеку сам из имеющейся DLL - утилита IMPLIB из пакета ТАСМ. Так вообще можно любые функции использовать.
Процедуры объявляй вот так:
_proc name_ ProcDesc StdCall [:DWord] [,:DWord] ... [,:DWord] - DWord - это параметры типа DWORD (т.е. двойное слово), например:
DeviceIoControl ProcDesc StdCall :DWord, :DWord, :DWord, :DWord, :DWord, :DWord, :DWord, :DWord
GetCurrentProcessId ProcDesc StdCall
Твоя ошибка, скорее всего из-за того, что необходимо использовать как компиляцию, так и линкование (линчевание), различая малые и большие буквы. Я компилирую проги таким батником:
cls
@SET FI=_имя асм файла без расширения_
@SET FO=_имя ехе файла без расширения
@tasm32 /ml /t /m3 /z /q /iF:TASMInclude %FI%.asm
@tlink32 -x -Tpe -aa -c -V4.0 -LF:TASMLib %FI%.obj, %FO%.exe , , import32.lib
@del %FI%.obj
TASM у меня установлен в F:TASM


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


Отвечает Portnov

Доброе время суток, SonicX!
1)Лучше не надо... Просто путаница будет.
2)import32.lib содержит описания большинства виндовых ф-ций
3)Так библиотеку-то (import32.lib) подлинковать надо! Либо в исходнике, в начале, пишите
includelib 'import32.lib',
либо в командной троке линкера ее указываете... Какие ключи - разберитесь уж сами...
С уважением, Portnov.

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


Отвечает Pablo

Здравствуйте, SonicX!
А ты исипользуй регистрозависимую компиляцию с помощью tasmовского ключа /ml.
PS: Вышли мне пожалуста ссылку на полный паает tasmа или сам tasm, а то у меня тока компилятор.

Ответ отправлен: 01.10.2002, 09:51
Отправитель: Pablo


Отвечает masquer

Доброе время суток, SonicX!
В исходниках обибок нет. Судя по всему с либами у тебя и проблема - линкер найти не может информации о функции

Ответ отправлен: 01.10.2002, 10:50
Отправитель: masquer


 Вопрос № 1382

Доброе время суток!
Для взлома проги с помощью softice нужно поставить breakpoint на
функцию!!! Например выскакивает окошко где надо ввести serialnum.
Как узнать на какую функцию ставить этот брэйкпоинт?есть ли проги?
Подойдет ли winsight из Delphi или он ваще не по теме инфу выдает?



Вопрос отправлен: 01.10.2002, 00:58
Отправитель: Andrey

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

Отвечает Broken Sword

Здравствуйте, Andrey!
Ну в простейшем случае - дизасмишь прогу и смотришь в импорт. Все ф-ции, к-рые подойдут, потенциально являются именно той, к-рая выводит окно, что тебе нада.
В сложном случае (прога написана на VB или Delf-ях) никакие MessageBox не используются, поэтому действуешь др. методами (по hmemcpy, например)

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


Отвечает masquer

Приветствую Вас, Andrey!
Я не знаю чего там winsight выдает.
Обычно хватает функций GetDlgItemTextA и GetWindowTextA.
В сложных случаях я смотрю какая процедура обрабатывает сообщения контрола - кнопки, поля ввода etc.
В софтайсе это команды mod -> hwnd ... -> bmsg ...

Ответ отправлен: 01.10.2002, 10:59
Отправитель: masquer


 Вопрос № 1383

Уважаемые эксперты. Вопрос - У меня Masm 6.14 kak правильно ассемблировать и линьковать проги. Линьковщик постоянно дает ошибку. Возможны ли ошибки линко.. из за кривого кода.



Вопрос отправлен: 01.10.2002, 08:43
Отправитель: hf

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

Отвечает masquer

Здравствуйте, hf!
Какой вопрос - такой ответ - Возможны.

Ответ отправлен: 01.10.2002, 10:51
Отправитель: masquer


Отвечает Kiss

Доброе время суток, hf!
Возможно! Масмить нужно так Masm твой вайл с расширением Link просто название без расширения. Если не то глюк кода! попробуй по проще прогу накатай и масми посмотри что получится.


Ответ отправлен: 01.10.2002, 11:01
Отправитель: Kiss



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

Внимание!
Форма может работать некорректно в почтовых программах "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 (17)
Pascal (22)
Basic / VBA (10)
Java / JavaScript (10)
PHP (8)
MySQL / MSSQL (10)
Пользователю
Windows 95/98/Me (37)
Windows NT/2000/XP (28)
"Железо" (34)
Поиск информации (13)
Администратору
Windows NT/2000/XP (15)
Linux / Unix (17)
Юристу
Гражданское право (8)
Семейное право (3)
Трудовое право (5)
КоАП (4)

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




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

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


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

В избранное