Autor Beitrag
Boldar
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1555
Erhaltene Danke: 70

Win7 Enterprise 64bit, Win XP SP2
Turbo Delphi
BeitragVerfasst: Mo 08.04.13 14:46 
Hi,
Ich bin nicht sicher, ob das wirklich hier rein passt, aber seis drum.
Ich habe eine Software vorliegen (ohne Quellcode), welche eine MMF zur IPC benutzt, auf welche ich auch zugreifen möchte.
Ich sehe im Disassemblat die entsprechenden aufrufe von memcpy, kann jedoch den Namen der mmf bei der initialisierung nicht finden. Gibt es da weitere möglichkeiten? Ich habe schon versucht, getmappedfilename zu benutzen, das klappt jedoch (warum auch immer) nicht.
lg Boldar
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19314
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mo 08.04.13 15:21 
Hast du einmal die Liste im Process Explorer durchgeschaut? Vielleicht siehst du die gesuchte MMF ja vom Namen her schon.
Boldar Threadstarter
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1555
Erhaltene Danke: 70

Win7 Enterprise 64bit, Win XP SP2
Turbo Delphi
BeitragVerfasst: Mo 08.04.13 15:28 
Das ist ja das merkwürdige: Process Explorer zeigt die mmf nicht an.
Der Grund dafür, warum ich denke, dass es sich um eine mmf handeln muss, ist, dass in der export-Funktion der dll( also wo die daten verschickt werden) lediglich memcpy aufgerufen wird. Leider habe ich nicht herausgefunden, wo der Destination-poiner herkommt. Oder gibt es noch andere Wege, speicher zwischen 2 Prozessen zu sharen?
Mir scheint, ich komme nicht drum herum, die dll doch ausführlich zu untersuchen.
Martok
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 3661
Erhaltene Danke: 604

Win 8.1, Win 10 x64
Pascal: Lazarus Snapshot, Delphi 7,2007; PHP, JS: WebStorm
BeitragVerfasst: Mo 08.04.13 16:30 
Die MMF könnte auch ohne Namen erstellt worden sein, das Handle müsste dann dupliziert und mit den passenden Rechten versehen "auf anderen Wegen" in den zweiten Prozess kommen. Im Disassemblat würdest du da mindestens DuplicateHandle suchen.

Weitere Varianten: du schreibst DLL, also im gleichen Prozess. Damit auch im gleichen Adressspace, die könnte also problemlos auch direkt auf irgendwo VirtualAlloc'ten Speicher zugreifen.

user profile iconBoldar hat folgendes geschrieben Zum zitierten Posting springen:
Ich habe schon versucht, getmappedfilename zu benutzen, das klappt jedoch (warum auch immer) nicht.
Wie immer: Rückgabewert, GetLastError?

_________________
"The phoenix's price isn't inevitable. It's not part of some deep balance built into the universe. It's just the parts of the game where you haven't figured out yet how to cheat."
Boldar Threadstarter
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1555
Erhaltene Danke: 70

Win7 Enterprise 64bit, Win XP SP2
Turbo Delphi
BeitragVerfasst: Mo 08.04.13 16:58 
Nein, die dll wird quasi von den "Clientprozessen" benutzt, also schon verschiedener Adressraum. Ich möchte halt quasi nur direkt in die Kommunikation eingreifen und nicht die dll benutzen, da die einige Fehler/Nachteile hat.
Nach DuplicateHandle schaue ich gleich mal, das ist womöglich ein guter tipp.
Getmappedfilename gab nur 0 zurück, nach getLasterror schaue ich dann auch gleich mal. (Bin grad an einem anderem Rechner).
Boldar Threadstarter
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1555
Erhaltene Danke: 70

Win7 Enterprise 64bit, Win XP SP2
Turbo Delphi
BeitragVerfasst: Di 09.04.13 16:43 
Dazu nochmal eine kleine ASM-Verständnisfrage:
Folgende Befehle am Anfang einer ASM-Funktion kenne ich:
ausblenden Quelltext
1:
2:
push    ebp
mov     ebp, esp

Damit Sichert man sich ja quasi den "Baseframe", und kann danach lokale Variablen auf dem Stack ablegen, die man dann mit epb-xx abruft.
Nun liegen doch bei epb-xxx lokale Variablen, und darüber auf dem Stack die Parameter der Funktion.
Woher kommenn nun Potentiell Ausdrücke wie epb-10364h (also mit sehr hohen Werten)?? Was liegt denn da, bzw. wie wird da von ausserhalb der Funktion drauf zugegriffen, denn daher wird eine Adresse geladen.