2010-11-25 2 views
4

Je dois utiliser Visual C++ pour créer un serveur Web Apache personnalisé. Voici l'objectif que j'essaie d'atteindre: spécifier certaines fonctions ou données dans le code source d'Apache, et les mettre dans des sections séparées et de 4k pages alignées (pas .text .data .bss) du fichier output .exe.Comment faire pour regrouper certaines fonctions dans une nouvelle section de mémoire de sortie .exe dans Visual C++

La solution de garde-robe que je peux trouver en ligne est d'utiliser/Gy options de compilateur pour compiler chaque fonction dans différents COMDATs, puis utiliser les options/ORDER linker pour mettre les COMDAT dans un ordre prédéterminé. Cependant, il s'agit juste de réorganiser à l'intérieur d'une section, de ne pas modifier la disposition de la section dans la sortie .exe ou de créer une nouvelle section. Sous Linux, je peux utiliser l'attribut du compilateur "section" et le script de l'éditeur de liens pour atteindre mon objectif. Existe-t-il une solution équivalente dans Visual C++? Merci beaucoup :-)

Répondre

3

#pragma code_seg vous permet de spécifier le segment dans lequel le code sera placé. En plus de pouvoir spécifier un nom, le compilateur conserve une pile de noms afin que vous puissiez appuyer sur l'état actuel et le faire apparaître si vous le souhaitez.

+0

Après avoir mis des fonctions et des données dans différentes sections alignées sur la page, puis-je les mettre plus tard dans la zone de mémoire consécutive? Comment puis je faire ça? Par exemple, disons que j'ai des sections text1, text2, data1 dans les sections a.o, text3, text2, data2 dans b.o, et a.o, b.o est lié pour créer c.exe. Comment puis-je m'assurer que la disposition de la mémoire dans c.exe est (text1, text2, text3, data1, data2, .text, ........)? – cyclone

+0

@cyclone: ​​Je ne suis pas du tout sûr que vous le pouvez. Si cela était supporté, le fichier de définition de module serait l'endroit évident pour le supporter - mais ce n'est pas le cas. –

Questions connexes