Den lör 15 mars 2025 kl 09:17 skrev Janne Johansson <icepic...@gmail.com>:
>
> This might also help:
> https://flak.tedunangst.com/post/dude-where-are-your-syscalls
>

And the text hints at it, but the exact trick to figure out the
offsets to put in the "what" ELF section is to compile and link it
once, then run

$ llvm-objdump hello3 -d|grep -B1 svc
   1047c: d2800028     mov x8, #0x1
   10480: d4000001     svc #0
--
   104c8: d2800088     mov x8, #0x4
   104cc: d4000001     svc #0

so that you can edit your source to:

struct whats {
        unsigned int offset;
        unsigned int sysno;
} happening[] __attribute__((section(".openbsd.syscalls"))) = {
        { 0x104cc, 4 },
        { 0x10480, 1 },
};

and recompile and link again, then it works. A slight reshuffling of
the "not-C" code might also be needed, or the compiler will whine at
you for calling stuff without declaration of the functions. Binary
size down to some 2600 bytes after "strip"ing, and it's now "free" of
libc. Also, it is rather cumbersome to double-compile all the time.

-- 
May the most significant bit of your life be positive.

Reply via email to