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?