Jag vill veta hur man får reda på vilka api-anrop ett program använder i en viss DLL. >Jag vill veta hur man får reda på vilka api-anrop ett program använder i en viss DLL. jag ska göra ett program åt philips sverige. det andra programmet och dllen har philips tyskland gjort. Dom vägrar ge mig specen på DLLen men jag har fått tillåtelse att använda den. >Dependency Walker visar vilka funktioner som finns i DLLen, men inte vilka parametrar dom har. Bara jag får reda på det är resten hyffsat enkelt. ok. nu har jag hittat anropen till funktionerna. var inte så svårt."Spionera" på EXE-fil
Jag ska använda dllen själv men vet inte hur. Jag har ett program som använder samma dll och jag vill spionera på programmet för att se vilka anrop programmet gör i dllenSv: "Spionera" på EXE-fil
Med Microsofts Platform SDK följer det med verktyg för detta. API Monitor och Dependency Walker heter dom. Men dom kan bara visa dig vilka anrop som görs, inte vilka parametrar som skickas med. För det får du använda någon debugger.
>Jag ska använda dllen själv men vet inte hur.
Om det är meningen att du ska använda den borde väl tillverkaren tilhandahålla någon dokumentation.
MSSv: "Spionera" på EXE-fil
lite löjligt men så är det..
Dependency Walker visar vilka funktioner som finns i DLLen, men inte vilka parametrar dom har. Bara jag får reda på det är resten hyffsat enkelt.
API Monitor vägrar fungera, progget som jag laddar in i Api Monitor krashar bara då.Sv: "Spionera" på EXE-fil
Just det, men det är alltså inte så enkelt, eftersom någon sådan information inte lagras i den kompilerade körbara filen. Men med en bra debugger (Numegas verktyg kanske gör det lite lättare), grundläggande x86 assembler kunskaper och mycket tålamod så går det ofta att gissa sig till vad de olika värdena på anropsstacken är för något.
MSSv: "Spionera" på EXE-fil
Dll:en som används är inte importerad, utan jag har hittat GetProcAddress anropen i programmet.
exempel:
L00423BBD:
mov edi,[GetProcAddress]
push SSZ0044997C_ISPDOpenConnection
push eax
call edi
cmp eax,ebx
mov ebx,[GetLastError]
mov [esi+18h],eax
jnz L00423BDF
call ebx
mov [esi+10h],eax
xor ebp,ebp
Detta görs i början av programmet, det är c:a 15 funktioner. L00423BDF mappar upp nästa funktion.
Hur ser jag vart ISPDOpenConnection anropas efter att man har laddat in den med GetProcAddress?
Jag använder PE Explorer och OllyDbg.Sv: "Spionera" på EXE-fil
014F5730 MOV ECX, DWORD PTR DS:[1529728]
014F5736 PUSH ISPD.01521478 ; ASCII "DLL Function ISPDOpenConnection called"
014F573B PUSH 2
014F573D CALL ISPD.014FBF60
detta är själva anropet, right?
Två parametrar va?
Var är ISPD.01521478?
dllen heter ISPD.dll
resterande del av funktionen i programmet.
014F5742 MOV EAX, DWORD PTR SS:[ESP+4]
014F5746 SUB EAX, 0
014F5749 JE ISPD.014F57D6
014F574F DEC EAX
014F5750 JE SHORT ISPD.014F57A9
014F5752 DEC EAX
014F5753 JE SHORT ISPD.014F576F
014F5755 MOV ECX, DWORD PTR DS:[1529728]
014F575B PUSH ISPD.01521458 ; ASCII "Error: illegal connection type"
014F5760 PUSH 0
014F5762 CALL ISPD.014FBF60
014F5767 MOV EAX, 5
014F576C RETN 0C
014F576F CMP WORD PTR DS:[152E000], 22B8
014F5778 JE SHORT ISPD.014F5782
014F577A MOV EAX, 23
014F577F RETN 0C
014F5782 MOV EAX, DWORD PTR SS:[ESP+C]
014F5786 MOV ECX, DWORD PTR SS:[ESP+8]
014F578A MOV EDX, DWORD PTR DS:[152A72C]
014F5790 PUSH EAX
014F5791 PUSH ECX
014F5792 MOV ECX, DWORD PTR DS:[EDX+2528]
014F5798 CALL ISPD.014F1000
014F579D PUSH EAX
014F579E CALL ISPD.014FB730
014F57A3 ADD ESP, 4
014F57A6 RETN 0C
014F57A9 MOV ECX, DWORD PTR DS:[152A72C]
014F57AF CALL ISPD.014F6880
014F57B4 MOV ECX, DWORD PTR DS:[152A72C]
014F57BA MOV EAX, DWORD PTR SS:[ESP+8]
014F57BE PUSH EAX
014F57BF MOV ECX, DWORD PTR DS:[ECX+2524]
014F57C5 CALL ISPD.014FC590
014F57CA PUSH EAX
014F57CB CALL ISPD.014FB310
014F57D0 ADD ESP, 4
014F57D3 RETN 0C
014F57D6 MOV ECX, DWORD PTR DS:[152A72C]
014F57DC CALL ISPD.014F6880
014F57E1 MOV EAX, DWORD PTR DS:[152A72C]
014F57E6 MOV EDX, DWORD PTR SS:[ESP+8]
014F57EA PUSH EDX
014F57EB MOV ECX, DWORD PTR DS:[EAX+2524]
014F57F1 CALL ISPD.014FC250
014F57F6 PUSH EAX
014F57F7 CALL ISPD.014FB310
014F57FC ADD ESP, 4
014F57FF RETN 0C
en liten funktion som anropas.
014F6880 PUSH ECX
014F6881 CMP WORD PTR DS:[152E002], 22B8
014F688A PUSH EBX
014F688B MOV EBX, DWORD PTR DS:[<&KERNEL32.Sleep>] ; KERNEL32.Sleep
014F6891 PUSH ESI
014F6892 PUSH EDI
014F6893 MOV ESI, ECX
014F6895 JNZ SHORT ISPD.014F68C2
014F6897 CMP WORD PTR DS:[152E004], 22B8
014F68A0 JNZ ISPD.014F6964
014F68A6 MOV ECX, DWORD PTR DS:[1529728]
014F68AC PUSH ISPD.01521B54 ; ASCII "Currently no B-channel connections setup by ISPD"
014F68B1 PUSH 1
014F68B3 CALL ISPD.014FBF60
014F68B8 POP EDI
014F68B9 POP ESI
014F68BA MOV EAX, 1
014F68BF POP EBX
014F68C0 POP ECX
014F68C1 RETN