GSoC status report - #7 of 10

Srikavin Ramkumar srikavinramkumar at
Tue Jul 27 06:53:59 UTC 2021



Last week, I continued to work on the code generation. I added support for
auxiliary strings for syscalls with a flag return type. 

I also added the ability to specify how certain types are decoded within the
definition files. The expression '$$' can be used to refer to the value of the
syscall/return value being decoded.

As an example, the following syscall description:

    :ptr[in, bind_sockaddr]	 %{ decode_sockaddr(tcp, $$, (int) tcp->u_arg[1]); %}
    bind(sockfd fd, addr ptr[in, bind_sockaddr], addrlen int)

results in the following output:

        /* arg: sockfd (fd) */
        /* using decoder from defs/common.syzlang:1:1 */
         printfd(tcp, tcp->u_arg[0]); 	
        /* arg: addr (bind_sockaddr *) */
        /* using decoder from defs/example2.syzlang:5:1 */
         decode_sockaddr(tcp, tcp->u_arg[1], (int) tcp->u_arg[1]); 	
        /* arg: addrlen (int) */
        PRINT_VAL_D((int) tcp->u_arg[2]);
        return RVAL_DECODED;

I also moved the hardcoded decoders into a common file:

    :fd %{ printfd(tcp, $$); %}
    :uid %{ printuid($$); %}
    :gid %{ printuid($$); %}
    :path %{
        if (syserror(tcp)) {
        } else {
            printpath(tcp, $$);
    :string %{
        if (syserror(tcp)) {
        } else {
            printstr(tcp, $$);

Currently, there isn't a way to define a generic decoder (e.g. for types with
options like stringnoz[len] where 'len' is the length of the referred string).

 - Continue working on the code generation
   - Improve on decoder definitions
   - Automatically generate struct decoding for simple structs
 - Incorporate code generation with the build process
 - Finalize CLI arguments, and add usage documentation

-- Srikavin

More information about the Strace-devel mailing list