본문 바로가기

ebp alias gcc='gcc -mpreferred-stack-boundary=2' 디버깅하며 매개변수의 개수와 매개변수의 값, 환경변수들을 확인해본다. 먼저 기본적인 test.c를 -g 옵션으로 컴파일을 한 뒤 매개변수로 '-u 10 -d /home/bin Hoyoung' 을 주어 실행시켜보았다. 메모리의 내용을 볼 때 사용하는 x명령어를 사용하여 ebp의 내용을 보면 아래와 같다. 첫번 째 (0xbfffea88) : base pointer 저장( 이전 ebp를 저장) 이전 ebp가 없기 때문에 값이 없다. 두번 째 (0x0082fe9c) : return addressr값 저장 현재 0x0082fe9c 값이 들어가 있는 주소는 0xbffea2c 이므로 이 주소에다가 원하는 주소값을 넣어 리턴주소를 변경할 .. 더보기
배열명은 포인터변수가 아니다. 배열명은 포인터상수이므로 자신의 값을 바꿀 수 없다. 즉int array[5] = {10, 20, 30, 40, 50};array = array + 2;array++; => 배열명은 변수가 아니므로 자신의 값을 바꿀 수 없다. 반면에 포인터변수는 기억공간이므로 자신의 값을 바꿀 수 있다.int array[5] = {10, 20, 30, 40, 50};int *ap = array;int i;for(i=0; i 더보기
[linux] 포인터#3 ===================================================================== LAB> pointer 예제 9 - strlen 함수를 구현해보자. 함수 원형 #include size_t strlen(const char *s); 사용자 정의함수 : char *Strrchr(const char *s, int c); -- strlentest.c -- #include #include int main() { char message[] = "Hello World"; printf("message length = %d \n", strlen(message)); return 0; } -- strlentest.c -- -- 실행결과 -- message length = 11 --.. 더보기
I/O 재지향 쉘은 항상 기본적으로 표준입력(stdin, 키보드), 표준출력(stdout, 스크린), 표준에러(stderr, 스크린에 뿌려질 에러 메세지) "파일들"을 열어 놓습니다. 이 파일들을 포함해서 열려 있는 어떤 파일이라도 재지향 될 수 있습니다. 재지향이란 간단히 말해서 파일, 명령어, 프로그램, 스크립트, 심지어는 스크립트 속의 코드 블럭의 출력을 낚아 채서 다른 파일, 명령어, 프로그램, 스크립트의 입력으로 보내는 것입니다.열려 있는 파일 각각은 파일 디스크립터(file descriptor)를 할당 받습니다. [1] 표준입력, 표준출력, 표준에러에 해당하는 파일 디스크립터는 각각 0, 1, 2 입니다. 추가적으로 열리는 파일을 위해서 3부터 9까지의 파일 디스크립터가 남겨져 있습니다. 종종, 이 추가적인.. 더보기
변수 타입 지정: declare 나 typeset declare나 typeset 내장 명령(이 둘은 동의어입니다.) 키워드는 변수의 특성을 제한할 수 있습니다. 이것은 몇몇 프로그래밍 언어에서 볼 수 있는 불완전한 형태의 타입 지정입니다. declare 명령어는 bash 버전 2 이후부터 가능합니다. typeset 명령어는 ksh 스크립트에서도 가능합니다.declare/typeset 옵션-r 읽기 전용declare -r var1(declare -r var1 는 readonly var1 와 똑같이 동작합니다)C에서 const 형한정어(qualifier)와 거의 비슷하고, 이런 변수의 값을 바꾸려고 하면 에러 메세지가 납니다.-i 정수declare -i number # 이 스크립트는 이후 나오는 모든 "number"를 정수로 취급할 것입니다. number=.. 더보기
매개변수 치환(Parameter Substitution) 변수를 조작하거나 확장시키기${parameter}변수인 parameter의 값이란 뜻으로서, $parameter라고 한 것과 같습니다. 어떤 문맥에서는 ${parameter}라고 확실히 써 줘야 동작하는 수도 있습니다.문자열 변수들을 연결할 때 쓰일 수 있습니다.your_id=${USER}-on-${HOSTNAME} echo "$your_id" # echo "Old \$PATH = $PATH" PATH=${PATH}:/opt/bin # 스크립트가 도는 동안 $PATH 에 /opt/bin 을 추가. echo "New \$PATH = $PATH"${parameter-default}매개변수가 세트되지 않았다면 default를 사용합니다.echo ${username-`whoami`} # $username이 여전.. 더보기