gera's Insecure Programming by example에있는 일부 프로그램을 악용 사례 개발을 가르치기위한 플래그 시나리오를 캡처하는 데 사용할 수있는 클라이언트/서버 응용 프로그램으로 전환하려고합니다. 내가 가지고있는 문제는 Visual Studio (2005 Professional Edition을 사용하고있는 방법)가 스택에 변수를 할당 할 위치를 결정하는 방법을 잘 모르겠다는 것입니다.Visual Studio는 스택 변수를 할당해야하는 순서를 어떻게 결정합니까?
나는 컴파일하고 예 1을 실행하는 경우 :
int main() {
int cookie;
char buf[80];
printf("buf: %08x cookie: %08x\n", &buf, &cookie);
gets(buf);
if (cookie == 0x41424344)
printf("you win!\n");
}
나는 다음과 같은 결과를 얻을 : cookie
이상의 여든 바이트 아래 주소에서
buf: 0012ff14 cookie: 0012ff64
buf
시작하고, 복사 된 모든 4 바이트 첫 번째 80 자 이후에 buf
에서 cookie
에 표시됩니다.
내가 가지고있는 문제는이 코드를 다른 기능에 배치 할 때 발생합니다. 다음 코드를 컴파일하고 실행할 때 다른 결과가 나타납니다. 보다 큰 주소에 buf
이 나타납니다.
void ClientSocketHandler(SOCKET cs){
int cookie;
char buf[80];
char stringToSend[160];
int numBytesRecved;
int totalNumBytes;
sprintf(stringToSend,"buf: %08x cookie: %08x\n",&buf,&cookie);
send(cs,stringToSend,strlen(stringToSend),NULL);
결과는 다음
buf: 0012fd00 cookie: 0012fcfc
지금
buf
덮어 쓰기를 통해 임의의 데이터에 대한 쿠키를 설정하는 방법이 없다.
buf
앞에
cookie
을 할당하도록 Visual Studio에 지시 할 방법이 있습니까? 변수가 어떻게 할당되는지 사전에 알 수있는 방법이 있습니까?
감사합니다,
제이슨
아, 괜찮습니다. 예, 구조체가해야 할 것 같습니다. 도와 주셔서 감사합니다.