Gabriel de Lima Posted February 10, 2019 at 07:44 PM Share Posted February 10, 2019 at 07:44 PM 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 to comment Share on other sites More sharing options...
Guest gnoo Posted February 10, 2019 at 10:04 PM Share Posted February 10, 2019 at 10:04 PM 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 to comment Share on other sites More sharing options...
void_ Posted February 10, 2019 at 10:31 PM Share Posted February 10, 2019 at 10:31 PM 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 to comment Share on other sites More sharing options...
Gabriel de Lima Posted February 10, 2019 at 11:38 PM Author Share Posted February 10, 2019 at 11:38 PM @void_ @gnoo vcs não entenderam '-' eu estava falando parar loop pelo x64dbg, isto é possivel? Link to comment Share on other sites More sharing options...
Guest gnoo Posted February 11, 2019 at 08:25 AM Share Posted February 11, 2019 at 08:25 AM @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 to comment Share on other sites More sharing options...
Aof Posted February 13, 2019 at 07:06 PM Share Posted February 13, 2019 at 07:06 PM 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 to comment Share on other sites More sharing options...
Gabriel de Lima Posted February 14, 2019 at 01:21 AM Author Share Posted February 14, 2019 at 01:21 AM 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 to comment Share on other sites More sharing options...
Recommended Posts
Archived
This topic is now archived and is closed to further replies.