완료됨
다음과 같은 C 코드가 왜이렇게 동작할까요??
https://learn.dreamhack.io/16#41 에 나온 코드를 공부하던중 이해가 가지 않아 질문 드립니다.
#include <stdio.h>
long *ptr;
int main(){
int N = 100;
// ptr의 값을 변경
ptr = (long)&ptr - sizeof(long) * N;
printf("%x\n", ptr); // 891cb838
// ptr[N]에 값 쓰기
ptr[N] = 1234;
printf("%x\n", ptr); // 4d2
return 0;
}
위 코드를 수행하면, 제가 생각하기엔 ptr의 값은 처음에 변경한 값 그대로고,
ptr + N의 위치 값만 바뀌어야 할것 같은데 ptr의 값 자체가 바뀌더군요.
왜 그럴까요???
#시스템해킹
작성자 정보
답변
1
bincat
세계수
ptr = (long)&ptr - sizeof(long) * N;
// ptr 이 ptr - N *8 로 이동
ptr[N] = 1234;
// (ptr의 현재 값) ptr + N*100 을 가리킴
결과적으로 ptr - N*8 + N*8
이되어서 같은 곳을 가리키게 됩니다.