Sono tutti corretti, mostrano solo dimensioni diverse.
lsmostra la dimensione del file (quando lo apri e lo leggi, ecco quanti byte otterrai)dumostra l'utilizzo effettivo del disco che può essere inferiore alla dimensione del file a causa di buchisizemostra la dimensione dell'immagine di runtime di un oggetto/eseguibile che non è direttamente correlata alla dimensione del file (bss non usa byte nel file non importa quanto grande, il file può contenere informazioni di debug che non fanno parte dell'immagine di runtime , ecc.)
Se vuoi sapere quanta RAM/ROM occuperà un eseguibile escludendo l'allocazione dinamica della memoria, size ti fornisce le informazioni di cui hai bisogno.