LLM4Binary/decompile-bench-makefile huggingface dataset:
// File: /workspace/github_c_makefile_star2_O0/niuyuling[P]CProxy/httpdns.c
// Function: dns_init
void dns_init()
{
    httpRequest_init();
    dns_efd = epoll_create(DNS_MAX_CONCURRENT + 1);
    if (dns_efd < 0) {
        perror("epoll_create");
        exit(1);
    }
    fcntl(global.dns_listen_fd, F_SETFL, O_NONBLOCK);
    dns_ev.data.fd = global.dns_listen_fd;
    dns_ev.events = EPOLLIN;
    epoll_ctl(dns_efd, EPOLL_CTL_ADD, global.dns_listen_fd, &dns_ev);
    memset(dns_list, 0, sizeof(dns_list));
    //程序关闭时写入dns缓存
    if (cfp) {
        signal(SIGTERM, write_dns_cache);
        signal(SIGHUP, write_dns_cache);
        signal(SIGINT, write_dns_cache);
        signal(SIGABRT, write_dns_cache);
        signal(SIGILL, write_dns_cache);
        signal(SIGSEGV, write_dns_cache);
    }
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
callq 0x7c60
movl $0x201, %edi            # imm = 0x201
callq 0x24c0
movl %eax, 0x5d137(%rip)     # 0x64740
cmpl $0x0, 0x5d130(%rip)     # 0x64740
jge 0x7628
leaq 0x4c17(%rip), %rdi      # 0xc230
callq 0x2480
movl $0x1, %edi
callq 0x24e0
leaq 0x14da1(%rip), %rax     # 0x1c3d0
movl 0x4(%rax), %edi
movl $0x4, %esi
movl $0x800, %edx            # imm = 0x800
movb $0x0, %al
callq 0x20c0
leaq 0x14d86(%rip), %rax     # 0x1c3d0
movl 0x4(%rax), %eax
movl %eax, 0x5d0f5(%rip)     # 0x64748
movl $0x1, 0x5d0e7(%rip)     # 0x64744
movl 0x5d0dd(%rip), %edi     # 0x64740
leaq 0x14d66(%rip), %rax     # 0x1c3d0
movl 0x4(%rax), %edx
movl $0x1, %esi
leaq 0x5d0cb(%rip), %rcx     # 0x64744
callq 0x2240
leaq 0x150bb(%rip), %rdi     # 0x1c740
xorl %esi, %esi
movl $0x48000, %edx          # imm = 0x48000
callq 0x21c0
cmpq $0x0, 0x15027(%rip)     # 0x1c6c0
je 0x7701
movl $0xf, %edi
leaq 0x69(%rip), %rsi        # 0x7710
callq 0x22c0
movl $0x1, %edi
leaq 0x58(%rip), %rsi        # 0x7710
callq 0x22c0
movl $0x2, %edi
leaq 0x47(%rip), %rsi        # 0x7710
callq 0x22c0
movl $0x6, %edi
leaq 0x36(%rip), %rsi        # 0x7710
callq 0x22c0
movl $0x4, %edi
leaq 0x25(%rip), %rsi        # 0x7710
callq 0x22c0
movl $0xb, %edi
leaq 0x14(%rip), %rsi        # 0x7710
callq 0x22c0
popq %rbp
retq
nopw %cs:(%rax,%rax)
// File: /workspace/github_c_makefile_star2_O0/niuyuling[P]CProxy/httpdns.c
// Function: write_dns_cache
static void write_dns_cache(int sig)
{
    //子进程先写入缓存
    if (child_pid) {
        wait(NULL);
        cfp = fopen(httpdns.cachePath, "a");
    } else {
        cfp = fopen(httpdns.cachePath, "w");
    }
    while (cache) {
        fwrite(cache->dns_cache, *(uint16_t *) cache->dns_cache + *(uint16_t *) (cache->dns_cache + *(uint16_t *) cache->dns_cache + 2) + 4, 1, cfp);
        cache = cache->next;
    }

    exit(0);
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x10, %rsp
movl %edi, -0x4(%rbp)
cmpl $0x0, 0x14fa6(%rip)     # 0x1c6c8
je 0x7749
xorl %eax, %eax
movl %eax, %edi
callq 0x2540
movq 0x14fcc(%rip), %rdi     # 0x1c700
leaq 0x4ec8(%rip), %rsi      # 0xc603
callq 0x2470
movq %rax, 0x14f79(%rip)     # 0x1c6c0
jmp 0x7763
movq 0x14fb0(%rip), %rdi     # 0x1c700
leaq 0x4acd(%rip), %rsi      # 0xc224
callq 0x2470
movq %rax, 0x14f5d(%rip)     # 0x1c6c0
jmp 0x7765
cmpq $0x0, 0x14fcb(%rip)     # 0x1c738
je 0x77d2
movq 0x14fc2(%rip), %rax     # 0x1c738
movq (%rax), %rdi
movq 0x14fb8(%rip), %rax     # 0x1c738
movq (%rax), %rax
movzwl (%rax), %eax
movq 0x14fab(%rip), %rcx     # 0x1c738
movq (%rcx), %rcx
movq 0x14fa1(%rip), %rdx     # 0x1c738
movq (%rdx), %rdx
movzwl (%rdx), %edx
movslq %edx, %rdx
movzwl 0x2(%rcx,%rdx), %ecx
addl %ecx, %eax
addl $0x4, %eax
movslq %eax, %rsi
movq 0x14f0c(%rip), %rcx     # 0x1c6c0
movl $0x1, %edx
callq 0x2500
movq 0x14f73(%rip), %rax     # 0x1c738
movq 0x8(%rax), %rax
movq %rax, 0x14f68(%rip)     # 0x1c738
jmp 0x7765
xorl %edi, %edi
callq 0x24e0
nopl (%rax)
// File: /workspace/github_c_makefile_star2_O0/niuyuling[P]CProxy/httpdns.c
// Function: dns_loop
void *dns_loop(void *nullPtr)
{
    int n;

    while (1) {
        n = epoll_wait(dns_efd, dns_evs, DNS_MAX_CONCURRENT + 1, -1);

        while (n-- > 0) {
            if (dns_evs[n].data.fd == global.dns_listen_fd) {
                new_client();
            } else {
                if (dns_evs[n].events & EPOLLIN) {
                    http_in((dns_t *) dns_evs[n].data.ptr);
                }
                if (dns_evs[n].events & EPOLLOUT) {
                    http_out((dns_t *) dns_evs[n].data.ptr);
                }
            }
        }
    }

    return NULL;                //消除编译警告
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x10, %rsp
movq %rdi, -0x8(%rbp)
movl 0x5cf4e(%rip), %edi     # 0x64740
leaq 0x5cf57(%rip), %rsi     # 0x64750
movl $0x201, %edx            # imm = 0x201
movl $0xffffffff, %ecx       # imm = 0xFFFFFFFF
callq 0x2410
movl %eax, -0xc(%rbp)
movl -0xc(%rbp), %eax
movl %eax, %ecx
addl $-0x1, %ecx
movl %ecx, -0xc(%rbp)
cmpl $0x0, %eax
jle 0x78bc
movslq -0xc(%rbp), %rcx
leaq 0x5cf26(%rip), %rax     # 0x64750
imulq $0xc, %rcx, %rcx
addq %rcx, %rax
movl 0x4(%rax), %eax
leaq 0x14b95(%rip), %rcx     # 0x1c3d0
cmpl 0x4(%rcx), %eax
jne 0x7847
callq 0x7fa0
jmp 0x78b7
movslq -0xc(%rbp), %rcx
leaq 0x5cefe(%rip), %rax     # 0x64750
imulq $0xc, %rcx, %rcx
addq %rcx, %rax
movl (%rax), %eax
andl $0x1, %eax
cmpl $0x0, %eax
je 0x787e
movslq -0xc(%rbp), %rcx
leaq 0x5cee2(%rip), %rax     # 0x64750
imulq $0xc, %rcx, %rcx
addq %rcx, %rax
movq 0x4(%rax), %rdi
callq 0x78d0
movslq -0xc(%rbp), %rcx
leaq 0x5cec7(%rip), %rax     # 0x64750
imulq $0xc, %rcx, %rcx
addq %rcx, %rax
movl (%rax), %eax
andl $0x4, %eax
cmpl $0x0, %eax
je 0x78b5
movslq -0xc(%rbp), %rcx
leaq 0x5ceab(%rip), %rax     # 0x64750
imulq $0xc, %rcx, %rcx
addq %rcx, %rax
movq 0x4(%rax), %rdi
callq 0x7a60
jmp 0x78b7
jmp 0x780b
jmp 0x77ec
nopw %cs:(%rax,%rax)
// File: /workspace/github_c_makefile_star2_O0/niuyuling[P]CProxy/httpdns.c
// Function: new_client
static void new_client()
{
    dns_t *dns;
    socklen_t addr_len = sizeof(struct sockaddr_in);
    int i, len;

    for (i = 0; i < DNS_MAX_CONCURRENT; i++) {
        if (dns_list[i].query_type == 0) {
            dns = &dns_list[i];
            break;
        }
    }
    if (i == DNS_MAX_CONCURRENT)
        return;
    len = recvfrom(global.dns_listen_fd, dns->dns_req, DNS_REQUEST_MAX_SIZE - 2, 0, (struct sockaddr *)&dns->src_addr, &addr_len);
    //dns请求必须大于18
    if (len <= 18)
        return;
    dns->dns_req_len = (uint16_t) len;
    /* 查询缓存 */
    if (cfp && cache_lookup(dns) == 0)
        return;
    if (create_outRequest(dns) != 0 || connectToDnsServer(dns) != 0) {
        if (dns->out_request != dns->dns_req)
            free(dns->out_request);
        httpDNS_respond_client(dns, NULL);
    }
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x20, %rsp
movl $0x10, -0xc(%rbp)
movl $0x0, -0x10(%rbp)
cmpl $0x200, -0x10(%rbp)     # imm = 0x200
jge 0x8008
movslq -0x10(%rbp), %rcx
leaq 0x14776(%rip), %rax     # 0x1c740
imulq $0x240, %rcx, %rcx      # imm = 0x240
addq %rcx, %rax
movsbl 0x23a(%rax), %eax
cmpl $0x0, %eax
jne 0x7ffb
movslq -0x10(%rbp), %rcx
leaq 0x14755(%rip), %rax     # 0x1c740
imulq $0x240, %rcx, %rcx      # imm = 0x240
addq %rcx, %rax
movq %rax, -0x8(%rbp)
jmp 0x8008
jmp 0x7ffd
movl -0x10(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x10(%rbp)
jmp 0x7fb6
cmpl $0x200, -0x10(%rbp)     # imm = 0x200
jne 0x8016
jmp 0x80c8
leaq 0x143b3(%rip), %rax     # 0x1c3d0
movl 0x4(%rax), %edi
movq -0x8(%rbp), %rsi
movq -0x8(%rbp), %r8
addq $0x204, %r8             # imm = 0x204
movl $0x200, %edx            # imm = 0x200
xorl %ecx, %ecx
leaq -0xc(%rbp), %r9
callq 0x2390
movl %eax, -0x14(%rbp)
cmpl $0x12, -0x14(%rbp)
jg 0x804a
jmp 0x80c8
movl -0x14(%rbp), %eax
movw %ax, %cx
movq -0x8(%rbp), %rax
movw %cx, 0x238(%rax)
cmpq $0x0, 0x1465d(%rip)     # 0x1c6c0
je 0x8078
movq -0x8(%rbp), %rdi
callq 0x80d0
movzbl %al, %eax
cmpl $0x0, %eax
jne 0x8078
jmp 0x80c8
movq -0x8(%rbp), %rdi
callq 0x81d0
movsbl %al, %eax
cmpl $0x0, %eax
jne 0x8097
movq -0x8(%rbp), %rdi
callq 0x83b0
cmpl $0x0, %eax
je 0x80c8
movq -0x8(%rbp), %rax
movq 0x218(%rax), %rax
movq -0x8(%rbp), %rcx
cmpq %rcx, %rax
je 0x80bb
movq -0x8(%rbp), %rax
movq 0x218(%rax), %rdi
callq 0x2030
movq -0x8(%rbp), %rdi
xorl %eax, %eax
movl %eax, %esi
callq 0x84e0
addq $0x20, %rsp
popq %rbp
retq
nop
// File: /workspace/github_c_makefile_star2_O0/niuyuling[P]CProxy/httpdns.c
// Function: cache_lookup
static uint8_t cache_lookup(dns_t * dns)
{
    struct dns_cache *c;
    char *rsp;

    for (c = cache; c; c = c->next) {
        //不匹配dnsID
        if (dns->dns_req_len - 2 == *(uint16_t *) c->dns_cache && memcmp(dns->dns_req + 2, c->dns_cache + 2, dns->dns_req_len - 2) == 0) {
            rsp = c->dns_cache + *(uint16_t *) c->dns_cache + 2;
            *(uint16_t *) (rsp + 2) = *(uint16_t *) dns->dns_req; //设置dns id
            sendto(global.dns_listen_fd, rsp + 2, *(uint16_t *) rsp, 0, (struct sockaddr *)&dns->src_addr, sizeof(struct sockaddr_in));
            return 0;
        }
    }

    return 1;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x20, %rsp
movq %rdi, -0x10(%rbp)
movq 0x14655(%rip), %rax     # 0x1c738
movq %rax, -0x18(%rbp)
cmpq $0x0, -0x18(%rbp)
je 0x81ba
movq -0x10(%rbp), %rax
movzwl 0x238(%rax), %eax
subl $0x2, %eax
movq -0x18(%rbp), %rcx
movq (%rcx), %rcx
movzwl (%rcx), %ecx
cmpl %ecx, %eax
jne 0x81a7
movq -0x10(%rbp), %rdi
addq $0x2, %rdi
movq -0x18(%rbp), %rax
movq (%rax), %rsi
addq $0x2, %rsi
movq -0x10(%rbp), %rax
movzwl 0x238(%rax), %eax
subl $0x2, %eax
movslq %eax, %rdx
callq 0x2280
cmpl $0x0, %eax
jne 0x81a7
movq -0x18(%rbp), %rax
movq (%rax), %rax
movq -0x18(%rbp), %rcx
movq (%rcx), %rcx
movzwl (%rcx), %ecx
movslq %ecx, %rcx
addq %rcx, %rax
addq $0x2, %rax
movq %rax, -0x20(%rbp)
movq -0x10(%rbp), %rax
movw (%rax), %cx
movq -0x20(%rbp), %rax
movw %cx, 0x2(%rax)
leaq 0x1425b(%rip), %rax     # 0x1c3d0
movl 0x4(%rax), %edi
movq -0x20(%rbp), %rsi
addq $0x2, %rsi
movq -0x20(%rbp), %rax
movzwl (%rax), %eax
movl %eax, %edx
movq -0x10(%rbp), %r8
addq $0x204, %r8             # imm = 0x204
xorl %ecx, %ecx
movl $0x10, %r9d
callq 0x21e0
movb $0x0, -0x1(%rbp)
jmp 0x81be
jmp 0x81a9
movq -0x18(%rbp), %rax
movq 0x8(%rax), %rax
movq %rax, -0x18(%rbp)
jmp 0x80e7
movb $0x1, -0x1(%rbp)
movb -0x1(%rbp), %al
addq $0x20, %rsp
popq %rbp
retq
nopw (%rax,%rax)
// File: /workspace/github_c_makefile_star2_O0/niuyuling[P]CProxy/httpdns.c
// Function: connectToDnsServer
static int connectToDnsServer(dns_t * dns)
{
    dns->fd = socket(AF_INET, SOCK_STREAM, 0);
    if (dns->fd < 0)
        return 1;
    dns->timer = 0;             //超时计时器设为0
    fcntl(dns->fd, F_SETFL, O_NONBLOCK);
    dns_ev.events = EPOLLERR | EPOLLOUT | EPOLLET;
    dns_ev.data.ptr = dns;
    if (epoll_ctl(dns_efd, EPOLL_CTL_ADD, dns->fd, &dns_ev) != 0) {
        close(dns->fd);
        return 1;
    }
    if (connect(dns->fd, (struct sockaddr *)&httpdns.dst, sizeof(httpdns.dst)) != 0 && errno != EINPROGRESS) {
        epoll_ctl(dns_efd, EPOLL_CTL_DEL, dns->fd, NULL);
        close(dns->fd);
        return 1;
    }

    return 0;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x10, %rsp
movq %rdi, -0x10(%rbp)
movl $0x2, %edi
movl $0x1, %esi
xorl %edx, %edx
callq 0x2580
movl %eax, %ecx
movq -0x10(%rbp), %rax
movl %ecx, 0x22c(%rax)
movq -0x10(%rbp), %rax
cmpl $0x0, 0x22c(%rax)
jge 0x83f2
movl $0x1, -0x4(%rbp)
jmp 0x84d5
movq -0x10(%rbp), %rax
movl $0x0, 0x230(%rax)
movq -0x10(%rbp), %rax
movl 0x22c(%rax), %edi
movl $0x4, %esi
movl $0x800, %edx            # imm = 0x800
movb $0x0, %al
callq 0x20c0
movl $0x8000000c, 0x5c31f(%rip) # imm = 0x8000000C
movq -0x10(%rbp), %rax
movq %rax, 0x5c318(%rip)     # 0x64748
movl 0x5c30a(%rip), %edi     # 0x64740
movq -0x10(%rbp), %rax
movl 0x22c(%rax), %edx
movl $0x1, %esi
leaq 0x5c2f8(%rip), %rcx     # 0x64744
callq 0x2240
cmpl $0x0, %eax
je 0x846e
movq -0x10(%rbp), %rax
movl 0x22c(%rax), %edi
callq 0x2200
movl $0x1, -0x4(%rbp)
jmp 0x84d5
movq -0x10(%rbp), %rax
movl 0x22c(%rax), %edi
leaq 0x14251(%rip), %rsi     # 0x1c6d0
movl $0x10, %edx
callq 0x24f0
cmpl $0x0, %eax
je 0x84ce
callq 0x2050
cmpl $0x73, (%rax)
je 0x84ce
movl 0x5c2a2(%rip), %edi     # 0x64740
movq -0x10(%rbp), %rax
movl 0x22c(%rax), %edx
movl $0x2, %esi
xorl %eax, %eax
movl %eax, %ecx
callq 0x2240
movq -0x10(%rbp), %rax
movl 0x22c(%rax), %edi
callq 0x2200
movl $0x1, -0x4(%rbp)
jmp 0x84d5
movl $0x0, -0x4(%rbp)
movl -0x4(%rbp), %eax
addq $0x10, %rsp
popq %rbp
retq
nop
// File: /workspace/github_c_makefile_star2_O0/niuyuling[P]CProxy/httpdns.c
// Function: parse_dns_request
static int8_t parse_dns_request(char *dns_req, dns_t * dns)
{
    int len;

    dns_req += 13;              //跳到域名部分
    dns->host_len = strlen(dns_req);
    dns->query_type = *(dns_req + 2 + dns->host_len);
    //tcpdns不需要解析域名
    if (httpdns.tcpDNS_mode == 1)
        return 0;
    //httpdns只支持域名查询ipv4
    if (dns->query_type != 1 || (dns->host = strdup(dns_req)) == NULL)
        return 1;
    for (len = *(--dns_req); dns_req[len + 1] != 0; len += dns_req[len]) {
        //防止数组越界
        if (len > dns->host_len) {
            free(dns->host);
            return 1;
        }
        dns->host[len++] = '.';
    }

    return 0;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x20, %rsp
movq %rdi, -0x10(%rbp)
movq %rsi, -0x18(%rbp)
movq -0x10(%rbp), %rax
addq $0xd, %rax
movq %rax, -0x10(%rbp)
movq -0x10(%rbp), %rdi
callq 0x2130
movl %eax, %ecx
movq -0x18(%rbp), %rax
movb %cl, %dl
movb 0x23b(%rax), %cl
andb $0x7f, %dl
andb $-0x80, %cl
orb %dl, %cl
movb %cl, 0x23b(%rax)
movq -0x10(%rbp), %rax
movq -0x18(%rbp), %rcx
movb 0x23b(%rcx), %cl
andb $0x7f, %cl
movzbl %cl, %ecx
movslq %ecx, %rcx
movb 0x2(%rax,%rcx), %cl
movq -0x18(%rbp), %rax
movb %cl, 0x23a(%rax)
movb 0x13fc4(%rip), %al      # 0x1c730
andb $0x1, %al
movzbl %al, %eax
cmpl $0x1, %eax
jne 0x877f
movb $0x0, -0x1(%rbp)
jmp 0x8840
movq -0x18(%rbp), %rax
movsbl 0x23a(%rax), %eax
cmpl $0x1, %eax
jne 0x87a9
movq -0x10(%rbp), %rdi
callq 0x2520
movq -0x18(%rbp), %rcx
movq %rax, 0x220(%rcx)
cmpq $0x0, %rax
jne 0x87b2
movb $0x1, -0x1(%rbp)
jmp 0x8840
movq -0x10(%rbp), %rax
movq %rax, %rcx
addq $-0x1, %rcx
movq %rcx, -0x10(%rbp)
movsbl -0x1(%rax), %eax
movl %eax, -0x1c(%rbp)
movq -0x10(%rbp), %rax
movl -0x1c(%rbp), %ecx
addl $0x1, %ecx
movslq %ecx, %rcx
movsbl (%rax,%rcx), %eax
cmpl $0x0, %eax
je 0x883c
movl -0x1c(%rbp), %eax
movq -0x18(%rbp), %rcx
movb 0x23b(%rcx), %cl
andb $0x7f, %cl
movzbl %cl, %ecx
cmpl %ecx, %eax
jle 0x880b
movq -0x18(%rbp), %rax
movq 0x220(%rax), %rdi
callq 0x2030
movb $0x1, -0x1(%rbp)
jmp 0x8840
movq -0x18(%rbp), %rax
movq 0x220(%rax), %rax
movl -0x1c(%rbp), %ecx
movl %ecx, %edx
addl $0x1, %edx
movl %edx, -0x1c(%rbp)
movslq %ecx, %rcx
movb $0x2e, (%rax,%rcx)
movq -0x10(%rbp), %rax
movslq -0x1c(%rbp), %rcx
movsbl (%rax,%rcx), %eax
addl -0x1c(%rbp), %eax
movl %eax, -0x1c(%rbp)
jmp 0x87c8
movb $0x0, -0x1(%rbp)
movb -0x1(%rbp), %al
addq $0x20, %rsp
popq %rbp
retq
nopl (%rax)
// File: /workspace/github_c_makefile_star2_O0/niuyuling[P]CProxy/httpdns.c
// Function: handle_tcpDNS_rsp
static void handle_tcpDNS_rsp(dns_t * dns, char *rsp, int rsp_len)
{
    /* 转换为UDPdns请求(为什么不做长度判断？因为懒) */
    rsp += 2;
    rsp_len -= 2;
    //回应客户端
    sendto(global.dns_listen_fd, rsp, rsp_len, 0, (struct sockaddr *)&dns->src_addr, sizeof(struct sockaddr_in));
    if (cfp && (unsigned char)rsp[3] == 128) {
        //如果使用编码，则需要还原dns请求
        if (httpdns.httpsProxy_encodeCode)
            dataEncode(dns->dns_req + 2 /* 换成TCPDNS请求时原本请求后移动了2字节 */ , dns->dns_req_len, httpdns.httpsProxy_encodeCode);
        cache_record(dns->dns_req + 2, dns->dns_req_len, rsp, (uint16_t) rsp_len);
    }
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x20, %rsp
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movl %edx, -0x14(%rbp)
movq -0x10(%rbp), %rax
addq $0x2, %rax
movq %rax, -0x10(%rbp)
movl -0x14(%rbp), %eax
subl $0x2, %eax
movl %eax, -0x14(%rbp)
leaq 0x139a1(%rip), %rax     # 0x1c3d0
movl 0x4(%rax), %edi
movq -0x10(%rbp), %rsi
movslq -0x14(%rbp), %rdx
movq -0x8(%rbp), %r8
addq $0x204, %r8             # imm = 0x204
xorl %ecx, %ecx
movl $0x10, %r9d
callq 0x21e0
cmpq $0x0, 0x13c66(%rip)     # 0x1c6c0
je 0x8ab7
movq -0x10(%rbp), %rax
movzbl 0x3(%rax), %eax
cmpl $0x80, %eax
jne 0x8ab7
cmpl $0x0, 0x13cba(%rip)     # 0x1c72c
je 0x8a92
movq -0x8(%rbp), %rdi
addq $0x2, %rdi
movq -0x8(%rbp), %rax
movzwl 0x238(%rax), %esi
movl 0x13c9f(%rip), %edx     # 0x1c72c
callq 0x3e20
movq -0x8(%rbp), %rdi
addq $0x2, %rdi
movq -0x8(%rbp), %rax
movw 0x238(%rax), %cx
movq -0x10(%rbp), %rdx
movl -0x14(%rbp), %eax
movzwl %cx, %esi
movzwl %ax, %ecx
callq 0x8850
addq $0x20, %rsp
popq %rbp
retq
nopl (%rax)
// File: /workspace/github_c_makefile_star2_O0/niuyuling[P]CProxy/httpudp.c
// Function: udp_timeout_check
void udp_timeout_check()
{
    int i;

    for (i = 0; i < MAX_CLIENT_INFO; i++) {
        if (client_info_list[i].server_fd > -1) {
            if (client_info_list[i].timer >= global.timeout_m)
                proxyStop(client_info_list + i);
            else
                client_info_list[i].timer = 0;
        }
    }
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x10, %rsp
movl $0x0, -0x4(%rbp)
cmpl $0x200, -0x4(%rbp)      # imm = 0x200
jge 0x8d2e
movslq -0x4(%rbp), %rcx
leaq 0x5dce9(%rip), %rax     # 0x66990
imulq $0x10068, %rcx, %rcx    # imm = 0x10068
addq %rcx, %rax
cmpl $-0x1, 0x1005c(%rax)
jle 0x8d1e
movslq -0x4(%rbp), %rcx
leaq 0x5dccb(%rip), %rax     # 0x66990
imulq $0x10068, %rcx, %rcx    # imm = 0x10068
addq %rcx, %rax
movl 0x10064(%rax), %eax
leaq 0x136f4(%rip), %rcx     # 0x1c3d0
cmpl 0x14(%rcx), %eax
jl 0x8cfd
movslq -0x4(%rbp), %rax
leaq 0x5dca4(%rip), %rdi     # 0x66990
imulq $0x10068, %rax, %rax    # imm = 0x10068
addq %rax, %rdi
callq 0x8d40
jmp 0x8d1c
movslq -0x4(%rbp), %rcx
leaq 0x5dc88(%rip), %rax     # 0x66990
imulq $0x10068, %rcx, %rcx    # imm = 0x10068
addq %rcx, %rax
movl $0x0, 0x10064(%rax)
jmp 0x8d1e
jmp 0x8d20
movl -0x4(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x4(%rbp)
jmp 0x8c8f
addq $0x10, %rsp
popq %rbp
retq
nopw %cs:(%rax,%rax)
// File: /workspace/github_c_makefile_star2_O0/niuyuling[P]CProxy/httpudp.c
// Function: proxyStop
static void proxyStop(info_t * info)
{
    epoll_ctl(udp_efd, EPOLL_CTL_DEL, info->server_fd, NULL);
    epoll_ctl(udp_efd, EPOLL_CTL_DEL, info->responseClientFd, NULL);
    close(info->server_fd);
    close(info->responseClientFd);
    free(info->rsp_data);
    info->rsp_data = NULL;
    do {
        info->server_fd = info->responseClientFd = -1;
        info->rsp_data_len = info->rsp_data_sent_len = info->client_data_sent_len = info->http_request_sent_len = 0;
    } while ((info = info->next) != NULL);
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x10, %rsp
movq %rdi, -0x8(%rbp)
movl 0x206ac3e(%rip), %edi   # 0x2073990
movq -0x8(%rbp), %rax
movl 0x1005c(%rax), %edx
movl $0x2, %esi
xorl %eax, %eax
movl %eax, %ecx
callq 0x2240
movl 0x206ac20(%rip), %edi   # 0x2073990
movq -0x8(%rbp), %rax
movl 0x10060(%rax), %edx
movl $0x2, %esi
xorl %eax, %eax
movl %eax, %ecx
callq 0x2240
movq -0x8(%rbp), %rax
movl 0x1005c(%rax), %edi
callq 0x2200
movq -0x8(%rbp), %rax
movl 0x10060(%rax), %edi
callq 0x2200
movq -0x8(%rbp), %rax
movq 0x10040(%rax), %rdi
callq 0x2030
movq -0x8(%rbp), %rax
movq $0x0, 0x10040(%rax)
movq -0x8(%rbp), %rax
movl $0xffffffff, 0x10060(%rax) # imm = 0xFFFFFFFF
movq -0x8(%rbp), %rax
movl $0xffffffff, 0x1005c(%rax) # imm = 0xFFFFFFFF
movq -0x8(%rbp), %rax
movl $0x0, 0x10050(%rax)
movq -0x8(%rbp), %rax
movl $0x0, 0x1004c(%rax)
movq -0x8(%rbp), %rax
movl $0x0, 0x10058(%rax)
movq -0x8(%rbp), %rax
movl $0x0, 0x10054(%rax)
movq -0x8(%rbp), %rax
movq 0x10038(%rax), %rax
movq %rax, -0x8(%rbp)
cmpq $0x0, %rax
jne 0x8dc5
addq $0x10, %rsp
popq %rbp
retq
nopw %cs:(%rax,%rax)
// File: /workspace/github_c_makefile_star2_O0/niuyuling[P]CProxy/httpudp.c
// Function: udp_init
void udp_init()
{
    int i;

    //初始化http请求
    http_udp_req_init();
    //初始化结构体
    memset(client_info_list, 0, sizeof(info_t) * MAX_CLIENT_INFO);
    for (i = 0; i < MAX_CLIENT_INFO; i++)
        client_info_list[i].server_fd = client_info_list[i].responseClientFd = -1;
    //创建epoll fd
    udp_efd = epoll_create(MAX_CLIENT_INFO * 2 + 1);
    if (udp_efd < 0) {
        perror("udp epoll_create()");
        exit(1);
    }
    //添加监听socket到epoll
    fcntl(global.udp_listen_fd, F_SETFL, O_NONBLOCK);
    udp_ev.data.fd = global.udp_listen_fd;
    udp_ev.events = EPOLLIN;
    epoll_ctl(udp_efd, EPOLL_CTL_ADD, global.udp_listen_fd, &udp_ev);
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x10, %rsp
callq 0x92c0
leaq 0x5db3c(%rip), %rdi     # 0x66990
xorl %esi, %esi
movl $0x200d000, %edx        # imm = 0x200D000
callq 0x21c0
movl $0x0, -0x4(%rbp)
cmpl $0x200, -0x4(%rbp)      # imm = 0x200
jge 0x8eb9
movslq -0x4(%rbp), %rcx
leaq 0x5db15(%rip), %rax     # 0x66990
imulq $0x10068, %rcx, %rcx    # imm = 0x10068
addq %rcx, %rax
movl $0xffffffff, 0x10060(%rax) # imm = 0xFFFFFFFF
movslq -0x4(%rbp), %rcx
leaq 0x5daf6(%rip), %rax     # 0x66990
imulq $0x10068, %rcx, %rcx    # imm = 0x10068
addq %rcx, %rax
movl $0xffffffff, 0x1005c(%rax) # imm = 0xFFFFFFFF
movl -0x4(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x4(%rbp)
jmp 0x8e67
movl $0x401, %edi            # imm = 0x401
callq 0x24c0
movl %eax, 0x206aac7(%rip)   # 0x2073990
cmpl $0x0, 0x206aac0(%rip)   # 0x2073990
jge 0x8ee8
leaq 0x35ec(%rip), %rdi      # 0xc4c5
callq 0x2480
movl $0x1, %edi
callq 0x24e0
leaq 0x134e1(%rip), %rax     # 0x1c3d0
movl 0x8(%rax), %edi
movl $0x4, %esi
movl $0x800, %edx            # imm = 0x800
movb $0x0, %al
callq 0x20c0
leaq 0x134c6(%rip), %rax     # 0x1c3d0
movl 0x8(%rax), %eax
movl %eax, 0x206aa85(%rip)   # 0x2073998
movl $0x1, 0x206aa77(%rip)   # 0x2073994
movl 0x206aa6d(%rip), %edi   # 0x2073990
leaq 0x134a6(%rip), %rax     # 0x1c3d0
movl 0x8(%rax), %edx
movl $0x1, %esi
leaq 0x206aa5b(%rip), %rcx   # 0x2073994
callq 0x2240
addq $0x10, %rsp
popq %rbp
retq
nopw %cs:(%rax,%rax)
// File: /workspace/github_c_makefile_star2_O0/niuyuling[P]CProxy/httpudp.c
// Function: udp_loop
void *udp_loop(void *nullPtr)
{
    int n;

    while (1) {
        n = epoll_wait(udp_efd, udp_evs, MAX_CLIENT_INFO * 2 + 1, -1);
        while (n-- > 0) {
            if (udp_evs[n].data.fd == global.udp_listen_fd) {
                new_client();
            } else {
                if (udp_evs[n].events & EPOLLIN) {
                    recvServer((info_t *) udp_evs[n].data.ptr);
                }
                if (udp_evs[n].events & EPOLLOUT) {
                    outEvent((info_t *) udp_evs[n].data.ptr);
                }
            }
        }
    }

    return NULL;                //消除编译警告
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x10, %rsp
movq %rdi, -0x8(%rbp)
movl 0x206aa2e(%rip), %edi   # 0x2073990
leaq 0x206aa37(%rip), %rsi   # 0x20739a0
movl $0x401, %edx            # imm = 0x401
movl $0xffffffff, %ecx       # imm = 0xFFFFFFFF
callq 0x2410
movl %eax, -0xc(%rbp)
movl -0xc(%rbp), %eax
movl %eax, %ecx
addl $-0x1, %ecx
movl %ecx, -0xc(%rbp)
cmpl $0x0, %eax
jle 0x902c
movslq -0xc(%rbp), %rcx
leaq 0x206aa06(%rip), %rax   # 0x20739a0
imulq $0xc, %rcx, %rcx
addq %rcx, %rax
movl 0x4(%rax), %eax
leaq 0x13425(%rip), %rcx     # 0x1c3d0
cmpl 0x8(%rcx), %eax
jne 0x8fb7
callq 0x9620
jmp 0x9027
movslq -0xc(%rbp), %rcx
leaq 0x206a9de(%rip), %rax   # 0x20739a0
imulq $0xc, %rcx, %rcx
addq %rcx, %rax
movl (%rax), %eax
andl $0x1, %eax
cmpl $0x0, %eax
je 0x8fee
movslq -0xc(%rbp), %rcx
leaq 0x206a9c2(%rip), %rax   # 0x20739a0
imulq $0xc, %rcx, %rcx
addq %rcx, %rax
movq 0x4(%rax), %rdi
callq 0x9040
movslq -0xc(%rbp), %rcx
leaq 0x206a9a7(%rip), %rax   # 0x20739a0
imulq $0xc, %rcx, %rcx
addq %rcx, %rax
movl (%rax), %eax
andl $0x4, %eax
cmpl $0x0, %eax
je 0x9025
movslq -0xc(%rbp), %rcx
leaq 0x206a98b(%rip), %rax   # 0x20739a0
imulq $0xc, %rcx, %rcx
addq %rcx, %rax
movq 0x4(%rax), %rdi
callq 0x9260
jmp 0x9027
jmp 0x8f7b
jmp 0x8f5c
nopw %cs:(%rax,%rax)
// File: /workspace/github_c_makefile_star2_O0/niuyuling[P]CProxy/httpudp.c
// Function: outEvent
static void outEvent(info_t * out)
{
    if (out->server_fd == -1)
        return;

    if ((out->rsp_data && outputToClient(out) != 0) || sendToServer(out) != 0)
        proxyStop(out);
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x10, %rsp
movq %rdi, -0x8(%rbp)
movq -0x8(%rbp), %rax
cmpl $-0x1, 0x1005c(%rax)
jne 0x927b
jmp 0x92ae
movq -0x8(%rbp), %rax
cmpq $0x0, 0x10040(%rax)
je 0x9297
movq -0x8(%rbp), %rdi
callq 0x9bd0
cmpl $0x0, %eax
jne 0x92a5
movq -0x8(%rbp), %rdi
callq 0x9f70
cmpl $0x0, %eax
je 0x92ae
movq -0x8(%rbp), %rdi
callq 0x8d40
addq $0x10, %rsp
popq %rbp
retq
nopw %cs:(%rax,%rax)
// File: /workspace/github_c_makefile_star2_O0/niuyuling[P]CProxy/httpudp.c
// Function: new_client
static void new_client()
{
    int i;

    for (i = 0; i < MAX_CLIENT_INFO; i++) {
        if (client_info_list[i].server_fd == -1) {
            if (recvClient(client_info_list + i) == 0)
                if (margeClient(client_info_list + i) != 0)
                    connectToServer(client_info_list + i);
            return;
        }
    }
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x10, %rsp
movl $0x0, -0x4(%rbp)
cmpl $0x200, -0x4(%rbp)      # imm = 0x200
jge 0x96c6
movslq -0x4(%rbp), %rcx
leaq 0x5d349(%rip), %rax     # 0x66990
imulq $0x10068, %rcx, %rcx    # imm = 0x10068
addq %rcx, %rax
cmpl $-0x1, 0x1005c(%rax)
jne 0x96b6
movslq -0x4(%rbp), %rax
leaq 0x5d32b(%rip), %rdi     # 0x66990
imulq $0x10068, %rax, %rax    # imm = 0x10068
addq %rax, %rdi
callq 0x96d0
cmpl $0x0, %eax
jne 0x96b4
movslq -0x4(%rbp), %rax
leaq 0x5d30c(%rip), %rdi     # 0x66990
imulq $0x10068, %rax, %rax    # imm = 0x10068
addq %rax, %rdi
callq 0x98a0
cmpl $0x0, %eax
je 0x96b2
movslq -0x4(%rbp), %rax
leaq 0x5d2ed(%rip), %rdi     # 0x66990
imulq $0x10068, %rax, %rax    # imm = 0x10068
addq %rax, %rdi
callq 0x9aa0
jmp 0x96b4
jmp 0x96c6
jmp 0x96b8
movl -0x4(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x4(%rbp)
jmp 0x962f
addq $0x10, %rsp
popq %rbp
retq
nopl (%rax)
// File: /workspace/github_c_makefile_star2_O0/niuyuling[P]CProxy/httpudp.c
// Function: connectToServer
static void connectToServer(info_t * info)
{
    info->timer = 0;
    info->server_fd = socket(AF_INET, SOCK_STREAM, 0);
    if (info->server_fd < 0)
        return;
    fcntl(info->server_fd, F_SETFL, O_NONBLOCK);
    udp_ev.events = EPOLLIN | EPOLLOUT | EPOLLET;
    udp_ev.data.ptr = info;
    if (epoll_ctl(udp_efd, EPOLL_CTL_ADD, info->server_fd, &udp_ev) != 0) {
        close(info->server_fd);
        info->server_fd = -1;
    } else if (connect(info->server_fd, (struct sockaddr *)&udp.dst, sizeof(udp.dst)) != 0 && errno != EINPROGRESS) {
        epoll_ctl(udp_efd, EPOLL_CTL_DEL, info->server_fd, NULL);
        close(info->server_fd);
        info->server_fd = -1;
    }
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x10, %rsp
movq %rdi, -0x8(%rbp)
movq -0x8(%rbp), %rax
movl $0x0, 0x10064(%rax)
movl $0x2, %edi
movl $0x1, %esi
xorl %edx, %edx
callq 0x2580
movl %eax, %ecx
movq -0x8(%rbp), %rax
movl %ecx, 0x1005c(%rax)
movq -0x8(%rbp), %rax
cmpl $0x0, 0x1005c(%rax)
jge 0x9ae9
jmp 0x9bc5
movq -0x8(%rbp), %rax
movl 0x1005c(%rax), %edi
movl $0x4, %esi
movl $0x800, %edx            # imm = 0x800
movb $0x0, %al
callq 0x20c0
movl $0x80000005, 0x2069e86(%rip) # imm = 0x80000005
movq -0x8(%rbp), %rax
movq %rax, 0x2069e7f(%rip)   # 0x2073998
movl 0x2069e71(%rip), %edi   # 0x2073990
movq -0x8(%rbp), %rax
movl 0x1005c(%rax), %edx
movl $0x1, %esi
leaq 0x2069e5f(%rip), %rcx   # 0x2073994
callq 0x2240
cmpl $0x0, %eax
je 0x9b5e
movq -0x8(%rbp), %rax
movl 0x1005c(%rax), %edi
callq 0x2200
movq -0x8(%rbp), %rax
movl $0xffffffff, 0x1005c(%rax) # imm = 0xFFFFFFFF
jmp 0x9bc5
movq -0x8(%rbp), %rax
movl 0x1005c(%rax), %edi
leaq 0x206ce49(%rip), %rsi   # 0x20769b8
movl $0x10, %edx
callq 0x24f0
cmpl $0x0, %eax
je 0x9bc3
callq 0x2050
cmpl $0x73, (%rax)
je 0x9bc3
movl 0x2069e02(%rip), %edi   # 0x2073990
movq -0x8(%rbp), %rax
movl 0x1005c(%rax), %edx
movl $0x2, %esi
xorl %eax, %eax
movl %eax, %ecx
callq 0x2240
movq -0x8(%rbp), %rax
movl 0x1005c(%rax), %edi
callq 0x2200
movq -0x8(%rbp), %rax
movl $0xffffffff, 0x1005c(%rax) # imm = 0xFFFFFFFF
jmp 0x9bc5
addq $0x10, %rsp
popq %rbp
retq
nopl (%rax,%rax)
// File: /workspace/github_c_makefile_star2_O0/niuyuling[P]CProxy/httpudp.c
// Function: createRspFd
static int createRspFd(info_t * client)
{
    int opt = 1;

    client->responseClientFd = socket(AF_INET, SOCK_DGRAM, 0);
    if (client->responseClientFd < 0)
        return 1;
    fcntl(client->responseClientFd, F_SETFL, O_NONBLOCK);
    /*
       以下函数不做返回值判断
       因为有些UDP客户端不需要伪装源目标地址
     */
    setsockopt(client->responseClientFd, SOL_SOCKET, SO_REUSEADDR, &opt, sizeof(opt));
    setsockopt(client->responseClientFd, SOL_IP, IP_TRANSPARENT, &opt, sizeof(opt));
    //切换root伪装源目标地址
    if (-1 == seteuid(0))
        perror("seteuid");
    if (-1 == setegid(0))
        perror("setegid");
    bind(client->responseClientFd, (struct sockaddr *)&client->toaddr, sizeof(struct sockaddr_in));
    //切换回用户设置的uid
    if (-1 == setegid(global.uid))
         perror("setegid");
    if (-1 == seteuid(global.uid))
         perror("seteuid");

    return 0;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x20, %rsp
movq %rdi, -0x10(%rbp)
movl $0x1, -0x14(%rbp)
movl $0x2, %esi
xorl %edx, %edx
movl %esi, %edi
callq 0x2580
movl %eax, %ecx
movq -0x10(%rbp), %rax
movl %ecx, 0x10060(%rax)
movq -0x10(%rbp), %rax
cmpl $0x0, 0x10060(%rax)
jge 0x9e56
movl $0x1, -0x4(%rbp)
jmp 0x9f62
movq -0x10(%rbp), %rax
movl 0x10060(%rax), %edi
movl $0x4, %esi
movl $0x800, %edx            # imm = 0x800
movb $0x0, %al
callq 0x20c0
movq -0x10(%rbp), %rax
movl 0x10060(%rax), %edi
movl $0x1, %esi
movl $0x2, %edx
leaq -0x14(%rbp), %rcx
movl $0x4, %r8d
callq 0x20a0
movq -0x10(%rbp), %rax
movl 0x10060(%rax), %edi
xorl %esi, %esi
movl $0x13, %edx
leaq -0x14(%rbp), %rcx
movl $0x4, %r8d
callq 0x20a0
xorl %edi, %edi
callq 0x2590
movl %eax, %ecx
movl $0xffffffff, %eax       # imm = 0xFFFFFFFF
cmpl %ecx, %eax
jne 0x9ed2
leaq 0x2635(%rip), %rdi      # 0xc502
callq 0x2480
xorl %edi, %edi
callq 0x2550
movl %eax, %ecx
movl $0xffffffff, %eax       # imm = 0xFFFFFFFF
cmpl %ecx, %eax
jne 0x9ef0
leaq 0x261f(%rip), %rdi      # 0xc50a
callq 0x2480
movq -0x10(%rbp), %rax
movl 0x10060(%rax), %edi
movq -0x10(%rbp), %rsi
addq $0x10024, %rsi          # imm = 0x10024
movl $0x10, %edx
callq 0x2430
leaq 0x124ba(%rip), %rax     # 0x1c3d0
movl 0xc(%rax), %edi
callq 0x2550
movl %eax, %ecx
movl $0xffffffff, %eax       # imm = 0xFFFFFFFF
cmpl %ecx, %eax
jne 0x9f35
leaq 0x25da(%rip), %rdi      # 0xc50a
callq 0x2480
leaq 0x12494(%rip), %rax     # 0x1c3d0
movl 0xc(%rax), %edi
callq 0x2590
movl %eax, %ecx
movl $0xffffffff, %eax       # imm = 0xFFFFFFFF
cmpl %ecx, %eax
jne 0x9f5b
leaq 0x25ac(%rip), %rdi      # 0xc502
callq 0x2480
movl $0x0, -0x4(%rbp)
movl -0x4(%rbp), %eax
addq $0x20, %rsp
popq %rbp
retq
nopl (%rax,%rax)
// File: /workspace/github_c_makefile_star2_O0/niuyuling[P]CProxy/conf.c
// Function: print_tcp
void print_tcp(tcp * p)
{
    tcp *temp = p;
    while (temp) {
        if (temp->strrep)
            printf("%s %d\n", temp->strrep, temp->strrep_len);
        if (temp->strrep_s)
            printf("%s %d\n", temp->strrep_s, temp->strrep_s_len);
        if (temp->strrep_t)
            printf("%s %d\n", temp->strrep_t, temp->strrep_t_len);

        if (temp->regrep)
            printf("%s %d\n", temp->regrep, temp->regrep_len);
        if (temp->regrep_s)
            printf("%s %d\n", temp->regrep_s, temp->regrep_s_len);
        if (temp->regrep_t)
            printf("%s %d\n", temp->regrep_t, temp->regrep_t_len);

        temp = temp->next;
    }
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x10, %rsp
movq %rdi, -0x8(%rbp)
movq -0x8(%rbp), %rax
movq %rax, -0x10(%rbp)
cmpq $0x0, -0x10(%rbp)
je 0xa2ee
movq -0x10(%rbp), %rax
cmpq $0x0, (%rax)
je 0xa215
movq -0x10(%rbp), %rax
movq (%rax), %rsi
movq -0x10(%rbp), %rax
movl 0x8(%rax), %edx
leaq 0x2306(%rip), %rdi      # 0xc514
movb $0x0, %al
callq 0x2180
movq -0x10(%rbp), %rax
cmpq $0x0, 0x10(%rax)
je 0xa23d
movq -0x10(%rbp), %rax
movq 0x10(%rax), %rsi
movq -0x10(%rbp), %rax
movl 0x20(%rax), %edx
leaq 0x22de(%rip), %rdi      # 0xc514
movb $0x0, %al
callq 0x2180
movq -0x10(%rbp), %rax
cmpq $0x0, 0x18(%rax)
je 0xa265
movq -0x10(%rbp), %rax
movq 0x18(%rax), %rsi
movq -0x10(%rbp), %rax
movl 0x24(%rax), %edx
leaq 0x22b6(%rip), %rdi      # 0xc514
movb $0x0, %al
callq 0x2180
movq -0x10(%rbp), %rax
cmpq $0x0, 0x28(%rax)
je 0xa28d
movq -0x10(%rbp), %rax
movq 0x28(%rax), %rsi
movq -0x10(%rbp), %rax
movl 0x30(%rax), %edx
leaq 0x228e(%rip), %rdi      # 0xc514
movb $0x0, %al
callq 0x2180
movq -0x10(%rbp), %rax
cmpq $0x0, 0x38(%rax)
je 0xa2b5
movq -0x10(%rbp), %rax
movq 0x38(%rax), %rsi
movq -0x10(%rbp), %rax
movl 0x48(%rax), %edx
leaq 0x2266(%rip), %rdi      # 0xc514
movb $0x0, %al
callq 0x2180
movq -0x10(%rbp), %rax
cmpq $0x0, 0x40(%rax)
je 0xa2dd
movq -0x10(%rbp), %rax
movq 0x40(%rax), %rsi
movq -0x10(%rbp), %rax
movl 0x4c(%rax), %edx
leaq 0x223e(%rip), %rdi      # 0xc514
movb $0x0, %al
callq 0x2180
movq -0x10(%rbp), %rax
movq 0x50(%rax), %rax
movq %rax, -0x10(%rbp)
jmp 0xa1e4
addq $0x10, %rsp
popq %rbp
retq
nopw %cs:(%rax,%rax)
// File: /workspace/github_c_makefile_star2_O0/niuyuling[P]CProxy/conf.c
// Function: local_reverse
tcp *local_reverse(tcp * head)
{
    tcp *beg = NULL;
    tcp *end = NULL;
    if (head == NULL || head->next == NULL) {
        return head;
    }
    beg = head;
    end = head->next;
    while (end != NULL) {
        //将 end 从链表中摘除
        beg->next = end->next;
        //将 end 移动至链表头
        end->next = head;
        head = end;
        //调整 end 的指向，另其指向 beg 后的一个节点，为反转下一个节点做准备
        end = beg->next;
    }
    return head;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
movq %rdi, -0x10(%rbp)
movq $0x0, -0x18(%rbp)
movq $0x0, -0x20(%rbp)
cmpq $0x0, -0x10(%rbp)
je 0xa32a
movq -0x10(%rbp), %rax
cmpq $0x0, 0x50(%rax)
jne 0xa334
movq -0x10(%rbp), %rax
movq %rax, -0x8(%rbp)
jmp 0xa389
movq -0x10(%rbp), %rax
movq %rax, -0x18(%rbp)
movq -0x10(%rbp), %rax
movq 0x50(%rax), %rax
movq %rax, -0x20(%rbp)
cmpq $0x0, -0x20(%rbp)
je 0xa381
movq -0x20(%rbp), %rax
movq 0x50(%rax), %rcx
movq -0x18(%rbp), %rax
movq %rcx, 0x50(%rax)
movq -0x10(%rbp), %rcx
movq -0x20(%rbp), %rax
movq %rcx, 0x50(%rax)
movq -0x20(%rbp), %rax
movq %rax, -0x10(%rbp)
movq -0x18(%rbp), %rax
movq 0x50(%rax), %rax
movq %rax, -0x20(%rbp)
jmp 0xa348
movq -0x10(%rbp), %rax
movq %rax, -0x8(%rbp)
movq -0x8(%rbp), %rax
popq %rbp
retq
nop
// File: /workspace/github_c_makefile_star2_O0/niuyuling[P]CProxy/conf.c
// Function: free_tcp
void free_tcp(tcp ** conf_head)
{
    tcp *t;
    while (*conf_head != NULL) {
        t = *conf_head;
        *conf_head = t->next;

        if (t->strrep)
            free(t->strrep);
        if (t->strrep_s)
            free(t->strrep_s);
        if (t->strrep_t)
            free(t->strrep_t);

        if (t->regrep)
            free(t->regrep);
        if (t->regrep_s)
            free(t->regrep_s);
        if (t->regrep_t)
            free(t->regrep_t);
        if (t)
            free(t);
    }
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x10, %rsp
movq %rdi, -0x8(%rbp)
movq -0x8(%rbp), %rax
cmpq $0x0, (%rax)
je 0xa467
movq -0x8(%rbp), %rax
movq (%rax), %rax
movq %rax, -0x10(%rbp)
movq -0x10(%rbp), %rax
movq 0x50(%rax), %rcx
movq -0x8(%rbp), %rax
movq %rcx, (%rax)
movq -0x10(%rbp), %rax
cmpq $0x0, (%rax)
je 0xa3da
movq -0x10(%rbp), %rax
movq (%rax), %rdi
callq 0x2030
movq -0x10(%rbp), %rax
cmpq $0x0, 0x10(%rax)
je 0xa3f2
movq -0x10(%rbp), %rax
movq 0x10(%rax), %rdi
callq 0x2030
movq -0x10(%rbp), %rax
cmpq $0x0, 0x18(%rax)
je 0xa40a
movq -0x10(%rbp), %rax
movq 0x18(%rax), %rdi
callq 0x2030
movq -0x10(%rbp), %rax
cmpq $0x0, 0x28(%rax)
je 0xa422
movq -0x10(%rbp), %rax
movq 0x28(%rax), %rdi
callq 0x2030
movq -0x10(%rbp), %rax
cmpq $0x0, 0x38(%rax)
je 0xa43a
movq -0x10(%rbp), %rax
movq 0x38(%rax), %rdi
callq 0x2030
movq -0x10(%rbp), %rax
cmpq $0x0, 0x40(%rax)
je 0xa452
movq -0x10(%rbp), %rax
movq 0x40(%rax), %rdi
callq 0x2030
cmpq $0x0, -0x10(%rbp)
je 0xa462
movq -0x10(%rbp), %rdi
callq 0x2030
jmp 0xa39c
addq $0x10, %rsp
popq %rbp
retq
nopl (%rax)
// File: /workspace/github_c_makefile_star2_O0/niuyuling[P]CProxy/conf.c
// Function: free_conf
void free_conf(conf * p)
{
    // http module
    if (p->http_ip)
        free(p->http_ip);
    if (p->http_del)
        free(p->http_del);
    if (p->http_first)
        free(p->http_first);

    // https module
    if (p->https_ip)
        free(p->https_ip);
    if (p->https_del)
        free(p->https_del);
    if (p->https_first)
        free(p->https_first);

    // httpdns module
    if (p->httpdns_addr)
        free(p->httpdns_addr);
    if (p->httpdns_http_req)
        free(p->httpdns_http_req);

    // httpudp module
    if (p->httpudp_addr)
        free(p->httpudp_addr);
    if (p->httpudp_http_req)
        free(p->httpudp_http_req);

    return;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x10, %rsp
movq %rdi, -0x8(%rbp)
movq -0x8(%rbp), %rax
cmpq $0x0, 0x28(%rax)
je 0xa494
movq -0x8(%rbp), %rax
movq 0x28(%rax), %rdi
callq 0x2030
movq -0x8(%rbp), %rax
cmpq $0x0, 0x30(%rax)
je 0xa4ac
movq -0x8(%rbp), %rax
movq 0x30(%rax), %rdi
callq 0x2030
movq -0x8(%rbp), %rax
cmpq $0x0, 0x38(%rax)
je 0xa4c4
movq -0x8(%rbp), %rax
movq 0x38(%rax), %rdi
callq 0x2030
movq -0x8(%rbp), %rax
cmpq $0x0, 0x58(%rax)
je 0xa4dc
movq -0x8(%rbp), %rax
movq 0x58(%rax), %rdi
callq 0x2030
movq -0x8(%rbp), %rax
cmpq $0x0, 0x60(%rax)
je 0xa4f4
movq -0x8(%rbp), %rax
movq 0x60(%rax), %rdi
callq 0x2030
movq -0x8(%rbp), %rax
cmpq $0x0, 0x68(%rax)
je 0xa50c
movq -0x8(%rbp), %rax
movq 0x68(%rax), %rdi
callq 0x2030
movq -0x8(%rbp), %rax
cmpq $0x0, 0x80(%rax)
je 0xa52a
movq -0x8(%rbp), %rax
movq 0x80(%rax), %rdi
callq 0x2030
movq -0x8(%rbp), %rax
cmpq $0x0, 0x88(%rax)
je 0xa548
movq -0x8(%rbp), %rax
movq 0x88(%rax), %rdi
callq 0x2030
movq -0x8(%rbp), %rax
cmpq $0x0, 0xa0(%rax)
je 0xa566
movq -0x8(%rbp), %rax
movq 0xa0(%rax), %rdi
callq 0x2030
movq -0x8(%rbp), %rax
cmpq $0x0, 0xa8(%rax)
je 0xa584
movq -0x8(%rbp), %rax
movq 0xa8(%rax), %rdi
callq 0x2030
addq $0x10, %rsp
popq %rbp
retq
nopw (%rax,%rax)
// File: /workspace/github_c_makefile_star2_O0/niuyuling[P]CProxy/conf.c
// Function: read_module
static char *read_module(char *buff, const char *module_name)
{
    int len;
    char *p, *p0;

    len = strlen(module_name);
    p = buff;
    while (1) {
        while (*p == ' ' || *p == '\t' || *p == '\r' || *p == '\n')
            p++;
        if (strncasecmp(p, module_name, len) == 0) {
            p += len;
            while (*p == ' ' || *p == '\t' || *p == '\r' || *p == '\n')
                p++;
            if (*p == '{')
                break;
        }
        if ((p = strchr(p, '\n')) == NULL)
            return NULL;
    }
    if ((p0 = strchr(++p, '}')) == NULL)
        return NULL;

    return strndup(p, p0 - p);
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x40, %rsp
movq %rdi, -0x10(%rbp)
movq %rsi, -0x18(%rbp)
movq -0x18(%rbp), %rdi
callq 0x2130
movl %eax, -0x1c(%rbp)
movq -0x10(%rbp), %rax
movq %rax, -0x28(%rbp)
jmp 0xa7c6
movq -0x28(%rbp), %rax
movsbl (%rax), %ecx
movb $0x1, %al
cmpl $0x20, %ecx
movb %al, -0x31(%rbp)
je 0xa809
movq -0x28(%rbp), %rax
movsbl (%rax), %ecx
movb $0x1, %al
cmpl $0x9, %ecx
movb %al, -0x31(%rbp)
je 0xa809
movq -0x28(%rbp), %rax
movsbl (%rax), %ecx
movb $0x1, %al
cmpl $0xd, %ecx
movb %al, -0x31(%rbp)
je 0xa809
movq -0x28(%rbp), %rax
movsbl (%rax), %eax
cmpl $0xa, %eax
sete %al
movb %al, -0x31(%rbp)
movb -0x31(%rbp), %al
testb $0x1, %al
jne 0xa812
jmp 0xa820
movq -0x28(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x28(%rbp)
jmp 0xa7c6
movq -0x28(%rbp), %rdi
movq -0x18(%rbp), %rsi
movslq -0x1c(%rbp), %rdx
callq 0x2360
cmpl $0x0, %eax
jne 0xa8b1
movl -0x1c(%rbp), %ecx
movq -0x28(%rbp), %rax
movslq %ecx, %rcx
addq %rcx, %rax
movq %rax, -0x28(%rbp)
movq -0x28(%rbp), %rax
movsbl (%rax), %ecx
movb $0x1, %al
cmpl $0x20, %ecx
movb %al, -0x32(%rbp)
je 0xa88a
movq -0x28(%rbp), %rax
movsbl (%rax), %ecx
movb $0x1, %al
cmpl $0x9, %ecx
movb %al, -0x32(%rbp)
je 0xa88a
movq -0x28(%rbp), %rax
movsbl (%rax), %ecx
movb $0x1, %al
cmpl $0xd, %ecx
movb %al, -0x32(%rbp)
je 0xa88a
movq -0x28(%rbp), %rax
movsbl (%rax), %eax
cmpl $0xa, %eax
sete %al
movb %al, -0x32(%rbp)
movb -0x32(%rbp), %al
testb $0x1, %al
jne 0xa893
jmp 0xa8a1
movq -0x28(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x28(%rbp)
jmp 0xa847
movq -0x28(%rbp), %rax
movsbl (%rax), %eax
cmpl $0x7b, %eax
jne 0xa8af
jmp 0xa8d8
jmp 0xa8b1
movq -0x28(%rbp), %rdi
movl $0xa, %esi
callq 0x2170
movq %rax, -0x28(%rbp)
cmpq $0x0, %rax
jne 0xa8d3
movq $0x0, -0x8(%rbp)
jmp 0xa91a
jmp 0xa7c4
movq -0x28(%rbp), %rdi
addq $0x1, %rdi
movq %rdi, -0x28(%rbp)
movl $0x7d, %esi
callq 0x2170
movq %rax, -0x30(%rbp)
cmpq $0x0, %rax
jne 0xa902
movq $0x0, -0x8(%rbp)
jmp 0xa91a
movq -0x28(%rbp), %rdi
movq -0x30(%rbp), %rsi
movq -0x28(%rbp), %rax
subq %rax, %rsi
callq 0x2270
movq %rax, -0x8(%rbp)
movq -0x8(%rbp), %rax
addq $0x40, %rsp
popq %rbp
retq
nopw %cs:(%rax,%rax)
// File: /workspace/github_c_makefile_star2_O0/niuyuling[P]CProxy/conf.c
// Function: parse_httpdns_module
static void parse_httpdns_module(char *content, conf * p)
{
    char *var, *val_begin, *val_end, *lineEnd;

    while ((lineEnd = set_var_val_lineEnd(content, &var, &val_begin, &val_end)) != NULL) {
        if (strcasecmp(var, "addr") == 0) {
            p->httpdns_addr_len = val_end - val_begin;
            if (copy_new_mem(val_begin, p->httpdns_addr_len, &p->httpdns_addr) != 0)
                return;
        } else if (strcasecmp(var, "http_req") == 0) {
            p->httpdns_http_req_len = val_end - val_begin;
            if (copy_new_mem(val_begin, p->httpdns_http_req_len, &p->httpdns_http_req) != 0)
                return;
        } else if (strcasecmp(var, "encode") == 0) {
            p->encode = atoi(val_begin);
        }

        content = strchr(lineEnd + 1, '\n');
    }
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x30, %rsp
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq -0x8(%rbp), %rdi
leaq -0x18(%rbp), %rsi
leaq -0x20(%rbp), %rdx
leaq -0x28(%rbp), %rcx
callq 0xb830
movq %rax, -0x30(%rbp)
cmpq $0x0, %rax
je 0xb6de
movq -0x18(%rbp), %rdi
leaq 0x1081(%rip), %rsi      # 0xc66f
callq 0x2040
cmpl $0x0, %eax
jne 0xb63f
movq -0x28(%rbp), %rax
movq -0x20(%rbp), %rcx
subq %rcx, %rax
movl %eax, %ecx
movq -0x10(%rbp), %rax
movl %ecx, 0x90(%rax)
movq -0x20(%rbp), %rdi
movq -0x10(%rbp), %rax
movl 0x90(%rax), %esi
movq -0x10(%rbp), %rdx
addq $0x80, %rdx
callq 0x4c90
movsbl %al, %eax
cmpl $0x0, %eax
je 0xb63a
jmp 0xb6de
jmp 0xb6c3
movq -0x18(%rbp), %rdi
leaq 0x102a(%rip), %rsi      # 0xc674
callq 0x2040
cmpl $0x0, %eax
jne 0xb695
movq -0x28(%rbp), %rax
movq -0x20(%rbp), %rcx
subq %rcx, %rax
movl %eax, %ecx
movq -0x10(%rbp), %rax
movl %ecx, 0x94(%rax)
movq -0x20(%rbp), %rdi
movq -0x10(%rbp), %rax
movl 0x94(%rax), %esi
movq -0x10(%rbp), %rdx
addq $0x88, %rdx
callq 0x4c90
movsbl %al, %eax
cmpl $0x0, %eax
je 0xb693
jmp 0xb6de
jmp 0xb6c1
movq -0x18(%rbp), %rdi
leaq 0xf19(%rip), %rsi       # 0xc5b9
callq 0x2040
cmpl $0x0, %eax
jne 0xb6bf
movq -0x20(%rbp), %rdi
callq 0x24a0
movl %eax, %ecx
movq -0x10(%rbp), %rax
movl %ecx, 0x98(%rax)
jmp 0xb6c1
jmp 0xb6c3
movq -0x30(%rbp), %rdi
addq $0x1, %rdi
movl $0xa, %esi
callq 0x2170
movq %rax, -0x8(%rbp)
jmp 0xb5c0
addq $0x30, %rsp
popq %rbp
retq
nopw %cs:(%rax,%rax)
// File: /workspace/github_c_makefile_star2_O0/niuyuling[P]CProxy/conf.c
// Function: parse_httpudp_module
static void parse_httpudp_module(char *content, conf * p)
{
    char *var, *val_begin, *val_end, *lineEnd;

    while ((lineEnd = set_var_val_lineEnd(content, &var, &val_begin, &val_end)) != NULL) {
        if (strcasecmp(var, "addr") == 0) {
            p->httpudp_addr_len = val_end - val_begin;
            if (copy_new_mem(val_begin, p->httpudp_addr_len, &p->httpudp_addr) != 0)
                return;
        } else if (strcasecmp(var, "http_req") == 0) {
            p->httpudp_http_req_len = val_end - val_begin;
            if (copy_new_mem(val_begin, p->httpudp_http_req_len, &p->httpudp_http_req) != 0)
                return;
        } else if (strcasecmp(var, "encode") == 0) {
            p->httpudp_encode = atoi(val_begin);
        }

        content = strchr(lineEnd + 1, '\n');
    }
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x30, %rsp
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq -0x8(%rbp), %rdi
leaq -0x18(%rbp), %rsi
leaq -0x20(%rbp), %rdx
leaq -0x28(%rbp), %rcx
callq 0xb830
movq %rax, -0x30(%rbp)
cmpq $0x0, %rax
je 0xb81e
movq -0x18(%rbp), %rdi
leaq 0xf41(%rip), %rsi       # 0xc66f
callq 0x2040
cmpl $0x0, %eax
jne 0xb77f
movq -0x28(%rbp), %rax
movq -0x20(%rbp), %rcx
subq %rcx, %rax
movl %eax, %ecx
movq -0x10(%rbp), %rax
movl %ecx, 0xb0(%rax)
movq -0x20(%rbp), %rdi
movq -0x10(%rbp), %rax
movl 0xb0(%rax), %esi
movq -0x10(%rbp), %rdx
addq $0xa0, %rdx
callq 0x4c90
movsbl %al, %eax
cmpl $0x0, %eax
je 0xb77a
jmp 0xb81e
jmp 0xb803
movq -0x18(%rbp), %rdi
leaq 0xeea(%rip), %rsi       # 0xc674
callq 0x2040
cmpl $0x0, %eax
jne 0xb7d5
movq -0x28(%rbp), %rax
movq -0x20(%rbp), %rcx
subq %rcx, %rax
movl %eax, %ecx
movq -0x10(%rbp), %rax
movl %ecx, 0xb4(%rax)
movq -0x20(%rbp), %rdi
movq -0x10(%rbp), %rax
movl 0xb4(%rax), %esi
movq -0x10(%rbp), %rdx
addq $0xa8, %rdx
callq 0x4c90
movsbl %al, %eax
cmpl $0x0, %eax
je 0xb7d3
jmp 0xb81e
jmp 0xb801
movq -0x18(%rbp), %rdi
leaq 0xdd9(%rip), %rsi       # 0xc5b9
callq 0x2040
cmpl $0x0, %eax
jne 0xb7ff
movq -0x20(%rbp), %rdi
callq 0x24a0
movl %eax, %ecx
movq -0x10(%rbp), %rax
movl %ecx, 0xb8(%rax)
jmp 0xb801
jmp 0xb803
movq -0x30(%rbp), %rdi
addq $0x1, %rdi
movl $0xa, %esi
callq 0x2170
movq %rax, -0x8(%rbp)
jmp 0xb700
addq $0x30, %rsp
popq %rbp
retq
nopw %cs:(%rax,%rax)
// File: /workspace/github_c_makefile_star2_O0/niuyuling[P]CProxy/conf.c
// Function: string_pretreatment
static void string_pretreatment(char *str, int *len)
{
    char *lf, *p, *ori_strs[] = { "\\r", "\\n", "\\b", "\\v", "\\f", "\\t", "\\a", "\\b", "\\0" }, to_chrs[] = { '\r', '\n', '\b', '\v', '\f', '\t', '\a', '\b', '\0' };
    int i;

    while ((lf = strchr(str, '\n')) != NULL) {
        for (p = lf + 1; *p == ' ' || *p == '\t' || *p == '\n' || *p == '\r'; p++)
            *len -= 1;
        strcpy(lf, p);
        *len -= 1;
    }
    for (i = 0; i < sizeof(to_chrs); i++) {
        for (p = strstr(str, ori_strs[i]); p; p = strstr(p, ori_strs[i])) {
            //支持\\r
            *(p - 1) == '\\' ? (*p--) : (*p = to_chrs[i]);
            memmove(p + 1, p + 2, strlen(p + 2));
            (*len)--;
        }
    }
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0xa0, %rsp
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
leaq -0x70(%rbp), %rdi
leaq 0x3252(%rip), %rsi      # 0xed80
movl $0x48, %edx
callq 0x2300
movq 0xac6(%rip), %rax       # 0xc605
movq %rax, -0x79(%rbp)
movb 0xac4(%rip), %al        # 0xc60d
movb %al, -0x71(%rbp)
movq -0x8(%rbp), %rdi
movl $0xa, %esi
callq 0x2170
movq %rax, -0x18(%rbp)
cmpq $0x0, %rax
je 0xbc05
movq -0x18(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x20(%rbp)
movq -0x20(%rbp), %rax
movsbl (%rax), %ecx
movb $0x1, %al
cmpl $0x20, %ecx
movb %al, -0x81(%rbp)
je 0xbbc3
movq -0x20(%rbp), %rax
movsbl (%rax), %ecx
movb $0x1, %al
cmpl $0x9, %ecx
movb %al, -0x81(%rbp)
je 0xbbc3
movq -0x20(%rbp), %rax
movsbl (%rax), %ecx
movb $0x1, %al
cmpl $0xa, %ecx
movb %al, -0x81(%rbp)
je 0xbbc3
movq -0x20(%rbp), %rax
movsbl (%rax), %eax
cmpl $0xd, %eax
sete %al
movb %al, -0x81(%rbp)
movb -0x81(%rbp), %al
testb $0x1, %al
jne 0xbbcf
jmp 0xbbe8
movq -0x10(%rbp), %rax
movl (%rax), %ecx
subl $0x1, %ecx
movl %ecx, (%rax)
movq -0x20(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x20(%rbp)
jmp 0xbb74
movq -0x18(%rbp), %rdi
movq -0x20(%rbp), %rsi
callq 0x2080
movq -0x10(%rbp), %rax
movl (%rax), %ecx
subl $0x1, %ecx
movl %ecx, (%rax)
jmp 0xbb4c
movl $0x0, -0x80(%rbp)
movslq -0x80(%rbp), %rax
cmpq $0x9, %rax
jae 0xbce4
movq -0x8(%rbp), %rdi
movslq -0x80(%rbp), %rax
movq -0x70(%rbp,%rax,8), %rsi
callq 0x2570
movq %rax, -0x20(%rbp)
cmpq $0x0, -0x20(%rbp)
je 0xbcd4
movq -0x20(%rbp), %rax
movsbl -0x1(%rax), %eax
cmpl $0x5c, %eax
jne 0xbc5c
movq -0x20(%rbp), %rax
movq %rax, %rcx
addq $-0x1, %rcx
movq %rcx, -0x20(%rbp)
movsbl (%rax), %eax
jmp 0xbc6d
movslq -0x80(%rbp), %rax
movb -0x79(%rbp,%rax), %al
movq -0x20(%rbp), %rcx
movb %al, (%rcx)
movsbl %al, %eax
movq -0x20(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x98(%rbp)
movq -0x20(%rbp), %rax
addq $0x2, %rax
movq %rax, -0x90(%rbp)
movq -0x20(%rbp), %rdi
addq $0x2, %rdi
callq 0x2130
movq -0x98(%rbp), %rdi
movq -0x90(%rbp), %rsi
movq %rax, %rdx
callq 0x2450
movq -0x10(%rbp), %rax
movl (%rax), %ecx
addl $-0x1, %ecx
movl %ecx, (%rax)
movq -0x20(%rbp), %rdi
movslq -0x80(%rbp), %rax
movq -0x70(%rbp,%rax,8), %rsi
callq 0x2570
movq %rax, -0x20(%rbp)
jmp 0xbc30
jmp 0xbcd6
movl -0x80(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x80(%rbp)
jmp 0xbc0c
addq $0xa0, %rsp
popq %rbp
retq