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

```asm
<makeCommand>:
  endbr64
  push   %r13
  push   %r12
  push   %rbp
  mov    %rdi,%rbp
  push   %rbx
  sub    $0x8,%rsp
  call   <strlen@plt>
  lea    0x9(%rax),%ebx
  mov    %eax,%r13d
  mov    %ebx,%edi
  call   <malloc@plt>
  mov    %r13d,%edi
  mov    %rax,%r12
  call   <malloc@plt>
  mov    %rbp,%rsi
  mov    %rax,%r13
  mov    %rax,%rdi
  call   <strcpy@plt>
  mov    %r13,%rdx
  movabs $0x100002300,%rcx
  test   %r13,%r13
  jne    L14
  jmp    L35
L46:
  cmp    $0x20,%al
  ja     L47
  bt     %rax,%rcx
  jae    L47
  movb   $0x9,(%rdx)
L47:
  add    $0x1,%rdx
L14:
  movzbl (%rdx),%eax
  test   %al,%al
  jne    L46
L35:
  mov    $0x92a,%eax
  mov    %rbp,%rdi
  movslq %ebx,%rbx
  mov    %ax,(%r12)
  call   <strlen@plt>
  mov    %rbp,%rdi
  add    $0x9,%eax
  movslq %eax,%rdx
  sar    $0x1f,%eax
  imul   $0x10624dd3,%rdx,%rdx
  sar    $0x26,%rdx
  sub    %eax,%edx
  movslq %edx,%rax
  mov    %edx,%ecx
  imul   $0x66666667,%rax,%rax
  sar    $0x1f,%ecx
  sar    $0x22,%rax
  sub    %ecx,%eax
  lea    (%rax,%rax,4),%eax
  add    %eax,%eax
  sub    %eax,%edx
  add    $0x30,%edx
  mov    %dl,0x2(%r12)
  call   <strlen@plt>
  mov    %rbp,%rdi
  add    $0x9,%eax
  movslq %eax,%rdx
  sar    $0x1f,%eax
  imul   $0x51eb851f,%rdx,%rdx
  sar    $0x25,%rdx
  sub    %eax,%edx
  movslq %edx,%rax
  mov    %edx,%ecx
  imul   $0x66666667,%rax,%rax
  sar    $0x1f,%ecx
  sar    $0x22,%rax
  sub    %ecx,%eax
  lea    (%rax,%rax,4),%eax
  add    %eax,%eax
  sub    %eax,%edx
  add    $0x30,%edx
  mov    %dl,0x3(%r12)
  call   <strlen@plt>
  mov    %rbp,%rdi
  add    $0x9,%eax
  movslq %eax,%rdx
  sar    $0x1f,%eax
  imul   $0x66666667,%rdx,%rdx
  sar    $0x22,%rdx
  sub    %eax,%edx
  movslq %edx,%rax
  mov    %edx,%ecx
  imul   $0x66666667,%rax,%rax
  sar    $0x1f,%ecx
  sar    $0x22,%rax
  sub    %ecx,%eax
  lea    (%rax,%rax,4),%eax
  add    %eax,%eax
  sub    %eax,%edx
  add    $0x30,%edx
  mov    %dl,0x4(%r12)
  call   <strlen@plt>
  mov    %r13,%rsi
  mov    %r12,%rdi
  add    $0x9,%eax
  movslq %eax,%rdx
  mov    %eax,%ecx
  imul   $0x66666667,%rdx,%rdx
  sar    $0x1f,%ecx
  sar    $0x22,%rdx
  sub    %ecx,%edx
  lea    (%rdx,%rdx,4),%edx
  add    %edx,%edx
  sub    %edx,%eax
  mov    $0x9,%edx
  add    $0x30,%eax
  mov    %dx,0x6(%r12)
  mov    %al,0x5(%r12)
  call   <strcat@plt>
  movb   $0x9,-0x2(%r12,%rbx,1)
  mov    %r12,%rax
  movb   $0x21,-0x1(%r12,%rbx,1)
  add    $0x8,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  ret
```

assistant: ```c
char *makeCommand(char *command) {
  int totLen = 0, srcLen = 0;
  char head[8];
  char *fullcommand = malloc((totLen = (srcLen = strlen(command)) + 7 + 2));
  char *cpycommand = malloc(srcLen);
  strcpy(cpycommand, command);
  char *cursor = cpycommand;
  while (cursor && *cursor != '\0') {
    if (*cursor == '\t' || *cursor == '\r' || *cursor == ' ' || *cursor == '\b')
      *cursor = '\t';
    cursor++;
  }
  fullcommand[0] = '*';
  fullcommand[1] = '\t';
  fullcommand[2] = ((strlen(command) + 7 + 2) / 1000) % 10 + '0';
  fullcommand[3] = ((strlen(command) + 7 + 2) / 100) % 10 + '0';
  fullcommand[4] = ((strlen(command) + 7 + 2) / 10) % 10 + '0';
  fullcommand[5] = ((strlen(command) + 7 + 2) / 1) % 10 + '0';
  fullcommand[6] = '\t';
  fullcommand[7] = '\0';
  strcat(fullcommand, cpycommand);
  fullcommand[totLen - 2] = '\t';
  fullcommand[totLen - 1] = '!';
  return fullcommand;
}
```