Какие регистры нужно сохранять при вызове функции из Dll

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
The trick
Постоялец
Постоялец
 
Сообщения: 781
Зарегистрирован: 26.06.2010 (Сб) 23:08

Какие регистры нужно сохранять при вызове функции из Dll

Сообщение The trick » 31.07.2011 (Вс) 10:26

Здравствуйте форумчане! Я пишу DLL на ассемблере с целью оптимизации своей программы. В DLL содержатся экспортируемые функции, я из VB вызываю их так: Код:
Код: Выделить всё
Public Declare Function SetAdvancedFormat Lib "D:\Program Files\Microsoft Visual Studio\VB98\ASSS\Utility\Audio\Audio.dll" (BitPerSample As Integer, SamplePerSecond As Long, Channel As Integer, Format As WAVEFORMAT) As Long


Все работает нормально, но только из среды или с компиляцией в P-код. При компиляции в Native вылетает Access violation when writing....
Через дебагер смотрю моя функция из Dll вызывается заканчивается и где-то встает в коде бейсика, с ошибкой. Я думаю что это проблема с сохранением регистров. Собственно вопрос. Я в своем коде DLL сохраняю в каждой функции регистры ESI, EDI, EBX, ESP,EBP не помогает может какие нибудь еще надо? Тупо с PUHAD' ом все работает, но все же хотелось узнать конкретнее какие именно.
UA6527P

Filyus
Обычный пользователь
Обычный пользователь
 
Сообщения: 81
Зарегистрирован: 07.07.2011 (Чт) 11:54

Re: Какие регистры нужно сохранять при вызове функции из Dll

Сообщение Filyus » 31.07.2011 (Вс) 10:52

В 32-битной Windows стандартно сохраняются регистры: EBX, EBP, ESI, EDI и, естественно, ESP, т.е. свободно можно изменять: EAX, ECX и EDX.
Все нужные регистры вы сохраняете, так что проблема не в этом. Cкорее всего, где-то в коде несоответствие пары PUSH-POP.
Вложения
calling_conventions.pdf
Таблица соглашений вызовов
(356.21 Кб) Скачиваний: 58

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Какие регистры нужно сохранять при вызове функции из Dll

Сообщение Хакер » 31.07.2011 (Вс) 11:19

Тестовый вызыватель, библиотеку в студию. Будет описание того, где косяк.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Google-бот, Mail.ru [бот] и гости: 54

    TopList