funktion gethostbyname und Ergebnis auslesen



  • Hallo nochmal,

    auch wenns wenige interessiert 🙂

    habe die Nacht noch ein paar Versuche unternommen und meine IP erhalten.

    h_list zeigt auf eine 32bit Speicherstelle, den Wert von dort nach EBX kopieren.
    Anschließend 8 Byte addieren (warum auch immer!!!), nun hat man den Zeiger
    auf die 32bit Adresse mit der IP.
    Nun noch ins Big-Endian-Format und die IP passt.

    mov ebx, offset pc_info.h_list

    mov ebx, [ebx]
    add ebx, 8d
    mov eax, [ebx]
    bswap eax

    bis zum nächsten Problem..

    Nicky



  • Auf solche Tipps würde ich mich nicht verlassen.



  • 314159265358979 schrieb:

    Auf solche Tipps würde ich mich nicht verlassen.

    👍



  • Welche Tipps?



  • Wenn hier schon von Tipps die Rede ist:
    MASM's Default Radix ist 10 - den, zumindest für Außenstehenden, verwirrende 'd'-Suffix kannst du getrost weg lasen. Wenn überhaupt, benutzt man den Suffix 't' (=ten). Die Möglichkeit, die Basis zu ändern, wird, wenn überhaupt, von einigen Marcos gebraucht 😉



  • WinAPI mit Assembler? Ihr Masochisten ey was soll der Sinn davon sein.



  • tips schrieb:

    WinAPI mit Assembler? Ihr Masochisten ey was soll der Sinn davon sein.

    zumindest mit MASM ist der Mehraufwand gegenüber C/C++ gering ⚠ 😉



  • supernicky schrieb:

    Hallo nochmal,

    Anschließend 8 Byte addieren (warum auch immer!!!), nun hat man den Zeiger
    auf die 32bit Adresse mit der IP.

    weil ein Pointer zu einer HOSTENT struktur zurückgegeben wird und die sieht bekanntermassen so aus:

    struct hostent {
        char FAR *       h_name;
        char FAR * FAR * h_aliases;
        short            h_addrtype;
        short            h_length;
        char FAR * FAR * h_addr_list;
    };
    


  • 😑 schrieb:

    supernicky schrieb:

    Hallo nochmal,

    Anschließend 8 Byte addieren (warum auch immer!!!), nun hat man den Zeiger
    auf die 32bit Adresse mit der IP.

    weil ein Pointer zu einer HOSTENT struktur zurückgegeben wird und die sieht bekanntermassen so aus:

    struct hostent {
        char FAR *       h_name;
        char FAR * FAR * h_aliases;
        short            h_addrtype;
        short            h_length;
        char FAR * FAR * h_addr_list;
    };
    

    Hallo,

    und welchen Zusammenhang hat das nun mit den 8 Bytes addieren?
    Kannst du das etwas genauer erklären?

    Nicky



  • Hallo,

    In meiner Winsockanwendung habe ich für den Fall das die Verbindung abgebrochen
    werden soll, ein paar API Aufrufe eingesetzt zum Schließen der einzelnen Handles.

    Hier mal der Code

    invoke shutdown, sock, SD_BOTH
    invoke CloseHandle, thread.thread_empfangen_id
    invoke closesocket, sock
    invoke CloseHandle, sock
    invoke WSACleanup
    ret

    Nach dem die Funktionen abgearbeitet sind, schließt sich meine Anwendung ohne einen Fehler zu melden selbst.

    Die oben genannten Funktionen werden auch nur aufgerufen wenn ein Socket existiert, sonst nicht. Nach dem RET springt er wieder in die Nachrichtenschleife.

    Ist die Reihenfolge eventuell falsch?

    Danke und Gruß,

    Nicky


Anmelden zum Antworten