Je dois obtenir les adresses de début et de fin de la section de texte d’un exécutable. Comment puis-je l’avoir? Je peux obtenir l’adresse de départ à partir du symbole _init ou du symbole _start , mais qu’en est-il de l’adresse de fin? Dois-je considérer l’adresse de fin de la section de text comme la […]
Généralement, les fichiers binarys du programme utilisateur seront chargés à l’adresse basse (généralement autour de 0x400000 ) dans l’espace adresse du programme qui sera spécifié dans le fichier binary elf (dans le cas de Linux). Pouvons-nous forcer un utilisateur binary à se charger à une adresse élevée, éventuellement dans la plage d’adresses de 2GB où […]
Je construis une application intégrée comprenant plusieurs modules de code et une bibliothèque statique. Certaines variables globales sont explicitement placées dans des sections de mémoire dédiées (c’est-à-dire pas la section .data par défaut). L’architecture de la mémoire du processeur est de 4 banques, créant un espace mémoire physique contigu. Dans mon application, seule la 1ère […]
Je suis nouveau dans la programmation de système d’exploitation et je lis un livre qui donne un exemple simple de kernel comme suit: main() { char *video_memory = 0xb8000; *video_memory = ‘X’; } Pour comstackr ce fichier appelé kernel.c, j’utilise MinGW sous Windows 7 comme suit: gcc -ffreestanding -c kernel.c -o kernel.o Cela crée le […]
Je viens tout juste de passer à la version bêta de Xcode 5 avec les outils de ligne de commande du 15 avril 2013 et je vis l’avertissement suivant lors de l’exécution d’une version de cmake lors de la tentative standard de CMakeTestCComstackr.cmake de comstackr un programme de test simple: cmake -version cmake version 2.8.11.2 […]
J’ai le code ASM: extern my_func extern printf extern exit global _start section .data … section .text _start: … call printf … call my_func … call exit et code C: int my_func(int a, int b) { return a+b; } J’utilise fedora sur une machine 64 bits. Je veux que l’exécutable soit 32 bits. Pour les […]
Sous Linux, j’ai créé une bibliothèque partagée qui utilise pthreads et un fichier principal.c qui ne l’utilise pas. libpthread.so apparaît dans un ldd de ma bibliothèque partagée, ce qui est correct. $ ldd libmapreduce.so.1.0 linux-gate.so.1 => (0x0067d000) libpthread.so.0 => /lib/libpthread.so.0 (0x0058c000) […] Mais quand je comstack et lie mon main.c qui n’utilise pas de pthreads […]
J’aimerais écrire un script d’éditeur de liens ressemblant à ceci: SECTIONS { . = 0x0; .startup . : { startup.o(.text) } .text : { *(.text) } .data : { *(.data) } .bss : { *(.bss COMMON) } . = 0x4000; other.text : { other.o(.text) } other.data : { other.o(.data) } other.bss : { other.o(.bss) } […]
J’ai une bibliothèque partagée linux (.so) compilée avec une version spécifique de libc (GLIBC2.4) et je dois l’utiliser sur un système doté d’une version différente de libc. Je n’ai pas de sources pour la bibliothèque en question, donc je ne peux pas recomstackr pour le nouveau système. Est-il possible en quelque sorte de changer les […]
J’essaie de créer un jeu dans lequel vous devez trouver le nombre secret compris entre 1 et 100 et si vous ne le trouvez pas, le programme vous indique s’il est plus grand ou plus petit. Voici le code: #include #include #include int main ( int argc, char** argv ) { int nombreMystere = 0, […]