[클라우드 바우처] 80% 할인된 금액으로 드림핵 엔터프라이즈를 도입해 보세요. 자세히 알아보기
다음과 같은 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
avatar
bincat
Closed Beta Tester

ptr = (long)&ptr - sizeof(long) * N; // ptr 이 ptr - N *8 로 이동
ptr[N] = 1234; // (ptr의 현재 값) ptr + N*100 을 가리킴
결과적으로 ptr - N*8 + N*8 이되어서 같은 곳을 가리키게 됩니다.

2022.07.12. 18:26
질문에 대한 답을 알고 계신가요?
지식을 나누고 포인트를 획득해보세요.
답변하고 포인트 받기