Skip to content

Latest commit

 

History

History
65 lines (48 loc) · 2.24 KB

Usage.md

File metadata and controls

65 lines (48 loc) · 2.24 KB

Raising specific functions in a binary

C functions to include or exclude from being raised may be specified using the --filter-functions-file option.

llvm-mctoll -d --filter-functions-file=restrict.txt a.out

This may be done in a plain text file with exclude-functions and include-functions sections. Inside each section list the file and function prototype seperated by a colon. Use LLVM IR function types when defining the return and argument types for a function prototype. Here is a simple example.

; exclude `int bar(int)` defined in a.out
exclude-functions {
  a.out:i32 bar(i32)   
}

; include `int foo(void)` defined in a.out
include-functions {
  a.out:i32 foo(void)   
}

Specifying prototypes of functions externally referenced in the binary being raised

Binaries (primarily built from C or assembly sources) typically are linked with shared libraries such as libc (on Linux). So, they reference functions whose protypes are not known from the binary. llvm-mctoll can use prototypes while raising the binary to generate correct calls to such functions in raised LLVM IR. Standard C header files (such as /usr/include/stdio.h) can be specified to provide prototypes of externally linked functions (such as printf) using command-line options -I or --include-files For example,

llvm-mctoll -d --include-files="/usr/include/stdio.h,/usr/include/stdlib.h,/usr/include/string.h" matmul

or

llvm-mctoll -d -I /usr/include/stdio.h -I /usr/include/stdlib.h -I /usr/include/string.h matmul

It is not necessary to specify an include file from the standard path. A user-created file with external function prototypes referenced in the binary being raised, using standard C syntax, can be used. For example, if the binary (say, hello) uses only the external function int puts(const char *s); the binary (i.e., hello) can be raised using the comand

llvm-mctoll -d -I  $HOME/myinclude.h hello

where $HOME/myinclude.h contains

int puts(const char *s);

Debugging the raiser

If you build llvm-mctoll with assertions enabled you can print the LLVM IR after each pass of the raiser to assist with debugging.

llvm-mctoll -d -debug a.out