증감연산의 과정과 결과에 의문을 느껴서 정리해본다. #include int main() { int a=10; printf("%d %d %d\n",a++,++a,++a); printf("%d %d %d\n",a++,--a,a--); return 0; } 코드는 간단하게 위와 같고 gdb를 통해 간단한 디버깅을 해보았다. 일단 스택이라는 메모리 공간을 사용한다는 것을 알 수 있다. 프롤로그가 진행되고, printf("%d %d %d\n", a++,++a,++a); 의 인자는 뒤에서부터 스택에 쌓인다. a값을 ebp-0x4라는 스택의 밑바닥에 저장하고 뒤의 인자 두개 ++a, ++a 전위연산을 add명령어를 통해 진행한다 10 -> 12가 된 ebp-0x4 값을 eax레지스터에 저장하고 후위 연산이 진행되는데..
보안 스터디/c
1. 정렬하고자 하는 2개 이상의 수를 입력받는다. 2. 가장 왼쪽 인덱스를 기준(pivot)으로 잡고, pivot을 제외한 나머지 인덱스 중 가장 왼쪽 인덱스를 Left, 가장 오른쪽 인덱스를 Right로 잡는다.#pivot은 정렬 하고자 하는 수들의 평균에 가까운 수로 잡는게 좋다 3. P와 비교했을 때, 더 큰 수가 나올때까지 L인덱스를 하나씩 증가시켜준다. 4. P와 비교했을 때, 더 작은 수가 나올때까지 R인덱스를 하나씩 감소시켜준다. 5. L과 R인덱스가 멈추면 두 인덱스를 swap한다. 6. L과 R인덱스가 교차 할 경우, P보다 작은 수와 P를 swap한다 7. 위의 정렬을 재귀하여 반복한다.