Programmieren - alles kontrollieren 4.938 Themen, 20.667 Beiträge

Fremde DLL selbst genutzt...

Mdl / 4 Antworten / Flachansicht Nickles

Hin und wieder findet man bei einem interessanten Programm ja eine zugehörige DLL-Datei, die einen dazu verlocken könnte, sie in eigenen Programmen selbst zu nutzen.

Die Funktionsnamen, die eine solche nach außen hin anbietet habe ich ja noch herausfinden können, z.B. mittels TDUMP von Borland/Codegear.

Leider aber dann eben doch nicht mehr.

Super wäre natürlich, wenn es ein Tool gäbe, das die Funktionsheader-Declaration liefern könnte. Diese könnte man dann in sein C-File übernehmen, die entsprechende Fkt. aufrufen und somit nutzen.

Soweit ich weiß, sind bei .NET oder COM-Funktionsbibliotheken die Eingangs/Ausgangstypen immer ersichtlich, oder? Sind dies dann auch DLL-Files? Oder haben diese eine andere Endung?

Kann ein halbwegs kundiger Assembler-Programmierer die Typen / Anzahl der Argumente / Größe der Argumente/eines Arguments/Rückgabewertes aus dem Assemblercode ersehen?

Danke und Grüße,

Mdl

bei Antwort benachrichtigen
Synthetic_codes Mdl „Fremde DLL selbst genutzt...“
Optionen

Hi Mdl, probier es mal mit strace. strace kommt aus der linux welt, läuft aber mittels cygwin zb auch unter windows. das programm zeigt dir an, wann welche funktion mit welchen parametern aufgerufen wird. Das ist einerseits nützlich, um die ursachen von segfaults zu finden, andererseits kannst du damit eben auch die von DLLs exportierten funktionen debuggen. ein beispieloutput sieht zb so aus:

strace ./control-ng
stat("/lib/ld-uClibc.so.0", {st_mode=S_IFREG|0755, st_size=20694, ...}) = 0
mprotect(0x2abde000, 4096, PROT_READ) = 0
mprotect(0x2aaec000, 4096, PROT_READ) = 0
ioctl(0, TIOCNXCL, {B38400 opost isig icanon echo ...}) = 0
ioctl(1, TIOCNXCL, {B38400 opost isig icanon echo ...}) = 0
brk(0) = 0x41b6d4
brk(0x41c6d4) = 0x41c6d4
brk(0x41d000) = 0x41d000
open("/var/tmp/rs.pid", O_WRONLY|O_CREAT|O_TRUNC, 0666) = 3
ioctl(3, TIOCNXCL, 0x7fff7c48) = -1 ENOTTY (Inappropriate ioctl for device)
write(3, "1"..., 1) = 1
close(3) = 0
socket(PF_INET, SOCK_STREAM, IPPROTO_IP) = 3
open("/etc/resolv.conf", O_RDONLY) = 4
ioctl(4, TIOCNXCL, 0x7fff7a68) = -1 ENOTTY (Inappropriate ioctl for device)
read(4, "nameserver 127.0.0.1\n"..., 4096) = 21
read(4, ""..., 4096) = 0
close(4) = 0
open("/etc/hosts", O_RDONLY) = 4
ioctl(4, TIOCNXCL, 0x7fff7a90) = -1 ENOTTY (Inappropriate ioctl for device)
read(4, "127.0.0.1 localhost.\n"..., 4096) = 21
read(4, ""..., 4096) = 0
close(4) = 0
socket(PF_INET, SOCK_DGRAM, IPPROTO_UDP) = 4
connect(4, {sa_family=AF_INET, sin_port=htons(53), sin_addr=inet_addr("127.0.0.1")}, 16) = 0
send(4, "\0\2\1\0\0\1\0\0\0\0\0\0\nrapidshare\3com\0\0\1\0\1"..., 32, 0) = 32
_newselect(5, [4], NULL, NULL, {10, 0}) = 1 (in [4], left {10, 0})
recv(4, "\0\2\201\200\0\1\0\25\0\0\0\0\nrapidshare\3com\0\0\1\0\1\300"..., 512, 0) = 368
close(4) = 0
connect(3, {sa_family=AF_INET, sin_port=htons(80), sin_addr=inet_addr("195.122.131.20")}, 16) = 0
send(3, "GET /files/271463773/OpenWrt-i386"..., 91, 0) = 91


wie du siehst zeigt er die parameter an funktionen an. zwar zeigt er die im klartext an, aber das sollte nicht allzu problematisch sein, den datentyp kann man sich dann in der regel auch selbst rausfinden

'); DROP TABLE users;--
bei Antwort benachrichtigen