Wywoływanie funkcji z niewiadomą liczbą parametrów

0

Witajcie.Mam taki mały problem,a mianowicie, mam sobie stworzoną bibliotekę, która wywołuje funkcje kernelowskie i teraz powstaje problem ponieważ gdy tworzę wywołanie funkcji potrzebuje ich parametry, a zważając liczbę funkcji to szukanie i wstawianie ich parametrów może zająć sporo czasu,a dodatkowo biblioteka kernel32.dll zmienia się nieco za każdą nową wersją systemu.Tak więc chciałbym się zapytać czy da się jakoś załadować funkcję z biblioteki nie określając parametrów, ale tak ,żeby inny program mógł wywołać tę funkcję z mojej biblioteki i podać parametry.

Pozdrawiam.

0

To że kernel32.dll jest inny w róznych systemach to nie zmienia faktu że w wiekszosci przypadków funkcje mają takie same parametry ewentualnie są wersje "W" i "A"
WideString i AnsiString. O jaka dokładnie funkcję chodzi ?

Dlaczego "inny program" wywołuje funkcję z kernel32.dll przez Twój program a nie bezpośrednio ?

0

Mówię ogólnie o wszystkich funkcjach,a funkcje wywoływane są przez podmienioną bibliotekę ponieważ, chce podmienić pare funkcji, a reszta ma funkcjonować normalnie, a nie chciałem się bawić w żadne hooki itp.Co od ilości parametrów, to nie wydaje mi się ponieważ np. funkcja AddAtom ma tylko jeden parametr (lpString: PAnsiChar), a funkcja CreateFile ma ich aż 7 (lpFileName: PAnsiChar; dwDesiredAccess, dwShareMode: DWORD; lpSecurityAttributes: PSecurityAttributes;dwCreationDisposition, dwFlagsAndAttributes: DWORD; hTemplateFile: THandle).

Pozdrawiam.

0

Zawsze możesz zrobić tylko jedną funkcje zadeklarowaną jako:
WinApi(const char *name,...);
Wyciągasz parametry dokładnie tak jak to robi funkcja printf:
http://www.cplusplus.com/reference/clibrary/cstdarg/va_start/

Dopiero zauważyłem, że chodzi o delphi:
Czyli tak samo jak to robi funkcja Format:
procedure WinApi(const name:String;array of const);
wywólanie:
WinApi('SetFocus',[handle]);

0

wyleciało mi z głowy ale są programy które są w stanie oglądać wywołania API windows i jest to robione w runtime dla dowolnego EXE jaki sobie wybierzesz.
Celował bym bardziej że to jest jednak robione inna metoda niż tutaj zaproponowana i autor programu.

_13th_Dragon koledze chyba chodzi o napisanie DLL który będzie zastępował systemowy DLL i dopiero przezeń bedą wywoływane funkcje z DLL w katalogu windows.
Czyli żadnych zmian w pliku EXE jedynie podmiana DLL

0

koledze chyba chodzi o napisanie DLL który będzie zastępował systemowy DLL

WinAPI się zmienia, ale nigdy nie zmieniają się parametry, najwyżej dochodzą nowe funkcje.

Najprościej będzie zaimplementować wszystkie znane obecnie funkcje w danej bibliotece (czyli takie jakie są w Windows 7), tylko trzeba je ładować dynamicznie (przez GetProcAddress) żeby biblioteka działała też i w starszych windach.

0

http://www.rohitab.com/apimonitor
program do oglądania wywołań API systemowych

Mozna by napisac do autora i zapytać jak on to robi i czy można ta metoda podmienić funkcje

0

Wyszło na to, że trzeba zrobić tak jak na samym początku myślałem.Ale dzięki wszystkim.

Pozdrawiam.

1 użytkowników online, w tym zalogowanych: 0, gości: 1