[en]
Here in this topic we should share C code which help people to learn new things about syntax and also related subjects (eg: assembly concepts), I will start with a small code, most of people probably can guess what will happen when it runs, but its a very nice exercise to run it in a debugger like GDB and understand why this happens. The code should be compiled with those flags otherwise compiler optimizations/protections will prevent it to work properly.
[ru]
Здесь, в этой теме, мы должны поделиться C кодом C, который помогает людям узнать новые вещи о синтаксисе, а также связанных предметах (например, концепции сборки), я начну с небольшого кода, большинство людей, вероятно, могут догадаться, что произойдет, когда он работает, Но это очень хорошее упражнение, чтобы запустить его в отладчике, как GDB, и понять, почему это происходит. Код должен быть составлен с этими флагами, в противном случае оптимизация компилятора/защита предотвратит его работать должным образом.
code.c
Here in this topic we should share C code which help people to learn new things about syntax and also related subjects (eg: assembly concepts), I will start with a small code, most of people probably can guess what will happen when it runs, but its a very nice exercise to run it in a debugger like GDB and understand why this happens. The code should be compiled with those flags otherwise compiler optimizations/protections will prevent it to work properly.
[ru]
Здесь, в этой теме, мы должны поделиться C кодом C, который помогает людям узнать новые вещи о синтаксисе, а также связанных предметах (например, концепции сборки), я начну с небольшого кода, большинство людей, вероятно, могут догадаться, что произойдет, когда он работает, Но это очень хорошее упражнение, чтобы запустить его в отладчике, как GDB, и понять, почему это происходит. Код должен быть составлен с этими флагами, в противном случае оптимизация компилятора/защита предотвратит его работать должным образом.
Bash:
gcc -O0 -fno-stack-protector code.c -o code
code.c
C:
#include <stdio.h>
#include <stdlib.h>
void somefunc()
{
puts("What happened?");
exit(1);
}
void func()
{
void (*reference[0])();
1[reference] = somefunc;
1[reference];
}
int main()
{
func();
return 0;
}