When reverse engineering a binary, the analyst must rst understand the semantics of the binary's functions through either manual or automatic analysis. Manual semantic analysis is time-consuming, because abstractions provided by high level languages, such as type information, variable scope, or comments are lost, and past analyses cannot apply to the current analysis task. Existing automated binary analysis tools currently su er from low accuracy in determining semantic function identi cation in the presence of diverse compilation environments.We introduce So ware Ethology, a binary analysis approach for determining the semantic similarity of functions. So ware Ethology abstracts semantic behavior as classi cation vectors of program state changes resulting from a function executing with a specied input state, and uses these vectors as a unique ngerprint for identi cation. All existing semantic identi ers determine function similarity via code measurements, and su er from high inaccuracy when classifying functions from compilation environments di erent from their ground truth source. Since So ware Ethology does not rely on code measurements, its accuracy is resilient to changes in compiler, compiler version, optimization level, or even di erent source implementing equivalent functionality.Tinbergen, our prototype So ware Ethology implementation, leverages a virtual execution environment and a fuzzer to generate the classi cation vectors. In evaluating Tinbergen's feasibility as a semantic function identi er by identifying functions in coreutils-8.30, we achieve a high .805 average accuracy. Compared to the state-of-the-art, Tinbergen is 1.5 orders of magnitude faster when training, 50% faster in answering queries, and, when identifying functions in binaries generated from di ering compilation environments, is 30%-61% more accurate.