Je suis en train d'effectuer un reverse engineering d'un exécutable Windows. J'ai trouvé une classe que je veux utiliser à partir d'un code que j'injecte dans l'exécutable (thread différent, propre pile). Comment procéder pour déclarer une telle classe, des adresses de méthodes données et une structure de variables membres?Utilisation de classes non documentées en C++
Par exemple, disons que je trouve une classe appelée foo, avec son constructeur @ 0x4012D30 et une fonction doTheMario @ 40125D4. Je sais aussi qu'il contient trois DWORD de données privées. Étant donné que les deux méthodes sont _thiscalls, je déclare une classe comme si dans mon code:
class GuessedFoo {
private:
int bar;
char *cafebabe;
float deadbeef;
public:
GuessedFoo(int a, int b);
void doTheMario();
};
Maintenant, c'est une classe parfaitement dandy, mais est maintenant il un moyen de faire le compilateur/éditeur de liens lier les méthodes de classe à les deux adresses précédentes que j'ai indiquées? Bien sûr, je peux écrire un wrapper asm pour convertir un stdcall en thiscall pour chaque méthode que j'ai besoin d'utiliser, puis utiliser structs au lieu de classes, mais il doit y avoir un meilleur moyen.
J'utilise gcc/g ++ pour le moment, mais je peux passer à VC++ (depuis l'assembleur en ligne de gcc me donne des maux de tête de toute façon).
Vous pouvez utiliser la syntaxe intel dans GCC avec '-masm = intel' et' .intel_syntax noprefix', si la mémoire est là ... –
Oui, mais même la syntaxe GAS ressemblant à un puke n'est rien par rapport à la façon dont vous devez tripoter autour lors de la liaison des variables de pile et des arguments du code C/C++ avec l'assemblage en ligne. Avec le bloc '__asm {}' de VC++, tout cela est tellement plus facile. – Serge