ich stehe vor dem Problem meine eigene/öffentliche IP-Adresse auszulesen.
Alle Beispiele dazu hab ich nur in C/C++ und anderen Sprachen gefunden.
Also hier ist die Beispiel :
Code: Alles auswählen
int __fastcall TForm1::GetIPs(TStrings* Strings)
{
WSAData wsa;
char HostName[255];
hostent* HostEntry = NULL;
in_addr InetAddress;
int RetVal = 0;
// Winsock initialisieren:
if(WSAStartup( MAKEWORD(2, 1), &wsa) == 0)
{
// eigene Hostnamen herausfinden:
if(gethostname(HostName, 255))
return 0;
// Hostinformationen abrufen:
HostEntry = gethostbyname(HostName);
if(HostEntry == NULL)
return 0;
// IP-Adressen auslesen
Strings->Add("IP-Adresse:");
for(int AddrIndex=0; HostEntry->h_addr_list[AddrIndex]; AddrIndex++)
{
InetAddress.S_un.S_addr = *((DWORD*)HostEntry->h_addr_list[AddrIndex]);
if(Strings != NULL)
Strings -> Add(inet_ntoa(InetAddress));
RetVal++;
}
}
else
return 0;
WSACleanup();
return RetVal;
}
Nun versuche ich das ganze in ASM zu schreiben
Code: Alles auswählen
.data
szHostName db 255 DUP (0)
HostEntry hostent <?>
.code
start:
......
viel viel Code
.....
; Alle IP-Addressen auslesen
invoke WSAStartup, 0002h, addr wsadata ; Winsock2 initialisieren
cmp eax, 0
jnz _exit
invoke gethostname, addr szHostName, FUNC(lstrlen, addr szHostName)
cmp eax, 0
jne _exit
invoke gethostbyname, addr szHostName
mov [HostEntry], eax ; <<<<<<<<<<<<<<<<<<<< Fehler
.....
END start
error A2022: instruction operands must be the same size
Ja es ist mir schon klar, das ich versuche in eine Variable von Typ hostent, Inhalt des EAX zu schreiben.
Nun funktioniert das irgendwie in C
Meine Frage wie mache/portiere ich diese Funktion in ASM-Code???
Danke