목록리눅스 (2)
안 쓰던 블로그
gcc -shared -o libmylib.so.1.0.1 sleep.o /usr/bin/ld: sleep.o: relocation R_X86_64_32 against `.rodata' can not be used when making a shared object; recompile with -fPIC sleep.o: error adding symbols: Bad value 리눅스 동적 라이브러리 생성 시 error adding symbols: Bad value 에러 32비트 64비트 호환성 문제로 생기는 에러이다 컴파일 시 -fPIC 옵션을 추가한다 gcc -c sleep.c -fPIC
1. 코드(텍스트) 영역 유저가 작성한 소스코드가 들어가는 영역, 실행할 프로그램의 코드가 바이너리화 되어 저장된다 이곳의 명령 실행 순서는 순차적이지 않다. 왜냐하면 하이레벨 언어 구조가 jump, call 등을 많이 쓰기 때문이다 그래서 순서를 맞추기 위해 EIP 레지스터를 이용한다 EIP 레지스터는 다음에 실행할 명령의 메모리 주소가 저장되어 있는 레지스터로, 현재 실행 중인 명령어가 종료되면 프로세서는 자동으로 EIP 레지스터에 저장된 명령어를 실행한 뒤에 그 다음 명령어를 EIP에 저장한다 프로그램이 실행되면 EIP 레지스터는 코드 영역의 맨 처음 위치로 설정된다 이곳에는 진짜 코드만 저장하고 있기 때문에 쓰기가 금지되어 있다. 읽기만 가능하다 2. 데이터 영역 초기값이 있는 전역(global)..