Jump to content
Sign in to follow this  
Gabriel de Lima

Como parar um While?

Recommended Posts

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)

Edited by Gabriel de Lima

Share this post


Link to post
Share on other sites

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. 

 

 

  • Curtir 1

Share this post


Link to post
Share on other sites

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.

Edited by void_

Share this post


Link to post
Share on other sites
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.

Edited by Aof
  • Curtir 1

Share this post


Link to post
Share on other sites
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

Share this post


Link to post
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.   Paste as plain text instead

  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.

Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...