einefache socket uns asm...



  • hallo,
    ich habe ein stück Code gefunden.

    .Section .text
        .Global _start
    
        _start:
    
                                                        #Sock = socket(2,1,0);
          xor %eax,%eax
          xor %ebx,%ebx
          xor %ecx,%ecx
    
          movb $0x66,%al        #Syscall ID (socketcall) em eax
          movb $0x1,%bl         #Function ID (socket) em ebx
    
          push  %ecx            #Montando      
          push $0x1             #Parametros
          push $0x2             #Da funcao socket
          movl %esp,%ecx        #em ecx
    
          int $0x80             #Chama Kernel
          mov %eax,%esi         #newSock retornado de socket() em esi
    
                                                        #           hostAddr
                                                        #bind(Sock,[2,8089,0], 16);
          xor %eax,%eax
          xor %ebx,%ebx
          xor %edx,%edx
    
          movb $0x66,%al        #Syscall ID (socketcall) em eax
          movb $0x2,%bl         #Function ID (bind) em ebx
    
          push %edx             #0x00
          pushw $0x1F99         #8089
          push  $0x2            #2
          movl %esp,%ecx        #Salvando  ^^
    
          push $0x10            #sizeof(hostAddr);
          push  %ecx            #(struct sockaddr *)&hostAdd
          push  %esi            #Sock
          movl %esp,%ecx        #Salvando em ecx
    
          int $0x80             #Chama Kernel
    
                                                        #listen(Sock,4);
          xor %eax,%eax
          xor %ebx,%ebx
    
          movb $0x66,%al  
          movb $0x4,%bl
    
          push $0x4
          push %esi
          movl %esp,%ecx
    
          int $0x80
    
                                                        #newSock = accept(sock,0,0);
          xor %eax,%eax
          xor %ebx,%ebx
          xor %edx,%edx
    
          movb $0x66,%al  
          movb $0x5,%bl
    
          push %edx
          push %edx
          push %esi
          movl %esp,%ecx
    
          int $0x80
    

    tomycat@linux-a4gd:~/test> sudo as -o code.o code.s
    tomycat@linux-a4gd:~/test> sudo ld -o code code.o
    tomycat@linux-a4gd:~/test> ./code
    // Programm wartet....

    Auf einer anderen Console habe ich folgendes eingetippt:
    sudo netstat -lp | grep 8089
    ...dann kommt keine Antwort.
    was mache ich falsch?
    Wie kann den Fehler eingrenzen?



  • tomycat2009 schrieb:

    Wie kann den Fehler eingrenzen?

    Man könnte mit strace prüfen, ob die Systemaufrufe wie gedacht aufgerufen werden und ob sie Fehler zurückgeben. Dazu das Programm mit strace starten:

    strace ./code
    

    strace hat noch nützliche Parameter, schau dazu die Hilfe an, strace --help o.ä.
    Ansonsten habe ich Assembler-Code nur überflogen und habe es mit Lesen sein lassen, weil Kommentare unverständlich, keine Leerzeichen, zu viele Leerzeilen - bin müde und alt, keine Lust sich anzustrengen.
    Was noch merkwürdig ist, das Programm wird als sudo gebaut...



  • ok,thx.

    tomycat@linux-a4gd:~/hack2> sudo strace ./nurs
    root's password:
    execve("./nurs", ["./nurs"], [/* 16 vars */]) = 0
    socket(PF_INET, SOCK_STREAM, IPPROTO_IP) = 3
    bind(3, {sa_family=AF_INET, sin_port=htons(0), sin_addr=inet_addr("153.31.0.0")}, 16) = -1 EADDRNOTAVAIL (Cannot assign requested address)
    listen(3, 4) = 0
    accept(3, <------ hier ist Ende Gelände

    AF_INET kenne ich, aber nicht PF.INET ?!
    sollte nicht bei htons(8098) drin sein?
    Meine IP ist 192.168.2.22 diese ist fest.



  • tomycat2009 schrieb:

    AF_INET kenne ich, aber nicht PF.INET ?!
    sollte nicht bei htons(8098) drin sein?

    Alle Parameter müssten doch im Quellcode zu finden sein. Ausserdem, wie man sieht, gibt es einen Fehler beim Systemaufruf bind , warum auch immer. Man sieht auch, dass es keine Fehlerbehandlung gibt - es macht keinen Sinn zu schauen, ob die Systemaufrufe danach ok sind. Die Fehlerbehandlung muss unbedingt rein, auch wenn der Code in Assembler geschrieben ist.
    Abgesehen davon ist so etwas hier:

    tomycat2009 schrieb:

    accept(3, <------ hier ist Ende Gelände

    suboptimal (sprich: Scheiße). "hier ist Ende Gelände" sagt mir nichts und es fehlt die Hälfte. Bitte vollständig "copypasten", sonst macht es keinen Sinn.



  • thx,
    die parameter habe ich schon gefunden, aber ich habe nur eine kleine Auswahl.
    ich nehme an bind ist hier das Problem.
    Er gibt mir ja auch -1 zurück.

    htons(8098) <--- das wunder mich auch, laut Quellcode sollte das auch so sein.

    accept(3,<---- danach kommt nicht mehr.

    ich check alles noch mal


Anmelden zum Antworten