user: Demonstrate the C code that generates the assembly output below:

```asm
<help_message>:
  endbr64
  push   %rbp
  lea    D116(%rip),%rbp
  mov    %rbp,%rdi
  call   <puts@plt>
  lea    D169(%rip),%rdi
  call   <puts@plt>
  mov    $0x17,%ecx
  xor    %edx,%edx
  xor    %eax,%eax
  mov    $0x5,%esi
  lea    D153(%rip),%rdi
  call   <printf@plt>
  lea    D62(%rip),%rdi
  call   <puts@plt>
  lea    D43(%rip),%rdi
  call   <puts@plt>
  lea    D63(%rip),%rdi
  call   <puts@plt>
  lea    D80(%rip),%rdi
  call   <puts@plt>
  lea    D46(%rip),%rdi
  call   <puts@plt>
  lea    D158(%rip),%rdi
  call   <puts@plt>
  lea    D112(%rip),%rdi
  call   <puts@plt>
  lea    D89(%rip),%rdi
  call   <puts@plt>
  lea    D47(%rip),%rdi
  call   <puts@plt>
  lea    D16(%rip),%rdi
  call   <puts@plt>
  lea    D174(%rip),%rdi
  call   <puts@plt>
  lea    D125(%rip),%rdi
  call   <puts@plt>
  lea    D2(%rip),%rdi
  call   <puts@plt>
  lea    D155(%rip),%rdi
  call   <puts@plt>
  lea    D172(%rip),%rdi
  call   <puts@plt>
  mov    %rbp,%rdi
  pop    %rbp
  jmp    1060 <puts@plt>
```

tool_calls: name: extract_symbolic_data
arguments: tag: D116
type_infered: string
name: extract_symbolic_data
arguments: tag: D169
type_infered: string
name: extract_symbolic_data
arguments: tag: D153
type_infered: string
name: extract_symbolic_data
arguments: tag: D62
type_infered: string
name: extract_symbolic_data
arguments: tag: D43
type_infered: string
name: extract_symbolic_data
arguments: tag: D63
type_infered: string
name: extract_symbolic_data
arguments: tag: D80
type_infered: string
name: extract_symbolic_data
arguments: tag: D46
type_infered: string
name: extract_symbolic_data
arguments: tag: D158
type_infered: string
name: extract_symbolic_data
arguments: tag: D112
type_infered: string
name: extract_symbolic_data
arguments: tag: D89
type_infered: string
name: extract_symbolic_data
arguments: tag: D47
type_infered: string
name: extract_symbolic_data
arguments: tag: D16
type_infered: string
name: extract_symbolic_data
arguments: tag: D174
type_infered: string
name: extract_symbolic_data
arguments: tag: D125
type_infered: string
name: extract_symbolic_data
arguments: tag: D2
type_infered: string
name: extract_symbolic_data
arguments: tag: D155
type_infered: string
name: extract_symbolic_data
arguments: tag: D172
type_infered: string

tool: D116: ********************************************************************************

tool: D169: 
lifer - A Windows link file (a.k.a. shortcut) analyser

tool: D153: Version: %u.%u.%u



tool: D62: Usage: lifer  [-vhs] [-o csv|tsv|txt|xml] file(s)|directory

tool: D43:        lifer   -i    [-o txt|xml]         file(s)|directory


tool: D63: Options:

tool: D80:   -v    print version number

tool: D46:   -h    print this help

tool: D158:   -s    shortened output (default is to output all fields)

tool: D112:   -o    output type (choose from csv, tsv, txt or xml). 

tool: D89:         The default is txt.

tool: D47:   -i    print idlist information (only with output type: 'txt' or 'xml')


tool: D16: Output is to standard output, therefore to send to a file, use the

tool: D174: redirection operator '>'.


tool: D125: Example:
  lifer -o csv {DIRECTORY} > Links.csv


tool: D2: This will create a comma seperated file named Links.csv in the current

tool: D155: directory. The file can be viewed in a spreadsheet and will contain details

tool: D172: of all the link files found in the named directory.


assistant: ```c
void help_message() {
  printf("********************************************************************************\n");
  printf("\nlifer - A Windows link file (a.k.a. shortcut) analyser\n");
  printf("Version: %u.%u.%u\n\n", 5, 0, 23);
  printf("Usage: lifer  [-vhs] [-o csv|tsv|txt|xml] file(s)|directory\n");
  printf("       lifer   -i    [-o txt|xml]         file(s)|directory\n\n");
  printf("Options:\n");
  printf("  -v    print version number\n");
  printf("  -h    print this help\n");
  printf("  -s    shortened output (default is to output all fields)\n");
  printf("  -o    output type (choose from csv, tsv, txt or xml). \n");
  printf("        The default is txt.\n");
  printf("  -i    print idlist information (only with output type: 'txt' or 'xml')\n\n");
  printf("Output is to standard output, therefore to send to a file, use the\n");
  printf("redirection operator '>'.\n\n");
  printf("Example:\n  lifer -o csv {DIRECTORY} > Links.csv\n\n");
  printf("This will create a comma seperated file named Links.csv in the current\n");
  printf("directory. The file can be viewed in a spreadsheet and will contain details\n");
  printf("of all the link files found in the named directory.\n\n");
  printf("********************************************************************************\n");
}
```