Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Определить параметры для экспортируемой функции


DelphiLexx ©   (2004-10-21 18:15:00) 

С помощью программы Depends или ProcessInfo можно узнать какие функции экспортирует dll-файл. Как узнать какие нужны параметры и тип этих параметров для экспортируемой функции.
Т.е. есть example.dll и он предоставляет следующие ф-ции:
func1;
func2;
...
funcn;

Как узнать параметры и их тип, скажем, для


SammIk   (2004-10-22 19:01:00) [1]

Вот ежелиб, в функцию передовалось 8 бит и нибитом больше нельзы было прочитать, то тогда я бы сказал ДА, а так это просто логика программы.
А передается в любом случае 32бита, не больше не меньше.
Разве что ммх регистры использовать.


Digitman   (2004-10-22 09:43:00) [2]


> Дык всеравно, регистор-то 32битный и передается дворд. как
> не крути


ну где ты видишь, что передается DWORD ? BYTE передается !

старшее слово и старший байт мл.слова регистра EAX даже не затрагивается при передаче/приеме параметра


BiN   (2004-10-22 09:23:00) [3]

как вариант для общегослучая можно предложить Advanced Dll Wrapper v0.0001 by 90210 /HI-TECH на http://www.wasm.ru/toollist.php?list=11


SammIk   (2004-10-22 09:17:00) [4]

Дык всеравно, регистор-то 32битный и передается дворд. как не крути.
Да, базару нет, замудрил я со стеко(не допил, чтоли)


Digitman   (2004-10-22 09:09:00) [5]


> SammIk ©   (22.10.04 08:50) [11]
> можно положить в стек и не дворд


как раз со стеком-то и нельзя манипулировать иначе как модифицируя ESP на величину кратную DWORD

а вот такой пример как раз и иллюстрирует необязательность передачи параметра искл-но как DWORD

procedure myproc; export;
asm
 movsx ax, al
end;

var
x: integer;
..

asm
mov al, 255
call myproc
movsx [x], ax
end
showmessage(inttostr(x)); // -1


SammIk   (2004-10-22 08:50:00) [6]

Хотя, да. Тут я отступлю, можно положить в стек и не дворд))


Digitman   (2004-10-22 08:48:00) [7]


> SammIk ©   (22.10.04 08:37) [9]



> вы же не будете сопротевлятся, что передаются дворды?


еще как буду.
никто и ничто не обязывает разработчика библиотеки придерживаться каких-либо станд.соглашений о вызовах


SammIk   (2004-10-22 08:37:00) [8]

Но вы же не будете сопротевлятся, что передаются дворды?))
А уж как процедура их воспринемает, это вторая строчка моего поста


Digitman   (2004-10-22 08:32:00) [9]


> SammIk ©   (22.10.04 07:01) [7]


> всегда будут передоватся в ф-ю значением типа DWORD


с чего ты взял, что именно DWORD ?
предположим, параметр передается через EAX, но это отнюдь не означает, что в теле вызванной ф-ции будет использовано полное 32-разрядное значение этого регистра - не исключено, что будет использовано только  значение AL


SammIk   (2004-10-22 07:01:00) [10]

2 [6] Не согласен, всегда будут передоватся в ф-ю значением типа DWORD.
А уж там, дело времени, определить что это конкретно, указатель или число.


Игорь Шевченко   (2004-10-21 21:53:00) [11]


> Как узнать какие нужны параметры и тип этих параметров для
> экспортируемой функции.


Никак


clickmaker   (2004-10-21 19:23:00) [12]

8. Забить на всё это, в т.ч. и на пункт 7 и идти пить пиво :)


XProger   (2004-10-21 19:07:00) [13]

7. Забить на всё это, и пасать свою длл :)


GuAV   (2004-10-21 18:53:00) [14]

6. Найти примеры использования и по их коду попробовать понять


clickmaker   (2004-10-21 18:43:00) [15]

5. Дизасемблировать и по логике кода попробовать понять


GuAV   (2004-10-21 18:37:00) [16]

1. Посмотреть в документации
2. Посмотреть в исходниках/header'ах
3. Спосить у разработчика
4. Угадать


Наверх

Титульная страница Поиск, карта сайта Написать письмо