Toon posts:

[C++]DLL aftappen

Pagina: 1
Acties:

Verwijderd

Topicstarter
Is het mogelijk om een DLL af te tappen? Ik wil een bestaande driver DLL namelijk emuleren, maar heb geen idee of dit kan en zo ja hoe je dat doet.

Verwijderd

Jahoor, je maakt zelf gewoon een dll waaruit je alle functies van de bestaande dll exporteert.
(Dus gewoon dezelfde functienamen met dezelfde argumenten).

Google maar 's even, zodra je weet hoe dll's werken (dus als je bv. ooit zelf 's je eigen app. met plugins gemaakt hebt) zie je dat 't supersimpel is.

Verwijderd

Topicstarter
Verwijderd schreef op 13 November 2002 @ 15:30:
Jahoor, je maakt zelf gewoon een dll waaruit je alle functies van de bestaande dll exporteert.
(Dus gewoon dezelfde functienamen met dezelfde argumenten).

Google maar 's even, zodra je weet hoe dll's werken (dus als je bv. ooit zelf 's je eigen app. met plugins gemaakt hebt) zie je dat 't supersimpel is.
Ik weet hoe DLL's werken, heb er al meerdere gemaakt ;)

Het probleem is, en dat is niet helemaal naar voren gekomen in de openingspost, dat de bestaande DLL moet blijven bestaan en draaien.

  • LordLarry
  • Registratie: Juli 2001
  • Niet online

LordLarry

Aut disce aut discede

tis wel een gewone dll en niet een activex/com server?

dan kan je gewoon zoals Led voorsteld het volgende doen:
- hernoem de originele dll
- maak een eigen dll met de originele dll functies en naam
- in de implementatie van jouw dll laad je de originele dll en sluis je alle functies door

We adore chaos because we like to restore order - M.C. Escher


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 17:57

.oisyn

Moderator Devschuur®

Demotivational Speaker

Verwijderd schreef op 13 november 2002 @ 15:30:
Jahoor, je maakt zelf gewoon een dll waaruit je alle functies van de bestaande dll exporteert.
(Dus gewoon dezelfde functienamen met dezelfde argumenten).

Google maar 's even, zodra je weet hoe dll's werken (dus als je bv. ooit zelf 's je eigen app. met plugins gemaakt hebt) zie je dat 't supersimpel is.


heej Led, jij hier? :D

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Verwijderd

Topicstarter
LordLarry schreef op 13 november 2002 @ 15:40:
tis wel een gewone dll en niet een activex/com server?

dan kan je gewoon zoals Led voorsteld het volgende doen:
- hernoem de originele dll
- maak een eigen dll met de originele dll functies en naam
- in de implementatie van jouw dll laad je de originele dll en sluis je alle functies door
Het is een gewone DLL (DLPortIO) die de LPT aansturing onder NT voor z'n rekening neemt.

Het zou op zich kunnen wat je zegt, maar m'n voorkeur gaat wel uit naar het niet hernoemen van de originele. Als het even kan wil ik daar van af blijven.

Hoe werkt een DLL op de achtergrond eigenlijk, ik bedoel wat gebeurt er als ik een functie aanroep? Als het met messagequeue's werkt, dan zouden de messages afgetapt kunnen worden lijkt me.

  • LordLarry
  • Registratie: Juli 2001
  • Niet online

LordLarry

Aut disce aut discede

Verwijderd schreef op 13 November 2002 @ 16:03:
[...]

Het is een gewone DLL (DLPortIO) die de LPT aansturing onder NT voor z'n rekening neemt.
Weet je zeker dat het dan geen device driver is?
Het zou op zich kunnen wat je zegt, maar m'n voorkeur gaat wel uit naar het niet hernoemen van de originele. Als het even kan wil ik daar van af blijven.
Dan kan het niet
Hoe werkt een DLL op de achtergrond eigenlijk, ik bedoel wat gebeurt er als ik een functie aanroep? Als het met messagequeue's werkt, dan zouden de messages afgetapt kunnen worden lijkt me.
Het werkt op de achtergrond door de linker die de dll in het geheugen laad (als ie er al niet stond) en die code in je process mapped enz. Dan worden de functies in je code reroute (even simpel gezegt) en ze wijzen nu direct naar de functies in je dll. Das statisch linken. Of als je de dll dynamisch linked kan je via een functie vragen wat de pointer is naar de dll functie met een bepaalde naam. Kortom: nee, niet met messages :p. Dat wil niet zeggen dat het zou kunnen dat iemand er wel voor gekozen heeft om dat te doen nadat ie de dll geladen heeft, maar het is niet gebruikelijk.

We adore chaos because we like to restore order - M.C. Escher


Verwijderd

Verwijderd schreef op 13 november 2002 @ 16:03:
[...]

Het is een gewone DLL (DLPortIO) die de LPT aansturing onder NT voor z'n rekening neemt.

Het zou op zich kunnen wat je zegt, maar m'n voorkeur gaat wel uit naar het niet hernoemen van de originele. Als het even kan wil ik daar van af blijven.

Hoe werkt een DLL op de achtergrond eigenlijk, ik bedoel wat gebeurt er als ik een functie aanroep? Als het met messagequeue's werkt, dan zouden de messages afgetapt kunnen worden lijkt me.
hernoemen is waarschijnlijk wel een vereiste, anders roepen de applicaties gewoon de oude aan, ipv jouw wrapper. En wat is het probleem van hernoemen, als je weet waar je mee bezig bent is er geen risico aan verbonden.

  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 21-08 17:14
Aanvulling: bij een DLL link wordt er een .DLL geladen op baiss van naam, tenzij die DLL al in het geheugen zit - dan wordt de geladen versie gebruikt. Het renamen en vervangen van een DLL die al geladen is heeft dus geen effect; daarvoor moet je alle users van die DLL sluiten of eventueel rebooten.

Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein


Verwijderd

Nou hebben ze zich bij microsoft ooit een soortgelijk iets afgevraagd en zij zijn er onderzoek naar gaan doen. Op http://research.microsoft.com/sn/detours/ staat een heel interessant verhaal met daarin hoe dat moet en wat je er mee kan.

Verwijderd

Topicstarter
Hey bedankt allemaal voor de replies. Ik ga wat dingen proberen en dat van microsoft eens doorlezen. Mocht dat op niks uitlopen, dan ga ik toch voor het hernoemen ;)

Verwijderd

Ik geloof dat er een API call ForceLibary oid is waarmee je een applicatie kan forceren om een bepaalde dll te gebruiken. Ik weet het niet zeker en over het hoe en wat weet ik ook niks, maar misschien dat je er eens naar kan zoeken.
Pagina: 1