
On Sat, Sep 18, 2021 at 09:29:27PM +0300, Caeeh wrote:
<div><div>How can the names of functions from the generated executable be hidden/shrinked/erased?</div><div>I tried with -O2 option in GHC, but it does not work. In the binary I found names that are present in the source code. I want to remove them.</div></div>
Did you "strip" the executable? Are the functions in question exported by their module? If you compile the program below, the executable will have the "unstripped" executable with have the string "secretName", but it disappears if you "strip" it (GHC option: -optl-s): module Main (main) where import Data.Maybe import System.Environment secretName :: [String] -> Maybe Int secretName = fmap ((+ 42) . read) . listToMaybe {-# NOINLINE secretName #-} main :: IO () main = secretName <$> getArgs >>= mapM_ print Demo: $ rm foo.o foo.hi; ghc -O2 foo.hs; strings -a foo | grep secretName [1 of 1] Compiling Main ( foo.hs, foo.o ) Linking foo ... Main_secretName_closure Main_secretName_info $ rm foo.o foo.hi; ghc -optl-s -O2 foo.hs; strings -a foo | grep secretName [1 of 1] Compiling Main ( foo.hs, foo.o ) Linking foo ... -- Viktor.