Форум: "WinAPI";
Текущий архив: 2004.12.05;
Скачать: [xml.tar.bz2];
ВнизОпределить параметры для экспортируемой функции Найти похожие ветки
← →
DelphiLexx © (2004-10-21 18:15) [0]С помощью программы Depends или ProcessInfo можно узнать какие функции экспортирует dll-файл. Как узнать какие нужны параметры и тип этих параметров для экспортируемой функции.
Т.е. есть example.dll и он предоставляет следующие ф-ции:
func1;
func2;
...
funcn;
Как узнать параметры и их тип, скажем, для
← →
GuAV © (2004-10-21 18:37) [1]1. Посмотреть в документации
2. Посмотреть в исходниках/header"ах
3. Спосить у разработчика
4. Угадать
← →
clickmaker © (2004-10-21 18:43) [2]5. Дизасемблировать и по логике кода попробовать понять
← →
GuAV © (2004-10-21 18:53) [3]6. Найти примеры использования и по их коду попробовать понять
← →
XProger © (2004-10-21 19:07) [4]7. Забить на всё это, и пасать свою длл :)
← →
clickmaker © (2004-10-21 19:23) [5]8. Забить на всё это, в т.ч. и на пункт 7 и идти пить пиво :)
← →
Игорь Шевченко © (2004-10-21 21:53) [6]
> Как узнать какие нужны параметры и тип этих параметров для
> экспортируемой функции.
Никак
← →
SammIk © (2004-10-22 07:01) [7]2 [6] Не согласен, всегда будут передоватся в ф-ю значением типа DWORD.
А уж там, дело времени, определить что это конкретно, указатель или число.
← →
Digitman © (2004-10-22 08:32) [8]
> SammIk © (22.10.04 07:01) [7]
> всегда будут передоватся в ф-ю значением типа DWORD
с чего ты взял, что именно DWORD ?
предположим, параметр передается через EAX, но это отнюдь не означает, что в теле вызванной ф-ции будет использовано полное 32-разрядное значение этого регистра - не исключено, что будет использовано только значение AL
← →
SammIk © (2004-10-22 08:37) [9]Но вы же не будете сопротевлятся, что передаются дворды?))
А уж как процедура их воспринемает, это вторая строчка моего поста
← →
Digitman © (2004-10-22 08:48) [10]
> SammIk © (22.10.04 08:37) [9]
> вы же не будете сопротевлятся, что передаются дворды?
еще как буду.
никто и ничто не обязывает разработчика библиотеки придерживаться каких-либо станд.соглашений о вызовах
← →
SammIk © (2004-10-22 08:50) [11]Хотя, да. Тут я отступлю, можно положить в стек и не дворд))
← →
Digitman © (2004-10-22 09:09) [12]
> 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 09:17) [13]Дык всеравно, регистор-то 32битный и передается дворд. как не крути.
Да, базару нет, замудрил я со стеко(не допил, чтоли)
← →
BiN © (2004-10-22 09:23) [14]как вариант для общего случая можно предложить Advanced Dll Wrapper v0.0001 by 90210 /HI-TECH на http://www.wasm.ru/toollist.php?list=11
← →
Digitman © (2004-10-22 09:43) [15]
> Дык всеравно, регистор-то 32битный и передается дворд. как
> не крути
ну где ты видишь, что передается DWORD ? BYTE передается !
старшее слово и старший байт мл.слова регистра EAX даже не затрагивается при передаче/приеме параметра
← →
SammIk © (2004-10-22 19:01) [16]Вот ежелиб, в функцию передовалось 8 бит и нибитом больше нельзы было прочитать, то тогда я бы сказал ДА, а так это просто логика программы.
А передается в любом случае 32бита, не больше не меньше.
Разве что ммх регистры использовать.
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2004.12.05;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.04 c