AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

[ASM] getaddrinfo hängt sich auf

Ein Thema von Desmulator · begonnen am 19. Apr 2014
Antwort Antwort
Benutzerbild von Desmulator
Desmulator

Registriert seit: 3. Mai 2007
Ort: Bonn
169 Beiträge
 
#1

[ASM] getaddrinfo hängt sich auf

  Alt 19. Apr 2014, 15:47
Schönen guten Tag,

ich arbeite seit einiger Zeit mir Assembler und versuche dabei via getaddrinfo eine Domain aufzulösen. Jedoch scheint sich getaddrinfo bei dem Aufruf aufzuhängen, das Programm beendet sich nie. Interessant wird es allerdings wenn ich das gleiche Programm in C schreibe. Betrachte ich den dortingen Assemblercode im Debugger, so ist dieser exakt der gleiche wie meiner. Dennoch hängt sich das Programm auf ..

Code:
[import getaddrinfo Ws2_32.dll]
[extern getaddrinfo]

[section .data use32 class=data]
  google db 'www.google.com', 0

[section .code use32 class=code]

main:
  push ebp
  mov ebp, esp
  call socket.initialise  ; calls successfully (debugger) WSAStartup

  push google
  call address.translate

  [...]

; address.translate(string) : address
  address.translate:
    push ebp
    mov ebp, esp
    sub esp, 0x04
  .prepareSystemCall:
    xor eax, eax
    mov dword [ebp-0x04], eax
  .callSystemLookup:
    lea edx, [ebp-0x04]
    push edx
    push 0
    push 0
    push dword [ebp+0x08]
    call [getaddrinfo]   ; never returns
  .return:
    leave
    ret 4
Hier noch der entsprechende Code des C programms:

Code:
004016DD 83EC 08              sub    esp, 8
004016E0 C745 DC 00000000     mov    [dword ss:ebp-24], 0
004016E7 8D45 DC             lea    eax, [dword ss:ebp-24]
004016EA 894424 0C           mov    [dword ss:esp+C], eax
004016EE C74424 08 00000000   mov    [dword ss:esp+8], 0
004016F6 C74424 04 00000000   mov    [dword ss:esp+4], 0
004016FE C70424 64504000      mov    [dword ss:esp], a.00405064  ; ASCII "www.google.de"
00401705 E8 12020000          call   <jmp.&ws2_32.getaddrinfo>
Ich bin mittlerweile echt am verzweifeln und habe keine Ahnung woran es liegt. Der Stack sieht bei beiden Aufruf exakt gleich aus, die variante in C funktioniert jedoch?

Interessant ist auch, dass es auf anderen Rechner teilweise funktioniert. Ich benutze Windows 7 x64, das Program ist in x86 geschrieben. Auf Windows XP x86 lief es einwand frei.
Lars
There are 10 kinds of people in the world:
those who get binary, and those who don’t.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:48 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz