2010-11-25 6 views
4

Ich muss Visual C++ verwenden, um einen benutzerdefinierten Apache-Webserver zu erstellen. Hier ist das Ziel, das ich erreichen möchte: Geben Sie einige der Funktionen oder Daten im Apache-Quellcode an und fügen Sie sie in separate und 4 k Seiten ausgerichtete Abschnitte (nicht .text .data .bss) der .exe-Ausgabedatei ein.So gruppieren Sie einige Funktionen in einem neuen Speicherabschnitt von .exe-Ausgabe in Visual C++

Die Schranklösung, die ich online finden kann, ist Verwendung/Gy Compiler-Optionen, um jede Funktionen in verschiedenen COMDATs zu kompilieren, und verwenden Sie dann/ORDER Linker-Optionen, um die COMDATs in einer vorgegebenen Reihenfolge. Es wird jedoch nur innerhalb eines Abschnitts neu angeordnet, wobei das Abschnittlayout in der EXE-Ausgabe nicht geändert oder ein neuer Abschnitt erstellt wird. Unter Linux kann ich das Compiler-Attribut "section" und das Linker-Skript verwenden, um mein Ziel zu erreichen. Gibt es eine äquivalente Lösung in Visual C++? Vielen Dank :-)

Antwort

3

#pragma code_seg können Sie das Segment angeben, in dem der Code platziert wird. Neben der Möglichkeit, einen Namen anzugeben, behält der Compiler einen Stapel von Namen bei, sodass Sie den aktuellen Status bei Bedarf verschieben und löschen können.

+0

Nachdem ich Funktionen und Daten in verschiedene seitenausgerichtete Abschnitte eingefügt habe, kann ich sie später in den konsekutiven Speicherbereich einfügen? Wie kann ich das machen? Angenommen, ich habe die Abschnitte text1, text2, data1 in den Abschnitten a.o, text3, text2, data2 in b.o und a.o, b.o ist verlinkt, um c.exe zu erstellen. Wie kann ich sicherstellen, dass das Speicherlayout in c.exe (Text1, Text2, Text3, Daten1, Daten2, Text, .......) ist? – cyclone

+0

@cyclone: ​​Ich bin überhaupt nicht sicher, dass Sie können. Wenn dies unterstützt wird, wäre die Moduldefinitionsdatei der offensichtliche Ort, um sie zu unterstützen - tut es aber nicht. –

Verwandte Themen