user: 下面的汇编指令对应的C源代码是什么:

```asm
<tc_attach_upload_qdisc>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x30,%rsp
  mov    %rdi,-0x18(%rbp)
  mov    %rsi,-0x20(%rbp)
  mov    %edx,-0x24(%rbp)
  movl   $0x0,-0x4(%rbp)
  mov    -0x20(%rbp),%rax
  mov    %rax,%rsi
  lea    D44(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <execute@plt>
  mov    -0x18(%rbp),%rax
  mov    %rax,%rsi
  lea    D25(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <execute@plt>
  mov    -0x20(%rbp),%rax
  mov    %rax,%rsi
  lea    D39(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <execute@plt>
  or     %eax,-0x4(%rbp)
  mov    -0x24(%rbp),%ecx
  mov    -0x24(%rbp),%edx
  mov    -0x20(%rbp),%rax
  mov    %rax,%rsi
  lea    D64(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <execute@plt>
  or     %eax,-0x4(%rbp)
  mov    -0x24(%rbp),%eax
  movslq %eax,%rdx
  imul   $0x66666667,%rdx,%rdx
  shr    $0x20,%rdx
  sar    $0x2,%edx
  sar    $0x1f,%eax
  mov    %edx,%ecx
  sub    %eax,%ecx
  mov    -0x24(%rbp),%eax
  movslq %eax,%rdx
  imul   $0x66666667,%rdx,%rdx
  shr    $0x20,%rdx
  sar    $0x2,%edx
  sar    $0x1f,%eax
  sub    %eax,%edx
  mov    -0x20(%rbp),%rax
  mov    %rax,%rsi
  lea    D48(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <execute@plt>
  or     %eax,-0x4(%rbp)
  mov    -0x18(%rbp),%rax
  mov    %rax,%rsi
  lea    D59(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <execute@plt>
  or     %eax,-0x4(%rbp)
  mov    -0x20(%rbp),%rdx
  mov    -0x18(%rbp),%rax
  mov    %rax,%rsi
  lea    D34(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <execute@plt>
  or     %eax,-0x4(%rbp)
  mov    -0x4(%rbp),%eax
  leave
  ret
```

tool_calls: name: disassemble_data
arguments: tag: D44
type_infered: string
name: disassemble_data
arguments: tag: D25
type_infered: string
name: disassemble_data
arguments: tag: D39
type_infered: string
name: disassemble_data
arguments: tag: D64
type_infered: string
name: disassemble_data
arguments: tag: D48
type_infered: string
name: disassemble_data
arguments: tag: D59
type_infered: string
name: disassemble_data
arguments: tag: D34
type_infered: string

tool: D44: tc qdisc del dev %s root

tool: D25: tc qdisc del dev %s ingress

tool: D39: tc qdisc add dev %s root handle 1: hfsc default 2

tool: D64: tc class add dev %s parent 1: classid 1:1 hfsc sc rate %dkbit ul rate %dkbit

tool: D48: tc class add dev %s parent 1:1 classid 1:2 hfsc sc rate %dkbit ul rate %dkbit

tool: D59: tc qdisc add dev %s ingress

tool: D34: tc filter add dev %s parent ffff: protocol ip prio 1 u32 match u32 0 0 flowid 1:1 action connmark action mirred egress redirect dev %s

assistant: ```c
int tc_attach_upload_qdisc(const char dev[], const char ifb_dev[], int upload_limit) {
  int rc = 0;
  execute("tc qdisc del dev %s root", ifb_dev);
  execute("tc qdisc del dev %s ingress", dev);
  rc |= execute("tc qdisc add dev %s root handle 1: hfsc default 2", ifb_dev);
  rc |= execute("tc class add dev %s parent 1: classid 1:1 hfsc sc rate %dkbit ul rate %dkbit", ifb_dev, upload_limit, upload_limit);
  rc |= execute("tc class add dev %s parent 1:1 classid 1:2 hfsc sc rate %dkbit ul rate %dkbit", ifb_dev, upload_limit / 10, upload_limit / 10);
  rc |= execute("tc qdisc add dev %s ingress", dev);
  rc |= execute("tc filter add dev %s parent ffff: protocol ip prio 1 u32 match u32 0 0 flowid 1:1 action connmark action mirred egress redirect dev %s", dev, ifb_dev);
  return rc;
}
```