Je piratais printf() de la glibc dans l'un de mes projets et j'ai rencontré un problème. Pourriez-vous s'il vous plaît donner quelques indices? Et une de mes préoccupations est pourquoi la même solution pour malloc/free fonctionne parfaitement! Comme ci-joint, "PrintfHank.c" contient ma propre solution de printf() qui sera préchargé avant la bibliothèque standard; et "main.c" sort juste une phrase en utilisant printf(). Après avoir modifié deux fichiers, j'envoyaient des commandes suivantes:Problèmes lors de l'injection dans printf à l'aide de la méthode LD_PRELOAD
- main.c compilation gcc -Wall -o principale main.c
- Créer ma propre bibliothèque gcc -Wall -fPIC -shared -o PrintfHank.so PrintfHank.c de
- test de la nouvelle bibliothèque LD_PRELOAD = » monchemin de $/PrintfHank.so » monchemin de $/main
Mais j'ai reçu "bonjour monde" au lieu de "dans mon propre printf" dans la console. Lors du piratage de fonctions malloc/free, c'est bon.
Je me connecte à mon système en tant que "root" et j'utilise 2.6.23.1-42.fc8-i686. Tous les commentaires seront très appréciés !!
main.c
#include <stdio.h>
int main(void)
{
printf("hello world\n");
return 0;
}
PrintfHank.c
#ifndef _GNU_SOURCE
#define _GNU_SOURCE
#endif
#include <stdio.h>
#include <dlfcn.h>
static int (*orig_printf)(const char *format, ...) = NULL;
int printf(const char *format, ...)
{
if (orig_printf == NULL)
{
orig_printf = (int (*)(const char *format, ...))dlsym(RTLD_NEXT, "printf");
}
// TODO: print desired message from caller.
return orig_printf("within my own printf\n");
}
Yat-il un moyen de désactiver gcc de changer printf() de fonction puts()? – bawejakunal