+1 323 268 0395 kmw@caltek.net

C al T ek N et

An organized list of ADL's resources

ecinetworks mailing list archives

Basic Computer 101 by "scott p [...]

by
Kenneth Wyrick
- 11/14/2018 03:19:41

Basic Computer 101 by "scott provost" <scottprovost@gmail.com>  
    .file   "serv.c"
        .comm   ROOT,8,8
        .comm   listenfd,4,4
        .comm   clients,4000,32
        .section        .rodata
.LC0:
        .string "PWD"
.LC1:
        .string "Wrong arguments given!!!\n"
.LC2:
        .string "p:r:"
.LC3:
        .string "\033[92m"
.LC4:
        .string "\033[0m"
        .align 8
.LC5:
        .string "Server started at port no. %s%s%s with root directory as
%s%s%s\n"
.LC6:
        .string "accept() error"
        .text
        .globl  main
        .type   main, @function
main:
.LFB2:
        .cfi_startproc
        pushq   %rbp
        .cfi_def_cfa_offset 16
        .cfi_offset 6, -16
        movq    %rsp, %rbp
        .cfi_def_cfa_register 6
        subq    $64, %rsp
        movl    %edi, -52(%rbp)
        movq    %rsi, -64(%rbp)
        leaq    .LC0(%rip), %rdi
        call    getenv@PLT
        movq    %rax, ROOT(%rip)
        movl    $808464433, -42(%rbp)
        movw    $48, -38(%rbp)
        movl    $0, -4(%rbp)
        jmp     .L2
.L7:
        movsbl  -9(%rbp), %eax
        cmpl    $112, %eax
        je      .L4
        cmpl    $114, %eax
        je      .L5
        cmpl    $63, %eax
        je      .L6
        jmp     .L15
.L5:
        movq    optarg(%rip), %rax
        movq    %rax, %rdi
        call    strlen@PLT
        movq    %rax, %rdi
        call    malloc@PLT
        movq    %rax, ROOT(%rip)
        movq    optarg(%rip), %rdx
        movq    ROOT(%rip), %rax
        movq    %rdx, %rsi
        movq    %rax, %rdi
        call    strcpy@PLT
        jmp     .L2
.L4:
        movq    optarg(%rip), %rdx
        leaq    -42(%rbp), %rax
        movq    %rdx, %rsi
        movq    %rax, %rdi
        call    strcpy@PLT
        jmp     .L2
.L6:
        movq    stderr(%rip), %rax
        movq    %rax, %rcx
        movl    $25, %edx
        movl    $1, %esi
        leaq    .LC1(%rip), %rdi
        call    fwrite@PLT
        movl    $1, %edi
        call    exit@PLT
.L15:
        movl    $1, %edi
        call    exit@PLT
.L2:
        movq    -64(%rbp), %rcx
        movl    -52(%rbp), %eax
        leaq    .LC2(%rip), %rdx
        movq    %rcx, %rsi
        movl    %eax, %edi
        call    getopt@PLT
        movb    %al, -9(%rbp)
        cmpb    $-1, -9(%rbp)
        jne     .L7
        movq    ROOT(%rip), %rcx
        leaq    -42(%rbp), %rax
        subq    $8, %rsp
        leaq    .LC4(%rip), %rdx
        pushq   %rdx
        movq    %rcx, %r9
        leaq    .LC3(%rip), %r8
        leaq    .LC4(%rip), %rcx
        movq    %rax, %rdx
        leaq    .LC3(%rip), %rsi
        leaq    .LC5(%rip), %rdi
        movl    $0, %eax
        call    printf@PLT
        addq    $16, %rsp
        movl    $0, -8(%rbp)
        jmp     .L8
.L9:
        movl    -8(%rbp), %eax
        cltq
        leaq    0(,%rax,4), %rdx
        leaq    clients(%rip), %rax
        movl    $-1, (%rdx,%rax)
        addl    $1, -8(%rbp)
.L8:
        cmpl    $999, -8(%rbp)
        jle     .L9
        leaq    -42(%rbp), %rax
        movq    %rax, %rdi
        call    startServer
