2016-05-31 12 views
1

In meinem Code entfernen, ich habe einen besonderen Abschnitt und einige Daten in ihm: Teil des binären BildesMSVC Abschnitt von binären

#pragma section("dead",read,discard) 
__declspec(allocate("dead")) 
static const char dead_str[] = "DEAD"; 

doSomething(dead_str); 

Diesen Abschnitt mit dem Programm, oder kann nicht geladen werden kann aber nach wie vor . Was ich tun möchte, ist es vollständig aus dem Bild zu entfernen, so dass es garantiert nicht geladen wird, so dass es nicht in der Binärdatei gefunden werden kann. Grundsätzlich möchte ich:

strings myprogram.exe | grep DEAD 

haben keine Treffer. Das Programm stürzt ab, wenn ich versuche, auf die Zeichenfolge zu verweisen.

In GNU, würde ich tun:

objcopy --remove-section=dead myprogram.exe 

und objcopy die Cygwin macht eigentlich das, aber verdirbt die ausführbare Datei, so kann es keine Last mehr. von MSVC kann nur die Flags für den Abschnitt ändern, aber es bleibt im Bild. Und Linker-Optimierungen werden dead_str nicht entfernen, da es in doSomething() referenziert wird.

Gibt es einen Weg (idealerweise als Linker-Flag) Ich kann einen ganzen Abschnitt aus PE/COFF-Dateien entfernen?

Antwort

0

Ich suchte auch nach einer Linker-Einstellung, aber es scheint, dass dies mit MSVC überhaupt nicht möglich ist. Was Sie tun können, ist entweder schreiben Sie Ihr eigenes Werkzeug, um Abschnitte aus PE-Dateien zu strippen, oder verwenden Sie zum Beispiel CFF Explorer.