Funktion aus dll
-
Hi
Ich verwende die Asus.dll zum auslesen von Mainboarddaten. Die Dll enthält unteranderen folgende Funktionen:
-SmbWriteByte
-SmbWriteWordIch habe jedoch keine Ahnung welche Parameter diese Funktionen benötigen. Ich möchte nämlich die Frequenz des Smbus erhöhen! Ich habe das auch schon mit SMB_REQUEST versucht, jedoch ohne Erfolg. Weiss vieleicht jmd von euch dazu Rat?
Lg
-
Da wird wohl nur eine Dokumentation helfen.
-
Vielleicht hilft Dir das Tool weiter.
Hab's selbst noch nicht ausprobiert, aber sieht so aus, als wenn man damit eine Menge anfangen könnte.
-
Hi
Ich habe nun den Assemblercode dieser Funktion. Kann man daraus die nötigen Argumente SmbWriteWord(???) ableiten?
;------------------------------------------------------------------------------ SmbWriteWord: push ebp mov ebp,esp sub esp,0000000Ch mov al,[ebp+08h] mov [ebp-08h],al mov cl,[ebp+0Ch] mov [ebp-07h],cl mov dx,[ebp+10h] mov [ebp-06h],dx mov dword ptr [ebp-04h],00100003h lea eax,[ebp-0Ch] push eax push 00000000h push 00000000h push 00000004h lea ecx,[ebp-08h] push ecx mov edx,[ebp-04h] push edx call jmp_AsmiCtrl.dll!AsmiCtrl.1 add esp,00000018h mov esp,ebp pop ebp retnLg
-
mantiz schrieb:
Vielleicht hilft Dir das Tool weiter.
Nein, das wird nicht helfen, da man die Parameter nicht ermitteln kann.
-
Lösung:
#include <windows.h> #include <stdio.h> #include <string.h> typedef short int __stdcall SmbRead(unsigned char first,unsigned char second); int main() { int i; int j; printf("Programm start\n"); HINSTANCE h = LoadLibrary("Asus.dll"); SmbRead* ReadSmbus=(SmbRead*)GetProcAddress(h,"SmbReadWord"); for (i=0; i<=255; i++) for (j=0; j<=255; j++) printf("%d , %d : %d\n", i, j,ReadSmbus(i, j)); printf("Programm end\n"); } //typedef short int __stdcall SmbWrite(unsigned char first,unsigned char second,unsigned short info); //int main() //{ //HINSTANCE h = LoadLibrary("Asus.dll"); //SmbWrite* WriteSmbus=(SmbWrite*)GetProcAddress(h,"SmbWriteWord"); //cout << WriteSmbus(0,0,0); //} //typedef short int __stdcall CPUTEMP(); //int main() //{ //HINSTANCE h = LoadLibrary("Asus.dll"); //CPUTEMP* CPUTemperatur=(CPUTEMP*)GetProcAddress(h,"GetCPUTemperature"); //cout << CPUTemperatur(); //}Leider ohne das Tool Peexplorer!
Lg
-
hm, schön, wenn Du es hinbekommen hast.

Luckie schrieb:
Nein, das wird nicht helfen, da man die Parameter nicht ermitteln kann.
Ich hab' mir mal die Trial runtergeladen und die user32.dll geöffnet, wenn ich mir da die Funktion MessageBoxA ansehe, dann erhalte ich folgende Infos:
function MessageBox(hWnd: HWND; lpText, lpCaption: PAnsiChar; uType: UINT): Integer; stdcall; external 'user32.dll' name 'MessageBoxA' index 452;Parameteranzahl, Parametertypen ...
Vielleicht klappt das nicht mit jeder dll, ka, aber damit hat's zumindest geklappt.
-
Ich nehme stark an, dass das Ding die Standardfunktionen aus user32.dll und so weiter sowieso kennt

Zumindest kann das Teil unmöglich wissen wie denn die Namen der übergebenen Variablen sind - Die packt der Compiler eigentl. gar nicht mit in die exe...
-
Hi
Gute Disessembler können die Argumente der Funktionen auslesen.
Lg
-
...aber nur den Datentyp, oder ?