.L14:
        movl    $16, -36(%rbp)
        movl    listenfd(%rip), %eax
        leaq    -36(%rbp), %rdx
        leaq    -32(%rbp), %rcx
        movq    %rcx, %rsi
        movl    %eax, %edi
        call    accept@PLT
        movl    %eax, %ecx
        movl    -4(%rbp), %eax
        cltq
        leaq    0(,%rax,4), %rdx
        leaq    clients(%rip), %rax
        movl    %ecx, (%rdx,%rax)
        movl    -4(%rbp), %eax
        cltq
        leaq    0(,%rax,4), %rdx
        leaq    clients(%rip), %rax
        movl    (%rdx,%rax), %eax
        testl   %eax, %eax
        jns     .L10
        leaq    .LC6(%rip), %rdi
        call    error@PLT
        jmp     .L12
.L10:
        call    fork@PLT
        testl   %eax, %eax
        jne     .L12
        movl    -4(%rbp), %eax
        movl    %eax, %edi
        call    respond
        movl    $0, %edi
        call    exit@PLT
.L13:
        movl    -4(%rbp), %eax
        leal    1(%rax), %ecx
        movl    $274877907, %edx
        movl    %ecx, %eax
        imull   %edx
        sarl    $6, %edx
        movl    %ecx, %eax
        sarl    $31, %eax
        subl    %eax, %edx
        movl    %edx, %eax
        movl    %eax, -4(%rbp)
        movl    -4(%rbp), %eax
        imull   $1000, %eax, %eax
        subl    %eax, %ecx
        movl    %ecx, %eax
        movl    %eax, -4(%rbp)
.L12:
        movl    -4(%rbp), %eax
        cltq
        leaq    0(,%rax,4), %rdx
        leaq    clients(%rip), %rax
        movl    (%rdx,%rax), %eax
        cmpl    $-1, %eax
        jne     .L13
        jmp     .L14
        .cfi_endproc
.LFE2:
        .size   main, .-main
        .section        .rodata
.LC7:
        .string "getaddrinfo() error"
.LC8:
        .string "socket() or bind()"
.LC9:
        .string "listen() error"
        .text
        .globl  startServer
        .type   startServer, @function
startServer:
.LFB3:
        .cfi_startproc
        pushq   %rbp
        .cfi_def_cfa_offset 16
        .cfi_offset 6, -16
        movq    %rsp, %rbp
        .cfi_def_cfa_register 6
        subq    $96, %rsp
        movq    %rdi, -88(%rbp)
        leaq    -64(%rbp), %rax
        movl    $48, %edx
        movl    $0, %esi
        movq    %rax, %rdi
        call    memset@PLT
        movl    $2, -60(%rbp)
        movl    $1, -56(%rbp)
        movl    $1, -64(%rbp)
        leaq    -72(%rbp), %rcx
        leaq    -64(%rbp), %rdx
        movq    -88(%rbp), %rax
        movq    %rax, %rsi
        movl    $0, %edi
        call    getaddrinfo@PLT
        testl   %eax, %eax
        je      .L17
        leaq    .LC7(%rip), %rdi
        call    perror@PLT
        movl    $1, %edi
        call    exit@PLT
.L17:
        movq    -72(%rbp), %rax
        movq    %rax, -8(%rbp)
        jmp     .L18
.L22:
        movq    -8(%rbp), %rax
        movl    8(%rax), %ecx
        movq    -8(%rbp), %rax
        movl    4(%rax), %eax
        movl    $0, %edx
        movl    %ecx, %esi
        movl    %eax, %edi
        call    socket@PLT
        movl    %eax, listenfd(%rip)
        movl    listenfd(%rip), %eax
        cmpl    $-1, %eax
        je      .L25
        movq    -8(%rbp), %rax
        movl    16(%rax), %edx
        movq    -8(%rbp), %rax
        movq    24(%rax), %rcx
        movl    listenfd(%rip), %eax
        movq    %rcx, %rsi
        movl    %eax, %edi
        call    bind@PLT
        testl   %eax, %eax
        je      .L26
        jmp     .L20
.L25:
        nop
.L20:
        movq    -8(%rbp), %rax
        movq    40(%rax), %rax
        movq    %rax, -8(%rbp)
.L18:
        cmpq    $0, -8(%rbp)
        jne     .L22
        jmp     .L21
.L26:
        nop
.L21:
        cmpq    $0, -8(%rbp)
        jne     .L23
        leaq    .LC8(%rip), %rdi
        call    perror@PLT
        movl    $1, %edi
        call    exit@PLT
