Een EXE
hoeft niet eens functies te hebben. 't Is gebruikelijk, maar het zou een Finite State Machine implementatie kunnen zijn. Maar zelfs als er functies in zitten, dan is het onwaarschijnlijk dat er een lijst is.
@
chaoscontrol suggereert command-line parameters. Die zijn ongerelateerd.
@
Squ1zZy suggereert een import tabel. Dat zijn de functies die
niet in de EXE zitten, maar die uit een DLL komen. Zie daarvoor de export tabel van de DLL. En nee, een EXE heeft normaliter geen export tabel. (Het formaat ondersteunt het theoretisch, maar dat is alleen omdat DLL's en EXE allebei PE formaat zijn)
Ik ben het wél met .oisyn eens: Wat zou je er mee kunnen? Afgezien van het praktische probleem hoe je die functies technisch zou moeten aanroepen (is nog wel te doen), veel functies kun je niet zomaar aanroepen. Stel dat de EXE in C++ geschreven is, dan kun je de member functies van een class alleen aanroepen nadat de constructor gedraaid heeft, maar niet nadat de destructor gedraaid heeft, en alleen nadat de class statics geïnitialiseerd zijn. Dat zijn normaal gesproken dingen die de compiler voor je regelt, inclusief de argumenten, maar die je nu opeens in assembly mag gaan opknappen.
Zal ik het nog erger maken? Functies heb je in je source code. Een moderne optimizer maakt daar een zooitje van, vanwege performance redenen. Twee functies kunnen samengevoegd worden, één functie kan opgesplitst worden in twee delen (hot/cold split), of in twee varianten. En die optimalisaties kunnen overlappen, dus de grenzen van functies zijn simpelweg vluchtig. Met x64 exception handling is het zelfs geen kwestie van optimizers, exception handlers zijn
altijd gesplitst. Tenzij de optimizer ze natuurlijk weer samenvoegt.
Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein