Jump to content

Heap Corruption em projeto antigo VC6 compilado no VS2019


Pimptech
 Share

Recommended Posts

Posted (edited)

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!

Edited by Pimptech
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...