erhöht die ausführbare Binärgröße

7

Abstraktes Problem: Ich habe einen Code in C. Nach dem Kompilieren hat die ausführbare Datei 604 KB. Ich möchte, dass es größer wird, sagen wir 100 MB.

Wie erreichen Sie das?

Ich könnte eine Zeichenfolge deklarieren, um die binäre Größe zu erhöhen, aber gibt es eine skalierbare Lösung. Das heißt, ich möchte die kompilierte Größe um N Bytes erhöhen, ohne den Quellcode um N Bytes zu erhöhen.

%Vor%

Anwendungsfall: Ich entwickle Firmware und testet die Remote-Firmware-Upgrade-Funktion. Ich würde gerne sehen, wie es sich verhält, wenn die Firmware groß und schwer ist.

    
mjjaniec 20.04.2017, 13:16
quelle

3 Antworten

13

Dies erstellt eine ausführbare Datei von 100 MB, wenn sie mit gcc:

kompiliert wird %Vor%

Wenn Sie das Array außerhalb von main definieren, blasen Sie den Stack nicht. Durch die Verwendung des Arrays wird es von gcc nicht optimiert.

    
John Coleman 20.04.2017, 13:37
quelle
8

GCC-spezifische Variante:

%Vor%

Wenn Sie das Attribut 'used' verwenden, müssen Sie es nicht mehr berühren, um zu verhindern, dass es weg optimiert wird. Dennoch muss ein Nicht-Alles-Null-Initialisierer wie in John Colemans Lösung angewendet werden.

    
Aconcagua 20.04.2017 13:50
quelle
1

Sie müssen ein globales Array mit allen explizit initialisierten Elementen erstellen. Die Elemente sollten randomisiert sein, ansonsten optimiert der Compiler wahrscheinlich die Initialisierungsliste im kompilierten Code.

Sie benötigen zuerst ein separates Programm, um Ihr Array zu generieren:

%Vor%

Führen Sie dies aus und leiten Sie die Ausgabe in eine Datei um:

%Vor%

Dann bekommst du array.c, das ungefähr so ​​aussieht:

%Vor%

Dann fügst du das in deine Hauptquelle ein:

%Vor%     
dbush 20.04.2017 13:51
quelle

Tags und Links