아 이거 제가 음수표현을 하면 메모리에 어떻게 저장되는지 잘 모르겠는데 부호에 해당하는건 어떻게되나요?
취미로하는사람(122.32)2014-02-26 16:42
b에 11111111111이렇게 저장되고 +1하면 a가 영향받는거 기대했는데 잘 안됭
취미로하는사람(122.32)2014-02-26 16:44
아니 그러니까 오버플로/언더플로하고 a가 영향을 받는거하고 무슨 상관이냐고
ㅁㄴㄹㅇ(76.191)2014-02-26 16:44
1. 정수 변수를 세개 선언했다. 2. 정수형 변수에 값을 입력했다. 3. 그중에 하나엔 오버플로우를 일으켰다. 4. 아까 선언한 세 변수의 주소값을 10진수로 출력해보았다. 5. 아까 선언한 세 변수에 저장된 값을 살펴봤다. 6. 결과 = 오버플로가 되서 엉뚱한 값이 나왔다 7.성공!
니가 원한게 아마 변수 a 저장지점|변수 b 저장지점|변수 c 저장지점 이렇게 스택에 있을때 변수 b 에서 1111 로 다 채워넣고 +1 하면 변수 a 에 덮어쓰이지 않을까 이거 아님? 근데 signed int 는 sign bit 가 그 앞에 있으니 실패고. 근데 unsigned 해도 안될거임. 일반 산술타입 연산은 size 정해져있어서 보통 침범 안함. 버퍼 오버플로우 하려면 배열 써서 사이즈 넘겨야지.
ㅇ(93.133)2014-02-26 16:52
배열짜서 다시해볼게요 자연수로해도 잘 안되네요
취미로하는사람(122.32)2014-02-26 16:53
마지막댓글 도움됬어요 감사합니당
취미로하는사람(122.32)2014-02-26 16:55
버퍼 오버플로우 시연해보고싶으면 int main() { int a = 0; char b[1]; scanf("%s", b); printf("%d\n", a); return; } 해서 입력을 2자 3자 이런식으로 해보면 간단함.
네가 잘못 알고 있어서 그럼
어느부분이 잘못된거?
아 음수로 오버플로우 해야할것같음
근데 왜 a가 영향을 받는데?
포인터가 없잖아요;;
아 이거 제가 음수표현을 하면 메모리에 어떻게 저장되는지 잘 모르겠는데 부호에 해당하는건 어떻게되나요?
b에 11111111111이렇게 저장되고 +1하면 a가 영향받는거 기대했는데 잘 안됭
아니 그러니까 오버플로/언더플로하고 a가 영향을 받는거하고 무슨 상관이냐고
1. 정수 변수를 세개 선언했다. 2. 정수형 변수에 값을 입력했다. 3. 그중에 하나엔 오버플로우를 일으켰다. 4. 아까 선언한 세 변수의 주소값을 10진수로 출력해보았다. 5. 아까 선언한 세 변수에 저장된 값을 살펴봤다. 6. 결과 = 오버플로가 되서 엉뚱한 값이 나왔다 7.성공!
애초에 포인터가 실종했어 포인터 질문 아니야
포인터 연산자가 * 인거는 알고 질문하니?
오버플로가 되서 b가 이상해진건 알겠어요
너 묻고싶은게 버퍼 오버플로우임 아니면 음수 bit representation 임.
아 그러니까 오버플로 되면 다음 메모리 블록이 영향 받는다고 생각한거? ㅋㅋㅋ
http://en.wikipedia.org/wiki/Two's_complement
이거나 읽어봐라
내가 기대한건 ㅇㅇㅇㅇ(a)/ㅇㅇㅇㅇ(b)/ㅇㅇㅇㅇ(c) 이렇게 정보가 저장되면
a, b, c 모두 각각 다른 주소공간에 값을 저장시켰습니다.
한 주소공간의 데이터가 변한다고 해서 다른 변수가 영향받진 않습니다.
이거 괜히 음수때문에 헷갈리게됬는데 자연수만 취급하는 변수로 다시짜볼게요
니가 원한게 아마 변수 a 저장지점|변수 b 저장지점|변수 c 저장지점 이렇게 스택에 있을때 변수 b 에서 1111 로 다 채워넣고 +1 하면 변수 a 에 덮어쓰이지 않을까 이거 아님? 근데 signed int 는 sign bit 가 그 앞에 있으니 실패고. 근데 unsigned 해도 안될거임. 일반 산술타입 연산은 size 정해져있어서 보통 침범 안함. 버퍼 오버플로우 하려면 배열 써서 사이즈 넘겨야지.
배열짜서 다시해볼게요 자연수로해도 잘 안되네요
마지막댓글 도움됬어요 감사합니당
버퍼 오버플로우 시연해보고싶으면 int main() { int a = 0; char b[1]; scanf("%s", b); printf("%d\n", a); return; } 해서 입력을 2자 3자 이런식으로 해보면 간단함.
산술연산티입은 사이즈가 정해져있다는게 무슨말인지 모르겠어요
malloc 생각해보면 간단한 답이거늘... ㅜㅜ