Ir ao conteúdo

Posts recomendados

Postado

Uma das possível implementações para isso seria verificar se o endereço da variável está em algum modulo do processo ou dentro do próprio executável, para fazer isso basta usar a winapi VirtualQuery para pegar o endereço da pagina e verificar se essa pagina está com algum modulo registrado no processo(para isso vou usar a winapi GetModuleFileNameA), um pequeno exemplo:

bool dinamicamente_alocada( void* endereco )
{
    MEMORY_BASIC_INFORMATION mbi = { 0 };

    // VirtualQuery para pegar o endereço de pagina onde essa memória foi alocada
    if ( VirtualQuery( endereco, &mbi, sizeof( mbi ) ) )
    {
        char nome_modulo[ 256 ] = { 0 };

        // Tenta pegar o nome do modulo, se o retorno da GetModuleFileNameA for 0, é porque o modulo não está registrado, então essa memória não está no stack e sim no heap
        return ( GetModuleFileNameA( static_cast< HMODULE >( mbi.AllocationBase ), nome_modulo, sizeof( nome_modulo ) ) == 0 );
    }
    return false;
}

int main()
{
    char        pilha[ 0x1000000 ];                                     // Memória alocada no stack
    char*       dinamicamente = new char[ 0x1000000 ];                  // Memória alocada no heap

    std::cout << dinamicamente_alocada( pilha ) << std::endl;
    std::cout << dinamicamente_alocada( dinamicamente ) << std::endl;

    // Como não vamos mais precisar dessa memória liberamos ela
    delete[] dinamicamente;

    return 0;
}

 

Saída:

0

1

 

Não esqueça de incluir a biblioteca da VirtualQuery e GetModuleFileNameA(#include <Windows.h>)

  • Obrigado 1
  • Amei 1

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!