Vous pouvez créer une fonction wrapper.
int the_real_function (unsigned int a, unsigned int b)
{
//stuff
return(something);
}
Créer quelques lignes assembleur:
function_name:
save registers if needed
grab the return address here
if passed on stack copy parameters
call the_real_function
if return is stack based place it where needed
restore registers if needed
return
Pas vrai code asm évidemment. La fonction que vous souhaitez inspecter serait renommée, alors l'asm aurait le nom de la fonction, compiler et lier et tous les appels à la fonction passent par le wrapper. Pour écrire ce qui précède, vous devez connaître la convention d'appel pour cette cible, le compilateur, les options du compilateur, etc.
vous ne pouvez pas génériquement. veuillez spécifier l'architecture, le bras, le mips, le x86, etc. C'est un problème très spécifique au compilateur. Je suppose que c'est une fonction asm que vous écrivez, etc? S'il vous plaît mettre plus de détails dans la question. –
en utilisant x86, existe-t-il de bonnes méthodes pour cela? Quelle est la meilleure façon de s'y prendre? – codrgi
en supposant que l'adresse de retour est la dernière chose sur la pile et vous pouvez utiliser le pointeur de la pile pour l'examiner (en supposant que le pointeur de la pile n'a pas été modifié pour une pile) ... alors examinez-le ... besoin d'utiliser l'assemblage en ligne ou écrire la fonction à la main pour éviter un autre appel. Le contenu de la pile et les cadres de pile créés sont tous spécifiques au compilateur pour ce code ce jour-là, vous ne pouvez pas le faire de manière générique, vous devez savoir comment le compilateur a créé cette fonction spécifique. Ou encore mieux, créez vous-même la fonction. –