# AArch64 machine language Linux, 48 bytes
     0: d2800020 mov x0, #0x1     # stdout is fd=1
     4: d28001a2 mov x2, #0xd     # length of string
     8: 94000005 bl  1c           # put addr of string to x30
     c: 6c6c6548 "Hello, World!"
        77202c6f
        646c726f
        00000021
    1c: aa1e03e1 mov x1, x30      # put addr of string to x1
    20: d2800808 mov x8, #0x40    # select write() syscall
    24: d4000001 svc #0x0         # syscall
    28: d2800bc8 mov x8, #0x5e    # select exit() syscall
    2c: d4000001 svc #0x0         # syscall
To try it out on an AArch64 Linux machine or Android device with Termux, compile and run the following C program. You may need to pass the `-zexecstack` argument to the compiler.

    const char main[]=" \0\x80\xd2\xa2\1\x80\xd2\5\0\0\x94Hello, World!\n\0\0\xe1\3\x1e\xaa\b\b\x80\xd2\1\0\0\xd4\xc8\v\x80\xd2\1\0\0\xd4"

Edit: Added comments