Ir ao conteúdo

Danilo Thiago Pereira

Membro Júnior
  • Posts

    2
  • Cadastrado em

  • Última visita

Reputação

4
  1. Boa noite meu caros! Podem fechar o tópico, consegui solucionar meu problema criando 1 .asm separado para dada situação, reescrevi as funções daquele assembly e linkei ele dentro do projeto! abração pessoal!
  2. Opa meus amigos, boa tarde, todos bem? Espero que sim! Eu estou com um probleminha com um código que estou trabalhando em cima, e gostaria de partilhar com vocês para ver se consigo contornar este problema. - O projeto foi feito em x86 e ficou parado uns 3 anos +- nessa configuração, porém agora resolvi pegar esse projeto da mão de um colega alemão e tentar tocar adiante (sou um entusiasta na área de programação), mas ajustando ele para x64 e compilando normal para .exe Me deparei com o seguinte problema adiante: em x86 no msvst é possível escrever e compilar com assembly embutido e algumas funções e sintaxes são reconhecidas ainda, porém quando vamos para o x64 não conseguimos mais escrever e compilar com o assembly embutido e algumas funções como "naked" não são mais reconhecidas. Meu intento é continuar com o código, a única mudança proválvel seria ajusta-lo para x64. Segue abaixo as 2 partes do código em que me encontro com o problema e junto a elas irei comentar a situaçãoa atual e meu progresso em cima delas, "arranjei" uma "solução" de forma "feia" para uma delas, me encontro receoso, já que não consegui depurar por estar ainda nas análises das linhas do código, e também gostaria (se possível) de uma ideia vinda de profissionais da área e de pessoas com maior experiência para que eu possa tornar a solução para esse problema a melhor possível e não acabar "cheio de emendas aqui e ali".. Para este, o problema está nos assembly pushad e popad (__asm pushad, __asm popad), ainda pensando aqui se seria plausível e funcional fazer um argumento simples e chama-los, já que não consegui ver nenhuma substituição para o assembly ali do pushad e do popad. DWORD WINAPI SendFunc( SOCKET s, char* buf, int len, int flags) { typedef DWORD(WINAPI * p_Send)(SOCKET s, char* buf, int len, int flags); p_Send o_Send = reinterpret_cast<p_Send>(fake_Variable_Send); __asm pushad hexdump(reinterpret_cast<void*>(buf), len,true); __asm popad /*if (buf && len > 6 && buf[0] == 0x04 && buf[1] == 0x02 || buf && len >= 3 && buf[0] == 0x63 && buf[1] == 0x03) return o_Send(s, const_cast<char*>(buf), len, flags);*/ sg = s; return o_Send(s, const_cast<char*>(buf), len, flags); } Enquanto neste, o problema está primeiramente no __declspec(naked) onde a função naked não se aplica mais em x64, e posteriormente na call do __asm (assembly embutido). Bom, depurando do jeito que está ai em x86 vai que é sucesso, mas quando jogo para x64 a sequência de erro aparece, já que o msvst em compilações x64 não aceita o assembly embutido. O que eu fiz então até o momento para tentar contornar? Criei um arquivo .asm e coloquei toda o assembly embutido abaixo dentro do arquivo .asm e linkei ele no projeto (logo mais abaixo). __declspec(naked) void CRC_Hook1() { __asm { cmp eax,0x00400A04 je FAKE cmp eax, 0x00400A05 je FAKE2 cmp eax, 0x00400A06 je FAKE3 cmp eax, 0x00400A07 je FAKE4 cmp eax, 0x00400A00 je FAKE5 cmp eax, 0x00400A01 je FAKE6 cmp eax, 0x00400A02 je FAKE7 cmp eax, 0x00400A03 je FAKE8 lea edi, [edi + 0x00000002] jmp CRC_1Back FAKE: lea eax, fake_Variable_Send lea edi, [edi + 0x00000002] mov dx,[eax] jmp CRC_1Back FAKE2: lea eax, fake_Variable_Send add eax,1 lea edi, [edi + 0x00000002] mov dx, [eax] jmp CRC_1Back FAKE3 : lea eax, fake_Variable_Send add eax,2 lea edi, [edi + 0x00000002] mov dx, [eax] jmp CRC_1Back FAKE4 : lea eax, fake_Variable_Send add eax,3 lea edi, [edi + 0x00000002] mov dx, [eax] jmp CRC_1Back FAKE5 : lea eax, fake_Variable_Recv lea edi, [edi + 0x00000002] mov dx, [eax] jmp CRC_1Back FAKE6 : lea eax, fake_Variable_Recv add eax, 1 lea edi, [edi + 0x00000002] mov dx, [eax] jmp CRC_1Back FAKE7 : lea eax, fake_Variable_Recv add eax, 2 lea edi, [edi + 0x00000002] mov dx, [eax] jmp CRC_1Back FAKE8 : lea eax, fake_Variable_Recv add eax, 3 lea edi, [edi + 0x00000002] mov dx, [eax] jmp CRC_1Back } } arquivo.asm: Link no projeto substituindo o __declspec(naked) void CRC_Hook1(): extern "C" int CRC_Hook1(void);

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!