Endereços de função c ++ saindo diferentes na biblioteca de criação de perfil anexada do que na base de código do assunto

Eu escrevi um instrumentador em C ++ para registrar as funções de entrada e saída ativando as chamadas de entrada e saída. Está funcionando como deveria com uma base de código herdada. No entanto, ao conectar-se a um projeto que baixei do git, os endereços de funções que eu salvo em uma variável externa no código do assunto, eles estão saindo diferentes na biblioteca de criação de perfil. Isso está atrapalhando a comparação do ponteiro de função entre as funções conectadas e salvas.

Endereço da função no arquivo principal do código de assunto, o ponto de interrupção está dentro da função de gancho _penter no código do criador de perfil atualmente

A mesma entrada está mostrando um endereço diferente com um "_" que precede o nome da função, no código do criador de perfil

Não tenho ideia de como está mudando os endereços e quero saber se estou fazendo algo errado.

Do jeito que estou fazendo isso, tenho uma matriz externa de ponteiros de função (e seus nomes) que é inicializada com referências de funções de código de assunto no arquivo principal do assunto (onde todas as funções estão disponíveis). Na função de gancho (_penter) da biblioteca, recebo o endereço da função que acabou de inserir. Por isso, comparo-o com os endereços na matriz externa e, se for uma correspondência, registro a função inserida.

SNIPPET FROM PROFILE.H (criador de perfil)

extern Signature FuncTable[3000]; 

SNIPPET FROM PROFILE.CPP (criador de perfil)

void _stdcall EnterFunc0(unsigned * pStack)
{
    void      * pCaller;
    pCaller = (void *)(pStack[0] - 5); // the instruction for calling _penter is 5 bytes long
    Signature * funct = FuncTable; //the table that has references to functions and their names
    funct = FuncTable;
    while (funct->function)
    {
        //const BYTE * func = (const BYTE *)funct->function;
        if ((void *)(pStack[0] - 5) == (void *)(funct->function))
        {
            int a = 0;
            linesBuffer = linesBuffer + "Entering " + funct->signature + ";";
            linesBuffer = linesBuffer + "\n";
            WriteToFile(false); //function buffers 100kb before writing
            break;
        }
        funct++;
    }
}
extern "C" __declspec(naked) void __cdecl _penter()
{
    _asm
    {
        pushad              // save all general purpose registers
            mov    eax, esp     // current stack pointer
            add    eax, 32      // stack pointer before pushad
            push   eax          // push pointer to return address as parameter to EnterFunc0

            call   EnterFunc0

            popad               // restore general purpose registers
            ret                 // start executing original function
    }
}

SNIPPET FROM main.c (arquivo principal do código do assunto)

#include "../Profile/Profile.h"
Signature FuncTable[] = {
    { (int)TetrisView_ProcessPauseMenu, "TetrisView_ProcessPauseMenu" },
    { NULL }
};

questionAnswers(1)

yourAnswerToTheQuestion