Ir para conteúdo

Heap Corruption em projeto antigo VC6 compilado no VS2019


Pimptech

Posts Recomendados

Olá nobres colegas! Como estão ?

Eu estou tendo uma certa dificuldade e nooberismo na tentativa de achar como solucionar esse infortúnio problema. Estou "modernizando" um programa (projeto) que foi inicialmente feito em VC6. Não precisei fazer MUITAS modificações para conseguir compilar com VS2019, mas fiz algumas. Consegui compilar e tudo mais. Porém, tem alguns poréns.

  1. Tem algumas LIBs que não possuo source code. Assim como sua respectiva DLL. De fato linkage é uma coisa bem chata. ?
    1. Se alguém tiver alguma indicação de documento bem explicado sobre como o VC++ linka .LIB x .DLL, e qual o principal motivo de ter que ser a mesma .DLL dá .LIB.
    2. Fiz alguns testes com esse programa e ele simplesmente não funciona sem algumas DLLs (outdated-antigas do VC6). Por exemplo não funciona com msvcirt.dll versão do Windows 10. Não fiz uma análise muito aprofundada ainda, meu foco incial é fazer ele rodar totalmente para depois ir mexendo, atualizando e reescrevendo códigos.
  2. O programa dá erro de HEAP CORRUPTION, porém só em modo normal Windows10. Em compatibilidade com Windows 8, ou seja usando SysWOW64, ele funciona normalmente (até onde eu testei, sem heap corruption).
    1. Aqui ele tá dando corruption (ALETORIAMENTE) em "::operator new" e até MALLOC. Estava tentando debugar pra ver onde o erro ocorre. Tive problemas em debugar via x64dbg, mesmo conseguindo reverter, ainda sim é bem chato na hora de debugar multithreading. O erro acontece no RtlEnterCriticalSection, não sei ainda o motivo. Não consegui chegar em uma conclusão definitiva. Não achei documentação dessa "API", para entender todos os trâmites envolvidos no HeapAlloc e seus derivados (principalmente ntdll), para resolver esse problema em específico. Aceito fontes, dicas e sugestões. :]
    2. Em Windows 10 o heap corruption não acontece nas primeiras vezes, depois de 2 - 5 vezes ele começa a dar corruption com mais consistência.
      1. O programa tem muito código. Muito mesmo. Então não sei se pode ser lixo de memória que ficou para trás (deletes mal feitos ou não feitos), mas isso quer dizer que o windows usaria o mesmo espaço de memória para fazer o LOAD do PE, o que não me parece algo que ele faça (mas támbém não sou PRO, então não posso afirmar), se alguém souber me dá um help aê :].


Claro que isso é um dos problemas que estou tento com esse programa. Contudo fiquei bem confuso em entender por qual motivo esse problema acontece, e qual motivo ele não acontece na compatibilidade Windows 8, afinal foi compilado no Windows 10 usando VS2019. Na hora de entrar no malloc ele usa ucrtbased.dll.. Ou seja, tá tudo atualizado. Não é uma coisa complexa, é um HeapAlloc... E o erro acontece na inicialização dele e de suas variáveis de ambiente, criando coisas, não é um problema que acontece depois de um tempo rodando.

Edit ------------------------

Aproveitar o tópico. Se alguém souber o que pode fazer o mouse e keyboard ficar lento durante o debugging. Esse programa usa Direct Input.
Quando começo a debugar via Visual Studio e fico clicando fora da criação do Window, ele funciona normal. Se eu inicio o debug e espero ele criar a janela e HITAR o breakpoint o mouse ficar travando, assim como o keyboard.

 

Bom se alguém for bom em vc++ e puder me ajudar, ficarei grato. Abs!

Editado por Pimptech
Link para o comentário
Compartilhar em outros sites

Participe da conversa

Você pode postar agora e se cadastrar mais tarde. Se você tem uma conta, faça o login para postar com sua conta.

Visitante
Responder

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emojis são permitidos.

×   Seu link foi automaticamente incorporado.   Mostrar como link

×   Seu conteúdo anterior foi restaurado.   Limpar o editor

×   Não é possível colar imagens diretamente. Carregar ou inserir imagens do URL.

  • Quem Está Navegando   0 membros estão online

    • Nenhum usuário registrado visualizando esta página.
×
×
  • Criar Novo...