user: 请将这段汇编代码片段转换成等效的C代码：

```asm
<main>:
  endbr64
  push   %rbp
  push   %rbx
  sub    $0xe8,%rsp
  mov    %edi,%ebp
  mov    %rsi,%rbx
  mov    %fs:0x28,%rax
  mov    %rax,0xd8(%rsp)
  xor    %eax,%eax
  lea    0xc(%rsp),%rdi
  call   <sysinfo@plt>
  lea    0x10(%rsp),%rsi
  lea    D88(%rip),%rdi
  call   <statvfs@plt>
  cmpq   $0x0,0x8(%rbx)
  je     L107
L93:
  cmp    $0x1,%ebp
  jg     L35
L95:
  mov    0xd8(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L122
  mov    $0x0,%eax
  add    $0xe8,%rsp
  pop    %rbx
  pop    %rbp
  ret
L107:
  mov    $0x0,%eax
  call   <menu@plt>
  jmp    L93
L35:
  mov    0x8(%rbx),%rdi
  mov    $0x5,%edx
  lea    D31(%rip),%rsi
  call   <strncmp@plt>
  test   %rax,%rax
  je     L29
L52:
  mov    0x8(%rbx),%rdi
  mov    $0x5,%edx
  lea    D151(%rip),%rsi
  call   <strncmp@plt>
  test   %rax,%rax
  je     L21
L38:
  mov    0x8(%rbx),%rdi
  mov    $0x5,%edx
  lea    D158(%rip),%rsi
  call   <strncmp@plt>
  test   %rax,%rax
  je     L114
L105:
  mov    0x8(%rbx),%rdi
  mov    $0x5,%edx
  lea    D23(%rip),%rsi
  call   <strncmp@plt>
  test   %rax,%rax
  je     L34
L19:
  mov    0x8(%rbx),%rdi
  mov    $0x5,%edx
  lea    D85(%rip),%rsi
  call   <strncmp@plt>
  test   %rax,%rax
  jne    L95
  mov    0x20(%rsp),%rax
  imul   0x28(%rsp),%rax
  mov    $0x3b9aca00,%esi
  mov    $0x0,%edx
  div    %rsi
  mov    %rax,%rcx
  mov    0x10(%rsp),%rax
  imul   0x18(%rsp),%rax
  mov    $0x0,%edx
  div    %rsi
  mov    %rcx,%rdx
  mov    %rax,%rsi
  lea    D43(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    $0x0,%r9d
  lea    D138(%rip),%r8
  lea    D163(%rip),%rcx
  lea    D139(%rip),%rdx
  lea    D161(%rip),%rdi
  mov    %rdi,%rsi
  call   <execl@plt>
  jmp    L95
L29:
  lea    D36(%rip),%rdi
  call   <puts@plt>
  lea    D104(%rip),%rdi
  mov    %rdi,0x30(%rsp)
  lea    D46(%rip),%rax
  mov    %rax,0x38(%rsp)
  movq   $0x0,0x40(%rsp)
  lea    0x30(%rsp),%rsi
  call   <execvp@plt>
  jmp    L52
L21:
  mov    $0x0,%eax
  call   <information@plt>
  mov    $0x0,%eax
  call   <gnu_get_libc_version@plt>
  mov    %rax,%rsi
  lea    D56(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    $0x0,%eax
  call   <stuff@plt>
  jmp    L38
L114:
  lea    0x50(%rsp),%rbp
  mov    $0x80,%esi
  mov    %rbp,%rdi
  call   <gethostname@plt>
  mov    %rbp,%rsi
  lea    D35(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  jmp    L105
L34:
  lea    D76(%rip),%rdi
  call   <puts@plt>
  lea    D136(%rip),%rbp
  mov    %rbp,%rdi
  call   <puts@plt>
  mov    $0x0,%eax
  call   <iface@plt>
  lea    D79(%rip),%rdi
  call   <puts@plt>
  mov    %rbp,%rdi
  call   <puts@plt>
  mov    $0x2,%esi
  lea    D105(%rip),%rdi
  call   <kernel@plt>
  jmp    L19
L122:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: unpack_data
arguments: data_label: D88
type_guessed: string
name: unpack_data
arguments: data_label: D31
type_guessed: string
name: unpack_data
arguments: data_label: D151
type_guessed: string
name: unpack_data
arguments: data_label: D158
type_guessed: string
name: unpack_data
arguments: data_label: D23
type_guessed: string
name: unpack_data
arguments: data_label: D85
type_guessed: string
name: unpack_data
arguments: data_label: D43
type_guessed: string
name: unpack_data
arguments: data_label: D138
type_guessed: string
name: unpack_data
arguments: data_label: D163
type_guessed: string
name: unpack_data
arguments: data_label: D139
type_guessed: string
name: unpack_data
arguments: data_label: D161
type_guessed: string
name: unpack_data
arguments: data_label: D36
type_guessed: string
name: unpack_data
arguments: data_label: D104
type_guessed: string
name: unpack_data
arguments: data_label: D46
type_guessed: string
name: unpack_data
arguments: data_label: D56
type_guessed: string
name: unpack_data
arguments: data_label: D35
type_guessed: string
name: unpack_data
arguments: data_label: D76
type_guessed: string
name: unpack_data
arguments: data_label: D136
type_guessed: string
name: unpack_data
arguments: data_label: D79
type_guessed: string
name: unpack_data
arguments: data_label: D105
type_guessed: string

tool: D88: /

tool: D31: --arp

tool: D151: --system

tool: D158: --hostname

tool: D23: --ip

tool: D85: --disks

tool: D43: The HDD size is %lu gigabytes, and has %lu gigabytes free.



tool: D138: -n

tool: D163: -S

tool: D139: -d

tool: D161: /bin/lsblk

tool: D36: This is the routing table.

tool: D104: cat

tool: D46: /proc/net/arp

tool: D56: GNU libc version: %s


tool: D35: Hostname: %s


tool: D76: Printing the IP addresse(s) on the machine.

tool: D136: -----------------------------------------------------



tool: D79: Printing the TCP table.

tool: D105: /proc/net/tcp

assistant: ```c
int main(int argc, char **argv) {
  char hostname[128];
  unsigned long hdd_size;
  unsigned long hdd_free;
  struct sysinfo info;
  sysinfo(&info);
  struct statvfs fsinfo;
  statvfs("/", &fsinfo);
  if (argv[1] == NULL) {
    menu();
  }
  if (argc > 1 && strncmp(argv[1], "--arp", 0x05) == 0) {
    printf("This is the routing table.\n");
    char *arg[] = {"cat", "/proc/net/arp", NULL};
    execvp(arg[0], arg);
  }
  if (argc > 1 && strncmp(argv[1], "--system", 0x05) == 0) {
    information();
    printf("GNU libc version: %s\n", gnu_get_libc_version());
    stuff();
  }
  if (argc > 1 && strncmp(argv[1], "--hostname", 0x05) == 0) {
    gethostname(hostname, sizeof hostname);
    printf("Hostname: %s\n", hostname);
  }
  if (argc > 1 && strncmp(argv[1], "--ip", 0x05) == 0) {
    printf("Printing the IP addresse(s) on the machine.\n");
    printf("-----------------------------------------------------\n\n\n");
    iface();
    printf("Printing the TCP table.\n");
    printf("-----------------------------------------------------\n\n\n");
    kernel("/proc/net/tcp", 2);
  }
  if (argc > 1 && strncmp(argv[1], "--disks", 0x05) == 0) {
    hdd_size = fsinfo.f_frsize * fsinfo.f_blocks;
    hdd_free = fsinfo.f_bsize * fsinfo.f_bfree;
    unsigned long capacity = hdd_size / 1000 / 1000 / 1000;
    unsigned long freesize = hdd_free / 1000 / 1000 / 1000;
    printf("The HDD size is %lu gigabytes, and has %lu gigabytes free.\n\n", capacity, freesize);
    execl("/bin/lsblk", "/bin/lsblk", "-d", "-S", "-n", NULL);
  }
  return 0;
}
```