Ir ao conteúdo

Assembly Erro (C0000005) ao executar código de maquina arbitrário na memória no Windows


Ir à solução Resolvido por Rieidi,

Posts recomendados

Postado

Estou executando o seguinte código em assembly:
 

bits 64
mov rax, 132
add rax, 123

Ele não deve dar nenhum erro de memória pois a sintaxe está correta, mas nem tudo são flores eu estou usando o NASM com o seguinte code:
 

nasm -f bin c.asm -o c.bin

depois estou tranformando resultado em bits para depois usar o C para executar esse código de maquina como se fosse uma função mais sempre recebo o mesmo erro:

EXCEPTION_DEBUG_INFO:
           dwFirstChance: 1
           ExceptionCode: C0000005 (EXCEPTION_ACCESS_VIOLATION)
          ExceptionFlags: 00000000
        ExceptionAddress: a.00007FF71C65F009
        NumberParameters: 2
ExceptionInformation[00]: 0000000000000001 Write
ExceptionInformation[01]: 00000000000000FF Inaccessible Address
Exceção de primeira chance em 00007FF71C65F009 (C0000005, EXCEPTION_ACCESS_VIOLATION)!

código C usado:
 


#include <windows.h>

__declspec(allocate(".shellcode"))
char shellcode[] = {0b10111000, 0b10000100, 0b00000000, 0b00000000, 0b00000000, 0b01001000, 0b10000011, 0b11000000, 0b01111011};

int main(void) {
    DWORD oldProtect;
    VirtualProtect(shellcode, sizeof(shellcode), PAGE_EXECUTE_READWRITE, &oldProtect);

    int (*run)(void) = (int (*)(void))shellcode;

    return run();
}

 

Informações sobre o sistema:

 

Windows 10 64 bits

x86-64

 

  • Amei 1
  • Solução
Postado

Foi resolvido, era usar o GCC e resolvia tudo. para quem quiser testar ele retorna o valor 3:
 

#include <stdio.h>

__attribute__((section(".text.sc")))
unsigned char sc[] = {0b10111000, 0b00000001, 0b00000000, 0b00000000, 0b00000000, 0b01001000, 0b10000011, 0b11000000, 0b00000011, 0b11000011};

int main( void )
{ int (*f)(void) = ( int (*)(void) )sc;
  printf( "%d\n", f() ); }

 

  • Obrigado 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...