.L23:
        movq    -72(%rbp), %rax
        movq    %rax, %rdi
        call    freeaddrinfo@PLT
        movl    listenfd(%rip), %eax
        movl    $1000000, %esi
        movl    %eax, %edi
        call    listen@PLT
        testl   %eax, %eax
        je      .L27
        leaq    .LC9(%rip), %rdi
        call    perror@PLT
        movl    $1, %edi
        call    exit@PLT
.L27:
        nop
        leave
        .cfi_def_cfa 7, 8
        ret
        .cfi_endproc
.LFE3:
        .size   startServer, .-startServer
        .section        .rodata
.LC10:
        .string "recv() error\n"
        .align 8
.LC11:
        .string "Client disconnected upexpectedly.\n"
.LC12:
        .string "%s"
.LC13:
        .string " \t\n"
.LC14:
        .string "GET"
        .string ""
.LC15:
        .string " \t"
.LC16:
        .string "HTTP/1.0"
.LC17:
        .string "HTTP/1.1"
.LC18:
        .string "HTTP/1.0 400 Bad Request\n"
.LC19:
        .string "/"
        .string ""
.LC20:
        .string "/index.html"
.LC21:
        .string "file: %s\n"
.LC22:
        .string "HTTP/1.0 200 OK\n\n"
.LC23:
        .string "HTTP/1.0 404 Not Found\n"
        .text
        .globl  respond
        .type   respond, @function
respond:
.LFB4:
        .cfi_startproc
        pushq   %rbp
        .cfi_def_cfa_offset 16
        .cfi_offset 6, -16
        movq    %rsp, %rbp
        .cfi_def_cfa_register 6
        pushq   %rbx
        subq    $201096, %rsp
        .cfi_offset 3, -24
        movl    %edi, -201092(%rbp)
        leaq    -100032(%rbp), %rax
        movl    $99999, %edx
        movl    $0, %esi
        movq    %rax, %rdi
        call    memset@PLT
        movl    -201092(%rbp), %eax
        cltq
        leaq    0(,%rax,4), %rdx
        leaq    clients(%rip), %rax
        movl    (%rdx,%rax), %eax
        leaq    -100032(%rbp), %rsi
        movl    $0, %ecx
        movl    $99999, %edx
        movl    %eax, %edi
        call    recv@PLT
        movl    %eax, -20(%rbp)
        cmpl    $0, -20(%rbp)
        jns     .L29
        movq    stderr(%rip), %rax
        movq    %rax, %rcx
        movl    $13, %edx
        movl    $1, %esi
        leaq    .LC10(%rip), %rdi
        call    fwrite@PLT
        jmp     .L30
.L29:
        cmpl    $0, -20(%rbp)
        jne     .L31
        movq    stderr(%rip), %rax
        movq    %rax, %rcx
        movl    $34, %edx
        movl    $1, %esi
        leaq    .LC11(%rip), %rdi
        call    fwrite@PLT
        jmp     .L30
.L31:
        leaq    -100032(%rbp), %rax
        movq    %rax, %rsi
        leaq    .LC12(%rip), %rdi
        movl    $0, %eax
        call    printf@PLT
        leaq    -100032(%rbp), %rax
        leaq    .LC13(%rip), %rsi
        movq    %rax, %rdi
        call    strtok@PLT
        movq    %rax, -100064(%rbp)
        movq    -100064(%rbp), %rax
        movl    $4, %edx
        leaq    .LC14(%rip), %rsi
        movq    %rax, %rdi
        call    strncmp@PLT
        testl   %eax, %eax
        jne     .L30
        leaq    .LC15(%rip), %rsi
        movl    $0, %edi
        call    strtok@PLT
        movq    %rax, -100056(%rbp)
        leaq    .LC13(%rip), %rsi
        movl    $0, %edi
        call    strtok@PLT
        movq    %rax, -100048(%rbp)
        movq    -100048(%rbp), %rax
        movl    $8, %edx
        leaq    .LC16(%rip), %rsi
        movq    %rax, %rdi
        call    strncmp@PLT
        testl   %eax, %eax
        je      .L32
        movq    -100048(%rbp), %rax
        movl    $8, %edx
        leaq    .LC17(%rip), %rsi
        movq    %rax, %rdi
        call    strncmp@PLT
        testl   %eax, %eax
        je      .L32
        movl    -201092(%rbp), %eax
        cltq
        leaq    0(,%rax,4), %rdx
        leaq    clients(%rip), %rax
        movl    (%rdx,%rax), %eax
        movl    $25, %edx
        leaq    .LC18(%rip), %rsi
        movl    %eax, %edi
        call    write@PLT
        jmp     .L30
