|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
01.01.2008, 17:48 | #1 |
Непрофессионал
Участник клуба
Регистрация: 01.01.2008
Сообщений: 1,405
|
DirectX на masm32
Кто нибудь писал DirectX - программы/игры на masm32 ?
И чем больше я узнавал людей, тем больше мне нравились компьютеры.
------------------------------------ Страничка с моими программками http://ulex-masm.ru |
02.01.2008, 06:13 | #2 |
ИСККОНный хакер
Форумчанин
Регистрация: 08.11.2007
Сообщений: 195
|
Сходи на www.wasm.ru. Там есть уроки Iczelion'а, там об этом подробно написано.
#define QUESTION bb || !bb
|
07.02.2008, 22:35 | #3 |
Непрофессионал
Участник клуба
Регистрация: 01.01.2008
Сообщений: 1,405
|
Ладно, я так понял что тема ни у кого не вызывает никакого энтузиазма,
поэтому выкладываю свои исходники (сразу просьба не судить слишком строго). Может кто-нибудь заинтерисуется в части инклюдов. Описание методов интерфейсов стряпал сам, так что могут быть какие-то ошибки. Если кто-нибудь укажет на таковые буду блллагодарен. Примечание: Все вызовы методов интерфейсов организованы ч/з макрос vf, соответственно инклюды с описанием интнрфейсов заточены под этот макрос. ;*** vf macro: use "invoke vf(pInterface,Interface,Function)<, arguments>
И чем больше я узнавал людей, тем больше мне нравились компьютеры.
------------------------------------ Страничка с моими программками http://ulex-masm.ru |
10.03.2008, 07:49 | #4 |
Новичок
Джуниор
Регистрация: 09.03.2008
Сообщений: 2
|
Если кто объяснит как определить смещение в vtbl нужной функции.
Есть ли библиотека типов для DirectX 9? Как использовать DirectX9 в masm32? Подскажите плиз. |
10.03.2008, 23:05 | #5 |
Непрофессионал
Участник клуба
Регистрация: 01.01.2008
Сообщений: 1,405
|
Я в принципе сам зелёный как в ASM так и в DirectX, но желания чего-то понять полно.
Поэтому вот как я себе всё это представляю (надеюсь никто хихикать не будет, а укажет на ошибки) !! Начнём: Вот кусок программы - ;# Инициализация видеосистемы invoke SetWindowPos, [newhwnd], HWND_TOP, 50, 50, \ [Size_Window_X], [Size_Window_Y], SWP_SHOWWINDOW mov eax, 0 invoke Direct3DCreate8, D3D_SDK_VERSION mov FD3D, eax mov [d3ddm.Width2], 0 invoke vf(FD3D, IDirect3D8, GetAdapterDisplayMode), D3DADAPTER_DEFAULT, addr d3ddm cmp eax, S_OK jne Init_1 Здесь я специально оставил вызов API функции SetWindowPos и вызов метода GetAdapterDisplayMode интерфейса IDirect3D8 (базовый интерфейс графической части DirectX) А вот как выглядит дамп (dumppe.exe -disasm proga.exe >proga.dump) этого куска после компиляции- 00404B75 E840180000 call fn_004063BA 00404B7A B800000000 mov eax,0 00404B7F 6A78 push 78h 00404B81 E852180000 call fn_004063D8 00404B86 A348944000 mov [409448h],eax 00404B9D C7053497400000000000 mov dword ptr [409734h],0 00404BA7 8B1548944000 mov edx,[409448h] 00404BAD 8B12 mov edx,[edx] 00404BAF 6834974000 push 409734h 00404BB4 6A00 push 0 00404BB6 FF3548944000 push dword ptr [409448h] 00404BBC FF5220 call dword ptr [edx+20h] 00404BBF 83F800 cmp eax,0 00404BC2 0F85E8030000 jne loc_00404FB0 call fn_004063BA - это вызов API функции SetWindowPos "При компоновке все вызовы API-функций преобразуются к вызову типа CALL адрес1. При этом адрес, так же как и вызов, находится в секции кода (.text). По адресу же стоит команда jmp dword ptr [Адрес2], где [Адрес2] находится в секции .idata (импорта) и содержит двойное слово - адрес фуекции в динамической библиотеке" - цитата "Ассемблер для WINDOWS" В. Пирогов. Аналогично происходит вызов функции Direct3DCreate8: 00404B7F 6A78 push 78h - передача параметра ч\з стек 00404B81 E852180000 call fn_004063D8 - собственно вызов функции А вот дальше интересно, функция Direct3DCreate8 возвращает указатель на базовый интерфейс, я так понимаю что это есть указатель на таблицу адресов функций этого интерфейса. Т.е. я дальше вызываю метод GetAdapterDisplayMode - это девятый по счёту метод интерфейса IDirect3D8, соответственно его адрес будет находится по смещению 8*4байта = 32 =20h от базового адреса call dword ptr [edx+20h] - это вызов метода GetAdapterDisplayMode. Отсюда вытекает несколько выводов : 1 - очень важен порядок перечисления методов в описании интерфейса, попробуйте поменять в описании две функции местами - перестанут работать. 2 - вроде адреса этих функций получаются динамически, т.е. их нет в vtbl ??? Блин, прочитал всю эту ересь, самому страшно стало.
И чем больше я узнавал людей, тем больше мне нравились компьютеры.
------------------------------------ Страничка с моими программками http://ulex-masm.ru |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Как можно отлаживать в masm32? | Minimus | Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM | 9 | 12.08.2008 10:54 |
masm32 v9. не линкует программу | Alcash | Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM | 7 | 23.06.2008 09:57 |
Random на MASM32 | Ulex | Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM | 6 | 02.05.2008 16:00 |
обновление в блоге - MASM32 и DELPHI - битва за размер… | Pblog | Обсуждение статей | 0 | 19.09.2007 14:40 |