본문 바로가기

[vscode/MAC] ld: 1 duplicate symbol for architecture x86_64 오류 뜰 때 일단 시험이 안 끝나서 여기에 포스팅,,, 그림1 처음에 vscode C++ 설정을 마치고 나면 그림1과 같이 실행된다. vscode 공식 문서를 읽다가 "You can modify your tasks.json to build multiple C++ files by using an argument like "${workspaceFolder}/*.cpp" instead of ${file}." 라고 하길래 tasks.json 파일을 수정했다. 되는지 실제로 시험해 봤더니 아래와 같은 오류가 떴다. 그림2 그림3 이전에는 실행 되었던 파일들도 안 된다. 여기에서는 XCode의 경우지만 main이 중복돼서 그렇다고 한다. 생각해보니 보통 c++ 환경에서는 한 프로그램을 다중 파일로 구성시켜 실행시킨다. 공식 문..
PC와 IP의 차이점 아무생각 없이 공부했었는데 운영체제에서 PC와 MAR 등의 레지스터가 x8086 computer architecture에 소개되지 않음을 깨달았다. program counter과 instruction pointer은 무엇이 다를까 찾아보았다. PC와 IP는 동의어지만 IP가 좀 더 구체적인 내용을 담고 있다. PC는 실행할 다음 명령어의 주소를, IP는 segment의 offset을 저장하고 있다. (CS register + offset으로 physical address를 가리킴) 참고 What's the difference between register IP and PC?
[운영체제] interrupt stack pointer 깃헙 블로그 설정을 바꿔야 해서 일단은 여기에 포스팅.. 운영체제 공부하다가 의문점이 생겼다. 책을 읽으면서 공부하고 있는데 시스템 스택이나 스택 포인터, 제어 스택 등 어디서 많이 들어본 용어들이 나오는데 그게 정확히 무엇인지 모르겠어 열심히 구글링을 했다. 구글링을 해서 의문점을 정리했다. 크게 두 가지로 나눌 수 있었다. 1. 그림1에서 제어 스택과 인터럽트 처리 루틴은 kernel이 자리 잡은 공간이라고 들었다. 제어 스택의 top을 가리키는 스택 포인터와 기존에 알고 있던 stack pointer(stack segment 꼭대기를 가리키는 레지스터)이 동일한 것인가? 2. 제어 스택은 call stack(기존에 알고 있는 실행 중인 서브루틴 관련 정보를 저장하는 스택)과 동일한 용어라고 한다. ..
블로그 이전합니다 깃허브로 옮김 아직은 별 건 없고 나중에 구경오셈 http://kkarung.github.io/ link
[메모리 보호기법]PIE 출처 http://lazenca.net/display/TEC/02.TechNote https://bpsecblog.wordpress.com/2016/06/10/memory_protect_linux_4/ PIE PIE (Position Independent Executable) 위치 독립 코드로 이루어진 실행 가능한 바이너리 (위치 독립 코드 : 실행할 때마다 매핑되는 주소가 어디든지에 상관없이 실행되는 파일) → 바이너리의 주소를 랜덤화하여 바이너리의 특정 주소의 값을 수정하는 것과 같은 공격을 방어한다. vi PIE.c ./NoPIE ./PIE NoPIE를 실행하면 주소가 같다. PIE를 실행하면 주소가 달라진다. PIE가 적용되지 않은 바이너리의 경우 코드 영역의 값이 고정된 주소값이다. (print..
[메모리 보호기법]RELRO 출처 http://lazenca.net/display/TEC/02.TechNote https://bpsecblog.wordpress.com/2016/05/18/memory_protect_linux_2/ 이전에 알아야 할 것 PLT (Procedure Linkage Table) 외부 프로시저를 연결해주는 테이블. PLT를 통해 다른 라이브러리에 있는 프로시저를 호출해 사용할 수 있다. GOT (Global Offset Table) PLT가 참조하는 테이블. 프로시저들의 주소가 들어있다. "함수를 호출하면 (PLT를 호출하면) GOT로 점프하는데 GOT에는 함수의 실제 주소가 쓰여있다. 첫 번째 호출이라면 GOT는 함수의 주소를 가지고 있지 않고 어떤 과정을 거쳐 주소를 알아낸다. 두 번째 호출부터는 첫 번..
[메모리 보호기법]Canaries 출처 http://lazenca.net/display/TEC/02.TechNote https://bpsecblog.wordpress.com/2016/05/16/memory_protect_linux_1/ Canaries Canaries SFP와 return address를 저장할 때, 이 정보들이 공격자에 의해 덮어씌워지는 것으로부터 보호하기 위해 스택상의 변수들의 공간과 SFP 사이에 넣는 특정한 값 버퍼 오버 플로우가 발생하면 Canary 값이 손상되어 Canaries 데이터의 검증에 실패하여, 오버 플로에 대한 경고가 출력되고, 손상된 데이터를 무효화 처리된다. Terminator canaries Canary의 값을 문자열의 끝을 나타내는 문자(NULL 0x00, CR 0x0d, LF 0x0a, EO..
[메모리 보호기법]ASLR 출처 http://lazenca.net/display/TEC/02.TechNote https://bpsecblog.wordpress.com/2016/05/16/memory_protect_linux_1/ ASLR ASLR(address Space Layout Randomization) 메모리 손상 취약점 공격을 방지 하기 위한 기술 스택, 힙, 라이브러리 등의 주소를 랜덤한 영역에 배치하여, 공격에 필요한 target address를 예측하기 어렵게 만든다. 프로그램이 실행될 때마다 각 주소들이 변경된다. Return-to-libc 공격을 하기 위해서는 공유 라이브러리에서 사용하는 함수의 주소를 알아야 한다. ASLR의 적용으로 프로그램이 호출될 때마다 스택, 힙, 라이브러리 영역의 주소가 변경되면 공격이..