22.10.2012, 21:09
|
|
Профессионал
|
|
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
|
|
Цитата:
представь, есть форма, на ней куча едитов, в первый выбираешь имя длл во второй имя функции в ней, в третьем выбираешь типы параметров и значения, наример
|
Код:
var hModule: DWORD;
proc: pointer;
a: DWORD;
Params: array of DWORD;
...
hModule := LoadLibrary(Edit1.Text);
proc := GetProcAddress(hModule, Edit2.Text);
if (proc <> 0) then
begin
asm
mov esi, Params
mov ecx, count
lea esp, [esp - ecx * 4]
mov edi, esp
cld
rep movsd
mov eax, proc
call eax
end;
end
else
MessageBoxA(0, 'Печальная история...', 'Ошибка', 0);
Как-то так в случае, если параметры можно превратить в массив двордов Params (абсолютное большинство случаев). Если нельзя (суммарное кол-во байт не делится на 4) - то придется подобным образом с вордами (к счастью до байтов скатываться не придется - push для байта не существует, так что суммарный размер параметров всегда делится на 2 как минимум).
__________________
jmp $ ; Happy End!
The Cake Is A Lie.
|