Il y a deux zones dans un executable : la partie statique et la partie dynamique.
La partie statique est constituée du code et des chaines de caracteres fixes (definies a l'avance dans le code). Elle est en lecture seule, si tu tentes d'y ecrire, segfault.
La partie dynamique est composé des allocations mémoires faites durant l'execution, ca c'est en lecture/ecriture.
petit exemple :
int main(int argc, char *argv[])
{
char* text = "hello";
text[0] = 'H';
return (0);
}
ca ca segfaulte grave.
Il existe une option de gcc pour forcer la mise en lecture/ecriture de la zone statique, mais c'est fortement deconseillé.
Par contre il existe une méthode dite d'injection de code qui consiste a inserer un thread dans un processus. comme la liste des processus est dans la zone dynamique (il ne sont pas definis a l'avance en nombre) , on peut y inserer un nouveau dont le code est dans la zone de données ou ailleurs. la ca devient moins cool car c'est pas visible au premier coup d'oeil.
# du coté de elf32 ...
Posté par vincent LECOQ (site web personnel) . En réponse au journal question : est-ce que la zone de code est modifiable. Évalué à 9.
Il y a deux zones dans un executable : la partie statique et la partie dynamique.
La partie statique est constituée du code et des chaines de caracteres fixes (definies a l'avance dans le code). Elle est en lecture seule, si tu tentes d'y ecrire, segfault.
La partie dynamique est composé des allocations mémoires faites durant l'execution, ca c'est en lecture/ecriture.
petit exemple :
ca ca segfaulte grave.
Il existe une option de gcc pour forcer la mise en lecture/ecriture de la zone statique, mais c'est fortement deconseillé.
Par contre il existe une méthode dite d'injection de code qui consiste a inserer un thread dans un processus. comme la liste des processus est dans la zone dynamique (il ne sont pas definis a l'avance en nombre) , on peut y inserer un nouveau dont le code est dans la zone de données ou ailleurs. la ca devient moins cool car c'est pas visible au premier coup d'oeil.