Funktion aus dll



  • Hi

    Ich verwende die Asus.dll zum auslesen von Mainboarddaten. Die Dll enthält unteranderen folgende Funktionen:

    -SmbWriteByte
    -SmbWriteWord

    Ich 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
      		retn
    

    Lg



  • 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 ?


Anmelden zum Antworten