Я учусь о безопасности. Вот пример кода, который мне дали:
#include <stdio.h>
#include <string.h>
char *j; /* use to dump the stack in function cat */
/* Strings to be copied into buffer in function cat */
char str1[] = "";
char str2[] = "";
int main() {
void cat(int *parm) {
char buffer[8];
/* Dump the stack for function cat */
for (j=buffer; j<((char *)&parm); j++)
printf("%p: 0x%x\n", j, *(unsigned char *)j);
/* copy str1 followed by str2 into buffer */
/* note that a \0 remains between str1 and str2 in buffer */
strcpy(buffer, str1);
strcpy(&buffer[strlen(str1)+1], str2);
}
int *arg; /* dummy argument for call to function cat */
int x;
x = 0;
cat(arg);
x = 1;
printf("%d\n",x);
}
Я компилирую с GCC. Все, что я получаю, это "1", хотя. Есть идеи почему?
Кроме того, моя цель состоит в том, чтобы в итоге заставить программу выводить «0», и добиться этого, просто добавив код в cat (). Я уже ничего не могу там изменить, просто добавлю. Любая помощь, чтобы начать меня в правильном направлении.