GetTickCount Adresse abrufen

  • Hallo Leute,
    Ich Frage ja letzte Zeit öfter was jetzt aber eine sache die schwer zu wissen ist. Ich will nen CodeCave fürn Multiclient schreiben und den in einen reservierten speicher schreiben und diesen auch abrufen. Nun in meiner funktion ist ein GetTickCount WinApi befehl. Da ich bei mir mit Bytes arbeite z.b byte[] ReadChatFunction = { 0xE8, 0x00, 0x00, 0x00, 0x00 }; //Call 00000000
    und nicht Inline ASM. muss ich die Adresse von GetTickCount abrufen und nicht wie in Inline ASM mit dem befehl dafür.


    Nun meine Frage, ich weiß das der API Befehl sich in der kernel32.dll befindet. Die Adresse zum Callen habe ich auch. Ändert sich meine Adresse bzw. die Kernel32.dll oder kann ich diese als Konstante nehmen, falls nicht wie komme ich auf diese Adresse das ich sie als Konstanten nutzen kann.
    Evt über dem dllimport im C# syntax. Ich bin gerade ein wenig ratlos.

  • Ich meine die kernel32.dll wird immer hat immer die gleiche Base-Address.
    Ich rate dir aber davon ab, deine GetTickCount-Adresse als konstant zu nehmen, weil es verschiedene Versionen und Systeme gibt und dann klappt das nicht mehr.


    Du kannst aber GetProcAddress(GetModuleHandle("kernel32.dll"), "GetTickCount") benutzen und weißt dann, an welche Stelle die DLL geladen wird.


    MfG

  • ja gut 32bit 64bit

    Das meine ich nicht.
    Deine Anwendung läuft sowieso in einer 32Bit Simulation. Deswegen gibt es auf deinem Level nichts, was du zwar auf 32Bit machen kannst, nicht aber auf 64Bit.


    Ich meinte eigentlich, dass ich meine kernel32.dll immer an 0x75C80000 habe. Du aber sicherlich anderswo. Und deine Funktion hat auch ein anderes Offset, wenn du eine andere Version der DLL hast, was durch alles mögliche (z.B. Windows Updates) verursacht werden kann.


    MfG

  • Was ist dein OS?
    Wie sieht dein exakter Aufruf und alles was dazu gehört aus?
    Was ist die exakte Fehlermeldung?


    MfG

  • Windows 7 Ultimate 32 bit


    fehlermeldung:
    "Es wurde versucht, im geschützten Speicher zu lesen oder zu schreiben. Dies ist häufig ein Hinweis darauf, dass anderer Speicher beschädigt ist."


    Code:
    string test = GetProcAddress(GetModuleHandle("kernel32.dll"), "GetTickCount");
    MessageBox.Show(test);