Hallo, ich habe grade versucht folgendes Beispiel nachzuvollziehen:
Problem mit dll-Funktionen
Aber bei mir funktioniert es nicht wenn ich die Variabel als Array ausgeben lassen möchte wie beschrieben bekomme ich die Fehlermeldung: Error: Subscripted used with non.Array variable.
Jemand eine Idee was ich falsch mache ^^?
Problem mit dll-Funktionen2
-
- [ offen ]
-
tomcat -
14. Juni 2010 um 00:41 -
Geschlossen -
Erledigt
-
-
Hallo tomcat,
poste doch bitte dein Skript und die dazugehörige DLL,
mfg (Auto)Bert
-
ok also C++ teil:
Headerdatei:
C
Alles anzeigen#if!defined ReadMemory_h #define ReadMemory_h #define DllExport __declspec(dllexport) #include <windows.h> #include <tlhelp32.h> //Funktionsdeklaration DllExport int EnableDebugPriv(VOID); DllExport int ReadMemoryAdress(int Pid); #endif
Quelldatei:
C
Alles anzeigen//ReadMemory.c #include "ReadMemory.h" DllExport int EnableDebugPriv(void) { HANDLE hToken; LUID sedebugnameValue; TOKEN_PRIVILEGES tkp; if(OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken )) { if(LookupPrivilegeValue(NULL, SE_DEBUG_NAME, &sedebugnameValue )) { tkp.PrivilegeCount=1; tkp.Privileges[0].Luid = sedebugnameValue; tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED; if(AdjustTokenPrivileges(hToken, FALSE, &tkp, sizeof tkp, NULL, NULL )) { CloseHandle(hToken); return 0; }; }; }; CloseHandle(hToken); return 1; } DllExport int ReadMemoryAdress(int Pid) { HANDLE hproc; int buffer; DWORD BytesToRead = 1; DWORD adress; int test; test = EnableDebugPriv(); if (test = 1) { return 1; } adress=0x0100579C; hproc = OpenProcess(PROCESS_VM_READ, FALSE, Pid); if(ReadProcessMemory(hproc,(LPVOID)adress,&buffer,sizeof(buffer),&BytesToRead)) { CloseHandle(hproc); return buffer; } else { CloseHandle(hproc); return 1; } }
Compilieren geht.
Autoit datei:
Code
Alles anzeigen$pid = WinGetProcess("MineSweeper") ;process auswählen MsgBox(0,"","PID: " & $pid ) $dll = DllOpen("dll.dll") ;~ MsgBox(0,"Test",DllCall($dll,"int","EnabledebugPriv")) $ItemName = DllCall($dll,"int","ReadMemoryAdress","int",$pid) MsgBox(0,"Return value",$ItemName) DllClose($dll)
Gibt 0 aus, müsste wenn minsweeper counter läuft >0 sein.
Als Array:
Code
Alles anzeigen$pid = WinGetProcess("MineSweeper") ;process auswählen MsgBox(0,"","PID: " & $pid ) $dll = DllOpen("dll.dll") ;~ MsgBox(0,"Test",DllCall($dll,"int","EnabledebugPriv")) $ItemName = DllCall($dll,"int","ReadMemoryAdress","int",$pid) MsgBox(0,"Return value",$ItemName[0]) DllClose($dll)
Kommt die besagte Fehlermeldung
-
Compilieren geht.
Autoit datei:
[autoit]$pid = WinGetProcess("MineSweeper") ;process auswählen
[/autoit] [autoit][/autoit] [autoit]MsgBox(0,"","PID: " & $pid )
[/autoit] [autoit][/autoit] [autoit]
$dll = DllOpen("dll.dll")
;~ MsgBox(0,"Test",DllCall($dll,"int","EnabledebugPriv"))
$ItemName = DllCall($dll,"int","ReadMemoryAdress","int",$pid)MsgBox(0,"Return value",$ItemName)
[/autoit]
DllClose($dll)Gibt 0 aus, müsste wenn minsweeper counter läuft >0 sein.
Dein Skript sieht verdächtig nach etwas aus, was unseren Forenregeln widerspricht.
mfg (Auto)Bert
-
Ich hab lediglich ein bereits im Board vorhandenes Script auf minesweeper da es leicht zu testen ist umgebaut.
Hab nicht vor damit ein Bot zu bauen -.- dafür bräuchte ich nicht den umweg über eine extra dll gehen...
Ich würde gerne allgemein Speicher mittels einer schnelleren c++ dll auslesen.
Wenn sowas allgemeines den Boardregeln wiederspricht sorry...