Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Assembler

Страница: 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ом):

[b]
 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-сайт: domkratt.com
 Профиль | | #3
Добавлено: 26.05.08 01:59
Ого... Тут кто-то знает что такое VTable =) Кто шарит во внутренностях ВБ - милости прошу в аську, может вместе новый компилер напишем-таки, а то один я его вечность писать буду...

Ответить

Номер ответа: 4
Автор ответа:
 Sharp


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #4
Добавлено: 26.05.08 06:06
Executioner, а что, кто-то не знает, что такое vTable?

Ответить

Номер ответа: 5
Автор ответа:
 



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

ICQ: 278109632 

Вопросов: 42
Ответов: 3949
 Web-сайт: domkratt.com
 Профиль | | #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-сайт: domkratt.com
 Профиль | | #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-сайт: sharpc.livejournal.com
 Профиль | | #10
Добавлено: 29.05.08 04:15
Ангелы, такие как я, грехов не имеют :P

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам