user: 请显示与下面列出的汇编代码相匹配的C语言实现：

```asm
<bmp_js_l>:
  endbr64
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0xa8,%rsp
  mov    %rdi,%r13
  mov    %esi,%ebp
  mov    %fs:0x28,%rax
  mov    %rax,0x98(%rsp)
  xor    %eax,%eax
  movslq %esi,%rbx
  imul   $0x55555556,%rbx,%rbx
  shr    $0x20,%rbx
  mov    %esi,%eax
  sar    $0x1f,%eax
  sub    %eax,%ebx
  add    $0x3,%ebx
  mov    $0x2a2f4d42,%eax
  movabs $0x6c0000007a0000,%rdx
  mov    %rax,0x10(%rsp)
  mov    %rdx,0x18(%rsp)
  movw   $0x0,0x20(%rsp)
  mov    $0x180001,%eax
  movabs $0xb1300000010,%rdx
  mov    %rax,0x30(%rsp)
  mov    %rdx,0x38(%rsp)
  mov    $0xb13,%eax
  movabs $0x7352474200000000,%rdx
  mov    %rax,0x40(%rsp)
  mov    %rdx,0x48(%rsp)
  movq   $0x0,0x50(%rsp)
  movq   $0x0,0x58(%rsp)
  movq   $0x0,0x60(%rsp)
  movq   $0x0,0x68(%rsp)
  movq   $0x0,0x70(%rsp)
  movq   $0x0,0x78(%rsp)
  movq   $0x2,0x80(%rsp)
  movq   $0x0,0x88(%rsp)
  movl   $0x303d2f2a,0x90(%rsp)
  movw   $0xa3b,0x94(%rsp)
  movl   $0x2f2f,0xa(%rsp)
  movw   $0x0,0xe(%rsp)
  lea    0x86(%rsi),%edi
  call   <malloc@plt>
  mov    %rax,%r12
  mov    %bl,0x2(%rsp)
  movb   $0x1,0x6(%rsp)
  movzbl %bh,%eax
  mov    %al,0x3(%rsp)
  movb   $0x0,0x7(%rsp)
  mov    %ebx,%eax
  shr    $0x10,%eax
  mov    %al,0x4(%rsp)
  movb   $0x0,0x8(%rsp)
  shr    $0x18,%ebx
  mov    %bl,0x5(%rsp)
  movb   $0x0,0x9(%rsp)
  lea    0x10(%rsp),%rsi
  mov    $0x12,%edx
  mov    %r12,%rdi
  call   <memcpy@plt>
  lea    0x2(%rsp),%rsi
  lea    0x12(%r12),%rdi
  mov    $0x4,%edx
  call   <memcpy@plt>
  lea    0x6(%rsp),%rsi
  lea    0x16(%r12),%rdi
  mov    $0x4,%edx
  call   <memcpy@plt>
  lea    0x30(%rsp),%rsi
  lea    0x1a(%r12),%rdi
  mov    $0x6c,%edx
  call   <memcpy@plt>
  lea    0x80(%r12),%rdi
  mov    %ebp,%edx
  mov    %r13,%rsi
  call   <memcpy@plt>
  lea    0xa(%rsp),%rsi
  lea    0x80(%rbp),%edi
  movslq %edi,%rdi
  add    %r12,%rdi
  mov    $0x6,%edx
  call   <memcpy@plt>
  mov    0x98(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L2
  mov    %r12,%rax
  add    $0xa8,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  ret
L2:
  call   <__stack_chk_fail@plt>
```

assistant: ```c
char *bmp_js_l(char *content, int size) {
  unsigned int width = size / 3 + 3;
  unsigned int height = 1;
  const char _bmp_header1[18] = {0x42, 0x4d, 0x2f, 0x2a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7a, 0x00, 0x00, 0x00, 0x6c, 0x00, 0x00, 0x00};
  char sizew[4], sizeh[4];
  const char _bmp_header2[134 - 32] = {0x01, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x13, 0x0b, 0x00, 0x00, 0x13, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x47, 0x52, 0x73, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, 0x2f, 0x3d, 0x30, 0x3b, 0x0a};
  const char _bmp_footer[6] = {0x2f, 0x2f, 0x00, 0x00, 0x00, 0x00};
  char *buffer = (char *)malloc(134 + size);
  for (int i = 0; i < 4; i++) {
    sizew[i] = (width >> i * 8) & 0xff;
    sizeh[i] = (height >> i * 8) & 0xff;
  }
  memcpy(buffer, _bmp_header1, 18);
  memcpy(&buffer[18], sizew, 4);
  memcpy(&buffer[22], sizeh, 4);
  memcpy(&buffer[26], _bmp_header2, 134 - 26);
  memcpy(&buffer[134 - 6], content, size);
  memcpy(&buffer[134 - 6 + size], _bmp_footer, 6);
  return buffer;
}
```