Whoops you have an infinite loop here
//This creates a LCV for the do loop below and sets it equal to 0.
int y = 0;
//This do loop generates the random number.
do
{
//This generates a random time seed.
srand(time(0));
//This generates a random number between 1 and 99.
ran = rand() % 100;
//This while controls the do loop.
}while (y != 9);
y is initialized to 0 and you are looping while y!=9. And that is just the first error, there might be more.
Bug #2
int z = 1;
//This makes the program only create a random number the first pass through the loop.
if (z < 2)
{
//This runs the random number generator function.
return randomgen();
//This sets the result of the function as the random number.
randnum = randomgen();
//This sets the random number to the current number.
num = randnum;
}
After fixing infinite loop in randomgen(), You are immediately returning...
Videos
performance - Why won't my program run in GDB online compiler/debugger or Visual Studio C++ 2019 - Stack Overflow
Why is onlineGDB not giving the same result as another compiler?
Online GDB doesn't work as expected?
St-link (Gdb server) not working
Whoops you have an infinite loop here
//This creates a LCV for the do loop below and sets it equal to 0.
int y = 0;
//This do loop generates the random number.
do
{
//This generates a random time seed.
srand(time(0));
//This generates a random number between 1 and 99.
ran = rand() % 100;
//This while controls the do loop.
}while (y != 9);
y is initialized to 0 and you are looping while y!=9. And that is just the first error, there might be more.
Bug #2
int z = 1;
//This makes the program only create a random number the first pass through the loop.
if (z < 2)
{
//This runs the random number generator function.
return randomgen();
//This sets the result of the function as the random number.
randnum = randomgen();
//This sets the random number to the current number.
num = randnum;
}
After fixing infinite loop in randomgen(), You are immediately returning...
you have two problems in your code: the first one is that you have infinite loop in randomgen() function the condition in check against y - y != 9 but the value never update
int randomgen()
{
//This creates a variable to store the random number.
int ran;
//This creates a LCV for the do loop below and sets it equal to 0.
int y = 0;
//This do loop generates the random number.
do
{
//This generates a random time seed.
srand(time(0));
//This generates a random number between 1 and 99.
ran = rand() % 100;
//This while controls the do loop.
}while (y != 9);
//This returns the random number for use in the rest of the program.
return ran;
}
and the second one is even if you pass the loop in the function you exit main right away because the call to the function randomgen() is with return
if (z < 2)
{
//This runs the random number generator function.
return randomgen(); <-- **second problome**
//This sets the result of the function as the random number.
randnum = randomgen();
//This sets the random number to the current number.
num = randnum;
}
The code is extremely sloppy, I'm just trying to get my program to work. After half an hour of trying to figure out why 2 strings that were exactly the same in the expression string1==string2 had it evaluating to 0, I tried another compiler. It worked there. Why is GDB doing this?
I am posting this both on r/Assembly_Language and here. I think the topic involves both fairly strongly.
So, I am going to do a presentation involving buffer overflows and I learned some basic Assembly because of that (more specifically the function prologue). I plan on learning Assembly for real and have installed SASM, but for now I just know basic C. I need help reading something.
In one of my sources (https://www.tenouk.com/Bufferoverflowc/Bufferoverflow4.html), this guy does disass in his vulnerable function in order to show that sub has allocated more space than he declared (4 vs 20).
This is his code:
#include <unistd.h>
void Test()
{
char buff[4];
printf("Some input: ");
gets(buff);
puts(buff);
}
int main(int argc, char *argv[ ])
{
Test();
return 0;
}And this is the output of disass Test:
0x080483d0 <Test+0>: push %ebp 0x080483d1 <Test+1>: mov %esp, %ebp 0x080483d3 <Test+3>: sub $0x8, %esp 0x080483d6 <Test+6>: sub $0xc, %esp
Buff is 4 bytes and 20 bytes are "freed" on the stack. But when I try to do the same with a relatively more complicated function (I hope commentary is enough for the language gap):
#include <stdio.h>
#include <string.h>
#include <locale.h>
#include <stdlib.h>
void senha(){
char senha[10];
char senhareal[10]="dddddd";
int teste = 0;
char resposta[3];
printf("\n\n\n\n-----------------------------SISTEMA NUCLEAR DA OTAN------------------------------------ \n\n\n\n");
printf("DIGITE SUA SENHA: ");
gets(senha);
if(0 == strncmp(senha, senhareal, 20))
{
printf ("\nSenha correta! \n");
teste = 1;
}
else
{
printf ("\nSENHA INCORRETA! \n");
}
if(teste)
{
printf ("\nO usuรกrio agora controla a instalaรงรฃo! Deseja destruir o Brasil? \n");
gets(resposta);
}
}
int main(){
system("color 03");
setlocale(LC_ALL, "Portuguese");
senha();
return 0;
}I get this:
0x0000555555555209 <+0>: endbr64 0x000055555555520d <+4>: push %rbp 0x000055555555520e <+5>: mov %rsp,%rbp 0x0000555555555211 <+8>: sub $0x30,%rsp 0x0000555555555215 <+12>: mov %fs:0x28,%rax 0x000055555555521e <+21>: mov %rax,-0x8(%rbp)
No matter my input. So why does Online GDB consistently subtract 48 bytes? What are the instructions following sub and do they apply at all to what I am trying to do? Is it possible to know what's going on in that specific platform? Finally, am I unable to replicate what this person did with my code?
I tested the code of my source in Online GDB as well. It consistently subtracts 16 bytes.