Rundll32 - Funcția de apel DLL biblioteci blog pe ferestre

Rundll32 - utilitar de linie de comandă, care este proiectat pentru a încărca și rula funcțiile pe 32 de biți și 64-biți biblioteci DLL. Mulți cred că acest lucru înseamnă Rundll32 pentru a rula DLL ca o aplicație executabilă. În realitate, nu există nici un lucru, cum ar fi un „start DLL“, deoarece nu este executabil în forma sa pură (cum ar fi EXE). În DLL conține doar funcții (proceduri) și, prin urmare, numai funcții pot fi apelate. Prin urmare, definiția a ceea ce Rundll32.exe utilitate este folosit pentru a rula funcțiile (proceduri) stocate în DLL.






Rundll32 permite accesul numai la funcții / proceduri în cadrul DLL, care au fost scrise într-un anumit fel. Nu numai că numitele funcții trebuie să fie exportate, astfel încât acestea, de asemenea, trebuie să îndeplinească cerințe specifice pentru descrierea parametrilor de intrare. funcții de bibliotecă care nu sunt marcate ca fiind exportabil, conduse de Rundll32 nu se poate.

Puțini știu că Rundll32 poate fi folosit pentru a declanșa funcții de la orice tip de fișier, construit pe un principiu similar cu bibliotecile DLL: elementele ActiveX cu extensia .OCX, Panou de control applet-uri cu extensia .cpl, conducătorul auto cu extensia .drv. Analizeaza, în timpul liber, structura acestor fișiere și se compară cu structura DLL.

A susținut că utilitatea Rundll32 a fost proiectat inițial pentru uz intern de către dezvoltatorii de sistem de operare, care este utilizat de Windows pentru a rula un număr limitat de funcții de sistem DLL.

Merită atenția asupra faptului că în Windows Vista / 7 și sisteme de operare mai târziu, de utilitate Rundll32 nu este recomandat pentru utilizare și numai activată numai în scopul de a menține compatibilitatea cu aplicațiile mai vechi.

Motivul pentru această atitudine constă în numeroasele probleme asociate cu utilizarea Rundll32 în mediile lor de software. Ca fără Rundll32, vă întreb? Se pare, Microsoft scrie în mod activ utilități speciale de sistem, care înlocuiesc treptat funcționalitatea nostru preferat de numeroase funcționalități ale produsului software. Prin urmare, din când în când în Windows 7 procese pot găsi încă rundll32 proces, cu toate acestea, un fenomen similar se produce mai puțin și mai puțin. )

Algoritmul de rundll32

În general, ca instrument este un fel de înveliș, Rundll32 algoritmul poate fi descris după cum urmează:

Cum pentru a vedea calea completă de pornire Rundll32

În cazul în care sistemul fără nici un motiv aparent dintr-o dată a reușit să găsească proces care rulează rundll32, și ați întrebat, și ceea ce este, de fapt, utilitatea funcțională a lansat, puteți determina acest lucru prin calea completă a începe utilitate Rundll32. Vizualizați calea de pornire completă, adică parametrii de linie de comandă poate fi folosind utilitarul task manager de sistem.






Apelați "Task Manager" (Ctrl + Shift + Esc), mergeți la meniul "View", selectați "Select Columns .." și derulând în jos lista, derulați la "Command Prompt" și marcați caseta de selectare acestuia, apoi faceți clic pe OK.
Rezultatul va fi aparitia ferestrei principale, Task Manager pentru „linie de comandă“ full-line de start Rundll32.

Cum de a rula dll

Versiunile pe 32 de biți și 64 de biți de programe

În versiunile pe 64 de biți ale sistemelor de operare Windows, există 2 opțiuni de program rundll32.exe:

  • versiunea pe 64 de biți este situat în% SystemRoot% \ System32 \;
  • versiunea pe 32 de biți este situat în SystemRoot%% \ SysWOW64 \.

Într-un sistem de operare pe 64 de biți pentru a încărca 64-bit DLL este o versiune pe 64 de biți de rundll32.exe poate fi utilizat. situat în directorul% SystemRoot% \ System32 \. În schimb, programele pe 32 de biți pe sistemul de operare pe 64 de biți, accesarea% SystemRoot% \ System32 \. pentru a se asigura compatibilitatea va fi redirecționat către% SystemRoot% \ SysWOW64 \ și, în consecință, va fi utilizat pentru versiunea pe 32 de biți de rundll32.exe.

utilizare EXEMPLU Rundll32

Rundll32 pentru a rula programul folosind sintaxa liniei de comandă de forma:

Ca un exemplu, eu propun să demonteze comanda pentru a porni applet „Regional și Language Options“ din panoul de control, fila „formate“:

rundll32.exe Shell32.dll, Control_RunDLL intl.cpl ,, 0

Când executați această comandă de utilitate Rundll32 cauza Control_RunDLL () funcție, care este în Shell32.dll bibliotecă. și dau următorii parametri:

La crearea funcțiilor exportate (în exemplele de mai sus, acesta este un pseudo-nume de punctul de intrare) trebuie să ia în considerare următoarele puncte:

  1. In loc de un șir de „punctul de intrare“, este de dorit să se precizeze numele real al funcției. Rețineți că „punctul de intrare“ utilizat programul rundll32, nu depinde de funcția DllEntryPoint, care, în bibliotecile DLL pe 32 de biți realizează prelucrarea și notificarea de conectare și deconectare a fluxului. Acesta este punctul de intrare pentru funcția în sine.
  2. Funcția este punctul de intrare pentru programul rundll32 este necesar să se determine, folosind _stdcall convenția de asteptare (în mod implicit C ++ _stdcall valoarea atributului CALLBACK second-hand). În caz contrar, implicit va fi folosit de către un alt _cdecl convenție de asteptare. Acest lucru va duce la crash program de lucru Rundll32 după apelarea acestei funcții.

Funcția, care este punctul de intrare, următorii parametri:

ID-ul (mâner) din fereastra părinte, care este de obicei folosit pentru a crea ferestre încarcă funcțiile DLL.

Șirul de comandă a trecut biblioteca. Acest șir este o secvență de caractere terminate printr-un cod de 0.

modul de afisare al bibliotecii selectate. (Datele transmise funcția CreateProcess).

EXEMPLU funcția de creare DLL exportate

Am scris un exemplu de limbaj de asamblare, asa ca nu da vina pe mine :) În această limbă, cumva pot exprima ideile în domeniul programării. Se compilează totul prin versiunea compilator FASM pentru Windows (FASMW.EXE). În DLL, am descris o singură funcție exportată numit ShowErrorMessage. care afișează fereastra de eroare cu parametrii specificați. Testdll.asm va crea fișierul și adăugați următorul conținut: