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

```asm
<printTCPHeader>:
  endbr64
  push   %rbx
  mov    %rdi,%rbx
  lea    D78(%rip),%rdi
  call   <puts@plt>
  mov    $0x40,%esi
  lea    D199(%rip),%rdi
  xor    %eax,%eax
  call   <printf@plt>
  mov    (%rbx),%eax
  lea    D184(%rip),%rdi
  lea    -0x14(,%rax,4),%esi
  xor    %eax,%eax
  call   <printf@plt>
  mov    0x3c(%rbx),%edi
  call   <ntohs@plt>
  lea    D181(%rip),%rdi
  mov    %eax,%esi
  xor    %eax,%eax
  call   <printf@plt>
  mov    0x38(%rbx),%edi
  call   <ntohs@plt>
  lea    D125(%rip),%rdi
  mov    %eax,%esi
  xor    %eax,%eax
  call   <printf@plt>
  mov    0x4(%rbx),%esi
  lea    D166(%rip),%rdi
  xor    %eax,%eax
  call   <printf@plt>
  mov    (%rbx),%esi
  lea    D86(%rip),%rdi
  xor    %eax,%eax
  call   <printf@plt>
  mov    0x8(%rbx),%esi
  lea    D193(%rip),%rdi
  xor    %eax,%eax
  call   <printf@plt>
  mov    0xc(%rbx),%esi
  lea    D3(%rip),%rdi
  xor    %eax,%eax
  call   <printf@plt>
  mov    0x10(%rbx),%esi
  lea    D160(%rip),%rdi
  xor    %eax,%eax
  call   <printf@plt>
  mov    0x14(%rbx),%esi
  lea    D39(%rip),%rdi
  xor    %eax,%eax
  call   <printf@plt>
  mov    0x18(%rbx),%esi
  lea    D79(%rip),%rdi
  xor    %eax,%eax
  call   <printf@plt>
  mov    0x1c(%rbx),%esi
  lea    D108(%rip),%rdi
  xor    %eax,%eax
  call   <printf@plt>
  mov    0x20(%rbx),%esi
  lea    D131(%rip),%rdi
  xor    %eax,%eax
  call   <printf@plt>
  mov    0x24(%rbx),%esi
  lea    D46(%rip),%rdi
  xor    %eax,%eax
  call   <printf@plt>
  mov    0x28(%rbx),%esi
  lea    D159(%rip),%rdi
  xor    %eax,%eax
  call   <printf@plt>
  mov    0x2c(%rbx),%esi
  lea    D136(%rip),%rdi
  xor    %eax,%eax
  call   <printf@plt>
  mov    0x30(%rbx),%esi
  lea    D185(%rip),%rdi
  xor    %eax,%eax
  call   <printf@plt>
  mov    0x34(%rbx),%esi
  lea    D187(%rip),%rdi
  xor    %eax,%eax
  call   <printf@plt>
  lea    D36(%rip),%rdi
  pop    %rbx
  jmp    1070 <puts@plt>
```

tool_calls: name: unpack_data
arguments: label: D78
data_type: string
name: unpack_data
arguments: label: D199
data_type: string
name: unpack_data
arguments: label: D184
data_type: string
name: unpack_data
arguments: label: D181
data_type: string
name: unpack_data
arguments: label: D125
data_type: string
name: unpack_data
arguments: label: D166
data_type: string
name: unpack_data
arguments: label: D86
data_type: string
name: unpack_data
arguments: label: D193
data_type: string
name: unpack_data
arguments: label: D3
data_type: string
name: unpack_data
arguments: label: D160
data_type: string
name: unpack_data
arguments: label: D39
data_type: string
name: unpack_data
arguments: label: D79
data_type: string
name: unpack_data
arguments: label: D108
data_type: string
name: unpack_data
arguments: label: D131
data_type: string
name: unpack_data
arguments: label: D46
data_type: string
name: unpack_data
arguments: label: D159
data_type: string
name: unpack_data
arguments: label: D136
data_type: string
name: unpack_data
arguments: label: D185
data_type: string
name: unpack_data
arguments: label: D187
data_type: string
name: unpack_data
arguments: label: D36
data_type: string

tool: D78: ------------TCP Header

tool: D199: tcp header length : %zu


tool: D184: tcp option length : %d


tool: D181: source port: 	%d


tool: D125: dest port: 	%d


tool: D166: ack_seq: 		%d


tool: D86: doff: 		%d


tool: D193: res1: 		%d


tool: D3: cwr: 		%d


tool: D160: ece: 		%d


tool: D39: urg: 		%d


tool: D79: ack: 		%d


tool: D108: psh: 		%d


tool: D131: rst: 		%d


tool: D46: syn: 		%d


tool: D159: fin: 		%d


tool: D136: window: 		%d


tool: D185: check: 		%x


tool: D187: urg_ptr: 		%d


tool: D36: ----------------------


assistant: ```c
void printTCPHeader(struct tcphdr *tcph) {
  printf("------------TCP Header\n");
  printf("tcp header length : %zu\n", sizeof(struct tcphdr));
  printf("tcp option length : %d\n", tcph->doff * 4 - 20);
  printf("source port: \t%d\n", ntohs(tcph->source));
  printf("dest port: \t%d\n", ntohs(tcph->dest));
  printf("ack_seq: \t\t%d\n", tcph->ack_seq);
  printf("doff: \t\t%d\n", tcph->doff);
  printf("res1: \t\t%d\n", tcph->res1);
  printf("cwr: \t\t%d\n", tcph->cwr);
  printf("ece: \t\t%d\n", tcph->ece);
  printf("urg: \t\t%d\n", tcph->urg);
  printf("ack: \t\t%d\n", tcph->ack);
  printf("psh: \t\t%d\n", tcph->psh);
  printf("rst: \t\t%d\n", tcph->rst);
  printf("syn: \t\t%d\n", tcph->syn);
  printf("fin: \t\t%d\n", tcph->fin);
  printf("window: \t\t%d\n", tcph->window);
  printf("check: \t\t%x\n", tcph->check);
  printf("urg_ptr: \t\t%d\n", tcph->urg_ptr);
  printf("----------------------\n\n");
}
```