Gabriel de Lima Postado Fevereiro 10, 2019 em 19:44 Compartilhar Postado Fevereiro 10, 2019 em 19:44 Eu estou fazendo uns testes, eu fiz um código super simples: #include <Windows.h> #include <stdio.h> void func_001(){ if (IsDebuggerPresent() == 1){ printf("Debugger Ativo.\n"); }else{ printf("Debugger nao ativo.\n"); } } int main(){ while(true){ func_001(); } return 0; } Ele só tem um loop em um IsDebuggerPresent, eu queria saber como faço para não acontecer o loop? No IDA: IsDebuggerPresent: http://prntscr.com/mj8sqp Main com o loop: http://prntscr.com/mj8t4b no x64dbg: Main + Func_001: http://prntscr.com/mj90hp quero muito saber como fazer para dar um break no while (mas ja que é uma CALL acho que não tem como.... até pq sou mt leigo) Link para o comentário Compartilhar em outros sites More sharing options...
Visitante gnoo Postado Fevereiro 10, 2019 em 22:04 Compartilhar Postado Fevereiro 10, 2019 em 22:04 ola @Gabriel de Lima espero que esteja tudo bem contigo :) Olha eu não consigo de momento dar-te um código como exemplo porque estás a usar headers do windows que eu não tenho no meu sistema. Mas o que te posso dizer é que o teu problema está na tua lógica, tu quando defines a função func_001() , essa função tem retornar um valor para que ao chamar essa função na função main() tu possas comparar esse valor numa estrutura de decisão e se essa comparação for verdadeira então chamas o break para interromper esse ciclo de repetição, ou seja dentro do teu cico while está a faltar uma comparação entre dois valores um deles retornado fa tua função func_001(). Vou deixar este código para ver se perceber o que quero dizer e se consegues estruturar o teu raciocínio... #include<stdio.h> int soma(void){ int num1 = 4, num2 = 3, soma_numeros; soma_numeros = num1 + num2; return soma_numeros; }; int main(void){ int x; int total = soma(); while( x < 10){ printf("%d\n", x); x++; if(x == total){ break; } } }; eu penso que seja essa a solução mas eu não sou especialista em C, talvez alguém tenha outro tipo de abordagem que eu desconheço. Abraço. Link para o comentário Compartilhar em outros sites More sharing options...
void_ Postado Fevereiro 10, 2019 em 22:31 Compartilhar Postado Fevereiro 10, 2019 em 22:31 Eu não programo em C no Windows ; na verdade, eu não uso Windows, então não vou poder entrar em detalhes sobre o conteúdo de Windows.h, mas o erro aí foi claramente não estabelecer uma condição de parada no loop while. Uma vez que a condição sempre é verdadeira, ela nunca irá terminar, pois nunca se tornará falsa. Eu escreveria esse código da seguinte forma: #include <Windows.h> #include <stdio.h> int main(){ while(true){ if (IsDebuggerPresent() == 1) { printf("Debugger Ativo.\n"); break; } else printf("Debugger nao ativo.\n"); } return 0; } Fazendo uso do break com uma comparação condicional (if), você cria uma exceção no fluxo de execução do programa, dando uma chance da condição se tornar falsa e encerrar o loop de while. Note que é interessante você colocar em else uma função que permita verificar se em algum momento IsDebuggerPresent() muda de 0 para 1 e em caso negativo, faça algo para mudar esse valor, senão você verá um flood constante de "Debbuger não ativo" na tela. Link para o comentário Compartilhar em outros sites More sharing options...
Gabriel de Lima Postado Fevereiro 10, 2019 em 23:38 Autor Compartilhar Postado Fevereiro 10, 2019 em 23:38 @void_ @gnoo vcs não entenderam '-' eu estava falando parar loop pelo x64dbg, isto é possivel? Link para o comentário Compartilhar em outros sites More sharing options...
Visitante gnoo Postado Fevereiro 11, 2019 em 08:25 Compartilhar Postado Fevereiro 11, 2019 em 08:25 @Gabriel de Lima Desculpa. Mas nesse caso não te posso ajudar eu não tenho conhecimento nesse campo vou marcar aqui o @Fernando Mercês Pode ser que ele te ajude... Ou talvez apareça outra pessoa. Abraço Link para o comentário Compartilhar em outros sites More sharing options...
Aof Postado Fevereiro 13, 2019 em 19:06 Compartilhar Postado Fevereiro 13, 2019 em 19:06 Em 10/02/2019 em 21:38, Gabriel de Lima disse: vcs não entenderam '-' eu estava falando parar loop pelo x64dbg, isto é possivel? sim. existem varias formas de fazer isso, vc pode dar um NOP no loop todo, mas não é totalmente seguro, pode-se fazer um JMP antes do loop e pulando para o final do mesmo, assim ele nunca vai acontecer, etc. Link para o comentário Compartilhar em outros sites More sharing options...
Gabriel de Lima Postado Fevereiro 14, 2019 em 01:21 Autor Compartilhar Postado Fevereiro 14, 2019 em 01:21 6 horas atrás, Aof disse: sim. existem varias formas de fazer isso, vc pode dar um NOP no loop todo, mas não é totalmente seguro, pode-se fazer um JMP antes do loop e pulando para o final do mesmo, assim ele nunca vai acontecer, etc. vlw Link para o comentário Compartilhar em outros sites More sharing options...
Posts Recomendados
Arquivado
Este tópico foi arquivado e está fechado para novas respostas.