HelderPereira Posted October 22, 2019 at 01:17 AM Share Posted October 22, 2019 at 01:17 AM Onde se encontra, quando visualizado por editor hexadecimal, o endereço para onde será carregado a imagem do executável na memória? Ou isso é definido pelo loader em tempo de carga? No caso do windows se uso o Detect It Easy ele mostra o endereço de carga do executável na memória, mas encontrar esta informação quando visualizo o código via um editor hexadecimal. Alguém poderia me ajudar? Link to comment Share on other sites More sharing options...
Moderators Leandro Fróes Posted October 24, 2019 at 03:29 PM Moderators Share Posted October 24, 2019 at 03:29 PM Fala Helder, blz? Isso é definido pelo próprio formato do arquivo e é possível sim achar só olhando pro dump em hexa. Da certo "trabalho" ficar procurando os campos olhando direto pro hexa, mas tenho que dizer, é super divertido e se aprende muito ?. Bom, olhando para o dump do arquivo em hexa a primeira coisa que vemos é o DOS Header, que representa os primeiros 64 bytes do arquivo e nele há um campo chamado e_lfanew, que define o offset para a assinatura PE. Esta assinatura é o primeiro campo de outro header chamado NT Header: typedef struct _IMAGE_NT_HEADERS { DWORD Signature; IMAGE_FILE_HEADER FileHeader; IMAGE_OPTIONAL_HEADER OptionalHeader; } IMAGE_NT_HEADERS, *PIMAGE_NT_HEADERS; Como podemos ver a assinatura PE tem o tamanho de uma DWORD, isto é, 4 bytes de acordo com a Microsoft e os campos seguintes são: um outro cabeçalho completo (os bytes dele em si) chamado File Header: typedef struct _IMAGE_FILE_HEADER { WORD Machine; WORD NumberOfSections; DWORD TimeDateStamp; DWORD PointerToSymbolTable; DWORD NumberOfSymbols; WORD SizeOfOptionalHeader; WORD Characteristics; } IMAGE_FILE_HEADER, *PIMAGE_FILE_HEADER; E logo depois um cabeçalhado chamado Optional Header, que é um dos mais importantes do formato PE. Este cabeçalho possui dentro dele um campo chamado ImageBase, que é justamente o que você está procurando. Eu lembro que você parecia estar estudando pelo tutorial que eu fiz sobre o formato PE aqui, certo? No post de número 3 do tutorial eu falo sobre os campos do NT Header e do Optional Header. De qualquer forma, saiba que é sim possível, é só questão de ler o formato da struct na documentação e ir contando byte a byte até chegar lá!! Abs Link to comment Share on other sites More sharing options...
HelderPereira Posted October 25, 2019 at 01:33 PM Author Share Posted October 25, 2019 at 01:33 PM Obrigado Leandro, encontrei... e sim estou lendo os seus posts... espero daqui a um tempo também contribuir respondendo a dúvidas neste fórum Link to comment Share on other sites More sharing options...
Recommended Posts
Archived
This topic is now archived and is closed to further replies.