-3
#include <stdio.h>
#include <sys/mman.h>
#include <string.h>
#include <stdlib.h>
#define BUFSIZE 30
char grade = '3';
char Name[BUFSIZE];
void readString(char *s) {
char buf[BUFSIZE];
int i = 0;
int c;
while (1) {
c = fgetc(stdin);
if ((c == EOF) || (c == '\n'))
break;
buf[i++] = c;
}
buf[i] = 0;
for (i = 0; i < BUFSIZE; i++)
s[i] = buf[i];
return;
}
int main(void) {
mprotect((void*)((unsigned int)Name & 0xfffff000), 1,
PROT_READ | PROT_WRITE | PROT_EXEC);
printf("What is your name?\n");
readString(Name);
if (strcmp(Name, "smart guy") == 0)
grade = '6';
printf("Thank you, %s.\n", Name);
printf("I recommend that you get a grade of %c on this assignment.\n",
grade);
exit(0);
}
我試着給一個隨機名稱當然,除了「聰明的傢伙」超限等級的緩衝,使之給我6.Also我試圖再次給它一個隨機名稱和給9你能幫助我怎麼會這樣possible.I與上緩衝一些彙編努力,但它不是那麼成功緩衝區溢出攻擊
歡迎堆棧溢出!你可以通過[tour](http://stackoverflow.com/tour)瞭解這個網站的工作原理,並閱讀[關於如何提問的建議](http://stackoverflow.com/help/)問)在幫助中心,看看哪些問題在這裏受歡迎,哪些不是。 – Eregrith
也許問題是全局變量不像局部變量那樣佈局?你有沒有嘗試使變量本地?改變定義的順序?你給什麼輸入?你會從這個輸入中得到什麼輸出,以及你實際得到了什麼輸出? –
我不允許更改我必須緩衝區溢出的代碼。 – dsc3556