.L32:
        movq    -100056(%rbp), %rax
        movl    $2, %edx
        leaq    .LC19(%rip), %rsi
        movq    %rax, %rdi
        call    strncmp@PLT
        testl   %eax, %eax
        jne     .L33
        leaq    .LC20(%rip), %rax
        movq    %rax, -100056(%rbp)
.L33:
        movq    ROOT(%rip), %rdx
        leaq    -201088(%rbp), %rax
        movq    %rdx, %rsi
        movq    %rax, %rdi
        call    strcpy@PLT
        movq    -100056(%rbp), %rbx
        movq    ROOT(%rip), %rax
        movq    %rax, %rdi
        call    strlen@PLT
        movq    %rax, %rdx
        leaq    -201088(%rbp), %rax
        addq    %rdx, %rax
        movq    %rbx, %rsi
        movq    %rax, %rdi
        call    strcpy@PLT
        leaq    -201088(%rbp), %rax
        movq    %rax, %rsi
        leaq    .LC21(%rip), %rdi
        movl    $0, %eax
        call    printf@PLT
        leaq    -201088(%rbp), %rax
        movl    $0, %esi
        movq    %rax, %rdi
        movl    $0, %eax
        call    open@PLT
        movl    %eax, -24(%rbp)
        cmpl    $-1, -24(%rbp)
        je      .L34
        movl    -201092(%rbp), %eax
        cltq
        leaq    0(,%rax,4), %rdx
        leaq    clients(%rip), %rax
        movl    (%rdx,%rax), %eax
        movl    $0, %ecx
        movl    $17, %edx
        leaq    .LC22(%rip), %rsi
        movl    %eax, %edi
        call    send@PLT
        jmp     .L35
.L36:
        movl    -28(%rbp), %eax
        movslq  %eax, %rdx
        movl    -201092(%rbp), %eax
        cltq
        leaq    0(,%rax,4), %rcx
        leaq    clients(%rip), %rax
        movl    (%rcx,%rax), %eax
        leaq    -101088(%rbp), %rcx
        movq    %rcx, %rsi
        movl    %eax, %edi
        call    write@PLT
.L35:
        leaq    -101088(%rbp), %rcx
        movl    -24(%rbp), %eax
        movl    $1024, %edx
        movq    %rcx, %rsi
        movl    %eax, %edi
        call    read@PLT
        movl    %eax, -28(%rbp)
        cmpl    $0, -28(%rbp)
        jg      .L36
        jmp     .L30
.L34:
        movl    -201092(%rbp), %eax
        cltq
        leaq    0(,%rax,4), %rdx
        leaq    clients(%rip), %rax
        movl    (%rdx,%rax), %eax
        movl    $23, %edx
        leaq    .LC23(%rip), %rsi
        movl    %eax, %edi
        call    write@PLT
.L30:
        movl    -201092(%rbp), %eax
        cltq
        leaq    0(,%rax,4), %rdx
        leaq    clients(%rip), %rax
        movl    (%rdx,%rax), %eax
        movl    $2, %esi
        movl    %eax, %edi
        call    shutdown@PLT
        movl    -201092(%rbp), %eax
        cltq
        leaq    0(,%rax,4), %rdx
        leaq    clients(%rip), %rax
        movl    (%rdx,%rax), %eax
        movl    %eax, %edi
        call    close@PLT
        movl    -201092(%rbp), %eax
        cltq
        leaq    0(,%rax,4), %rdx
        leaq    clients(%rip), %rax
        movl    $-1, (%rdx,%rax)
        nop
        addq    $201096, %rsp
        popq    %rbx
        popq    %rbp
        .cfi_def_cfa 7, 8
        ret
        .cfi_endproc
.LFE4:
        .size   respond, .-respond
        .ident  "GCC: (Debian 6.3.0-18+deb9u1) 6.3.0 20170516"
        .section        .note.GNU-stack,"",@progbits