AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Call DLL from Memory Error

Ein Thema von Lyan · begonnen am 23. Dez 2014 · letzter Beitrag vom 6. Jan 2015
Antwort Antwort
Lyan

Registriert seit: 5. Aug 2011
187 Beiträge
 
#1

Call DLL from Memory Error

  Alt 23. Dez 2014, 22:29
Hi,

habe grade ein Problem, leider in c++, daher versuche ich das Problem mal in reine Worte zu verfassen.

Ich habe ein Programm welches mir eine DLL aus dem Speicher lädt und mappt. Das funktioniert soweit,
allerdings wenn aus dieser DLL Funktionen aus einer anderen DLL geladen und aufgerufen werden crasht das Programm.

Die DLL funktioniert einwandfrei wenn sie nicht aus dem Speicher, sondern mit LoadLibrary geladen wird.


Hat jemand eine Idee woran das liegen könnte?

Vielen Dank für die Hilfe.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
40.494 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Call DLL from Memory Error

  Alt 24. Dez 2014, 00:05
Natürlich könnte man noch verrate wie man die DLL läd, da das ja kein Standardverhalten ist.

Grundsätzlich würde ich jetzt mal vermuten, daß eventuell die DLL falsch geladen und z.B. vergessen wurde irgendwelche Reallocations aufzulösen/anzupassen oder daß die Importe nicht richtig geladen und verlinkt wurden.

ODER ... Ist die DLL von dir? ... die Aufrufkonventionen oder Funktionsparameter sind falsch deklariert.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#3

AW: Call DLL from Memory Error

  Alt 24. Dez 2014, 01:11
allerdings wenn aus dieser DLL Funktionen aus einer anderen DLL geladen und aufgerufen werden crasht das Programm.
Ja, definitiv die Imports nicht (korrekt) resolved, wenn es nur dann auftritt, wenn du eine importierte Funktion aufrufen willst.
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  Mit Zitat antworten Zitat
Lyan

Registriert seit: 5. Aug 2011
187 Beiträge
 
#4

AW: Call DLL from Memory Error

  Alt 24. Dez 2014, 12:21
Ja genauer gesagt habe ich eine selbstgeschriebene DLL, die mit winsock (ws2_32.dll) einen Speedtest durchführt.
Meine DLL funktioniert einwandfrei wenn ich sie normal mit Loadlibrary lade. Sie crasht jedoch immer dann wenn ich sie aus dem Speicher lade und versuche eine Funktion aus der ws2_32.dll aufzurufen.
Mein Programm, das die DLL lädt hat ws2_32 schon geladen, d.h. meine DLL die aus dem Speicher geladen wird, holt sich das Handle einfach via GetModuleHandle().

Habe mir aus meinem Mainprogramm die Adresse von socket() ausgeben lassen, welche mit der Adresse von msocket() (dynamisch gecallt) aus meiner DLL übereinstimmt. Beim Versuch msocket() aus der dll zu callen crash, wie schon gesagt.

Ich denke den Code brauch ich nicht zu posten, da ich ihn komplett posten müsste (sind zu viele Macros etc, um codeparts zu posten) was wiederum eine Zumutung wäre zu verlanden das alles durchzulesen^^

Hoffe einfach auf jemanden der ein ähnliches Problem hatte oder sich vorstellen kann woran es liegen könnte.

Geändert von Lyan (24. Dez 2014 um 12:28 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#5

AW: Call DLL from Memory Error

  Alt 24. Dez 2014, 13:45
Unmöglich das ohne konkreten Code zu sagen. Wenn du dein Projekt mal anhängst, würde ich mich erbarmen mal drüberzuschauen. Was benutzt du denn zum manual mappen? Was selbstgeschriebenes oder eine fertige Lösung wie BlackBone?
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  Mit Zitat antworten Zitat
Lyan

Registriert seit: 5. Aug 2011
187 Beiträge
 
#6

AW: Call DLL from Memory Error

  Alt 24. Dez 2014, 16:34
Zacherl+1. Vielen dank für die große Hilfe die du mir anbietest! Das Problem war viel zu simple -es hat nur wsastartup gefehlt
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.197 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#7

AW: Call DLL from Memory Error

  Alt 25. Dez 2014, 18:26
Nur aus Interesse: Warum tut man sowas? Warum kein LoadLibrary?
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
Lyan

Registriert seit: 5. Aug 2011
187 Beiträge
 
#8

AW: Call DLL from Memory Error

  Alt 6. Jan 2015, 09:21
Nur aus Interesse: Warum tut man sowas? Warum kein LoadLibrary?
Mein Programm funktioniert mit Modulen. Ein Modul, bzw. eine DLL führt einen Speedtest für den Upload durch. Das Programm bekommt diese DLL nicht gleich mitgeliefert - es bekommt via tcp den Downloadlink zu einem unbestimmten Zeitpunkt gesendet. Die DLL wird dann also runtergeladen und befindet sich dann verschlüsselt im Arbeitsspeicher. Sie darf nicht dekodiert auf das filesystem gedroppt werden - deshalb dekodiere sie ich sie zur Laufzeit im Speicher und mappe sie dann. Was dann passiert geht ja mehr oder weniger aus meiner Frage hervor..
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
40.494 Beiträge
 
Delphi 11 Alexandria
 
#9

AW: Call DLL from Memory Error

  Alt 6. Jan 2015, 11:33
Dann kopiert man sich eben diese Datei schön fertig entschlüsselt aus dem Arbeitsspeicher.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:20 Uhr.
Powered by vBulletin® Copyright ©2000 - 2022, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf