Страница: 1 |
Страница: 1 |
Вопрос: Callback внутри класса на VB
Добавлено: 02.02.08 22:28
Автор вопроса: Barmalej
Есть у меня пример сабклассинга внутри класса на асме но никак не получается его подогнать для других АПИ типа EnumChildWindows или SHBrowseForFolder - я в ассемблере мало что понимаю. Видел на planetsourcecode.com пример, но там очень много кода, a в моем примере сабклассинга всего одна функция и одна константа.
Вот мой пример:
push ebp
mov ebp, esp
add esp, 0FFFFFFFCh
lea eax, [ebp-4]
push eax
push dword ptr [ebp+14h]
push dword ptr [ebp+10h]
push dword ptr [ebp+0Ch]
push dword ptr [ebp+8]
push XXXXXXh <--Насколько я понимаю, это адрес класса
mov eax, XXXXXXh <-- Адрес функции
call eax
mov eax, [ebp-4]
leave
retn 10h
Ответы
Всего ответов: 10
Номер ответа: 1
Автор ответа:
VerhoLom
Вопросов: 20
Ответов: 285
Профиль | | #1
Добавлено: 25.05.08 15:48
В общих чертах все выглядит так: первый публичный метод в классе идет под номером 28 в vtbl. Чтобы это все использовать, изучите примеры на АПИ (смотрите ссылки ниже) - там такая фишка реализована для оконных функций, но для другого такое тоже подойдет - главное написать прапвильный номер метода.
http://vbnet.ru/samples/download.aspx?id=562
http://vbnet.ru/samples/download.aspx?id=541
Номер ответа: 2
Автор ответа:
VerhoLom
Вопросов: 20
Ответов: 285
Профиль | | #2
Добавлено: 25.05.08 17:45
Кстати, вот разассемблировал (NASMовским NDISASMом):
55 push ebp
8BEC mov ebp,esp
83C4FC add esp,byte -0x4
8D45FC lea eax,[ebp-0x4]
50 push eax
FF7514 push dword [ebp+0x14]
FF7510 push dword [ebp+0x10]
FF750C push dword [ebp+0xc]
FF7508 push dword [ebp+0x8]
6800000000 push 0x0 ;Сюда пишется указатель на класс (см. пример по данным ранее ссылкам)
B800000000 mov eax,0x0 ;Сюда пишется указатель на процедуру, которую мы хотим вызвать из vtbl
FFD0 call eax
8B45FC mov eax,[ebp-0x4]
C9 leave
C21000 ret 0x10[/b]
Номер ответа: 3
Автор ответа:
Администратор
ICQ: 278109632
Вопросов: 42
Ответов: 3949
Web-сайт:
Профиль | | #3
Добавлено: 26.05.08 01:59
Ого... Тут кто-то знает что такое VTable Кто шарит во внутренностях ВБ - милости прошу в аську, может вместе новый компилер напишем-таки, а то один я его вечность писать буду...
Номер ответа: 4
Автор ответа:
Sharp
Лидер форума
ICQ: 216865379
Вопросов: 106
Ответов: 9979
Web-сайт:
Профиль | | #4
Добавлено: 26.05.08 06:06
Executioner, а что, кто-то не знает, что такое vTable?
Номер ответа: 5
Автор ответа:
Администратор
ICQ: 278109632
Вопросов: 42
Ответов: 3949
Web-сайт:
Профиль | | #5
Добавлено: 26.05.08 15:00
Думаю, добрые 90% форумчан
Номер ответа: 6
Автор ответа:
HACKER
Разработчик Offline Client
Вопросов: 236
Ответов: 8362
Профиль | | #6
Добавлено: 28.05.08 00:10
Ребята, я знаю что такое википедия, гугл и ещё много-много страшных слов )
Номер ответа: 7
Автор ответа:
Администратор
ICQ: 278109632
Вопросов: 42
Ответов: 3949
Web-сайт:
Профиль | | #7
Добавлено: 28.05.08 00:49
Рус, ты крут
Номер ответа: 8
Автор ответа:
Smith
ICQ: ненавижу
Вопросов: 28
Ответов: 317
Web-сайт:
Профиль | | #8
Добавлено: 28.05.08 02:08
Не просто крут. Реально крут (80)
Номер ответа: 9
Автор ответа:
HACKER
Разработчик Offline Client
Вопросов: 236
Ответов: 8362
Профиль | | #9
Добавлено: 29.05.08 02:46
Ну дык куда вам грешным до меня то? )
Номер ответа: 10
Автор ответа:
Sharp
Лидер форума
ICQ: 216865379
Вопросов: 106
Ответов: 9979
Web-сайт:
Профиль | | #10
Добавлено: 29.05.08 04:15
Ангелы, такие как я, грехов не имеют :P