Why does strace open, read 512 bytes, and THEN fstat libncurses?

The first 512 bytes contain the header which is needed to identify the file type, target platform, version, and so on. Once the header is read, the code then jumps to the handler for this particular type of file.