분류 전체보기 78

setbuf란?

setbuf?void setbuf(FILE *stream, char *buffer);스트림의 버퍼링 방식을 설정함. 스트림이 뭔데프로그램이 다양한 입출력 소스와 일관된 방식으로 통신할 수 있게 해주는 추상화된 데이터 통로. 버퍼링이 뭔데데이터를 일시적으로 저장하는 버퍼에 모았다가 한 번에 처리하는 방식. char my_buffer[1024];setbuf(stdout, my_buffer);원하는 메모리를 버퍼로 사용하는 것.-> 특수하게 메모리 할당을 하고 싶을 때 사용함. 시스템에서 사용되는 기본 버퍼 크기가 너무 클 때 주로 사용.setbuf(stdout, 0LL);setbuf(stdin, 0LL);stdout과 stdin 두 스트림의 버퍼링을 비활성화한 것.-> 비활성화 하면 출력함수랑 입력함수가 호..

basics 2025.04.30

힙 실습 정리2

tcachebins -> fastbins -> unsortedbin 순으로 사용됨. tcachebins에 있는 chunk 주소는 -> fd주소.fastbins에는 있는 chunk 주소는 -> 헤더 주소. fastbins -> tcachebins chunk 이동이 상태에서 malloc 7번을 해주면 tcachebins에 있는 chunk들이 전부 나가고fastbins에 있는 chunk들이 tcachebins로 이동함. __malloc_hook __malloc_hook에 현재는 0이 들어있고 안에 값을 넣어줄거임.AAAA를 넣어줌.RIP가 바뀌면서 넣어준 값을 jmp 했음.유효한 주소였으면 그 주소로 이동했음.만약 원가젯을 __malloc_hook에 넣어주면 쉘 획득이 가능해짐. __free_hookfr..

힙 실습 정리 1

tcachebins LIFO 확인malloc 0x10 을 2번 주고 free로 다시 해제해줌.tcachebins를 보면 먼저 해제해준 chunk가 들어가있음.그리고 다시 malloc을 해주면 마지막에 해제된 영역이 할당됨.-> LIFO 리스트 구조 확인이번에는 3개를 할당/해제 해줌.각각 해제된 영역을 보면 fd에 이전에 해제된 chunk가 적혀있음.가장 처음에 해제된 영역엔 fd에 0이 들어있음. tcache arena 영역 확인그리고 주소들 앞을 보면 [ 3] 이렇게 해제된 chunk의 개수가 적혀있는데,tcache arena안에서도 확인 가능함.그리고 마지막에 해제된 chunk가 적힘.만약 저게 할당되면 다음에 있는 chunk가 적히고 개수는 줄어듬. tcachebins 사이즈 별 관리다른 사이..

.net

.net 마이크로소프트에서 개발한 크로스 플랫폼 소프트웨어 프레임 워크C#, F# 같은 언어를 사용해서 개발 가능함. 프레임 워크: 소프트웨어 개발에서 사용되는 기본 구조나 플랫폼. 개발자들이 애플리케이션을 더 쉽고 효율적으로 만들 수 있도록 도와줌. .Net의 작동 원리와 컴파일 과정 1. 소스코드 작성개발자가 C#이나 F#등의 고급 언어로 코드를 작성함.2. IR(중간언어) 변환작성된 코드는 컴파일러에 의해서 IL이나 CIL이라는 중간언어로 변환됨. 여기서 중간언어는 PE파일 형식으로 패키징됨.3. CLR(공통언어, 런타임)역할CLR은 .NET의 핵심 엔진으로, 중간 언어로 된 코드를 실행하는 역할을 함.메모리 관리나 보안, 예외처리 같은 런타임 서비스 제공.중간 언어를 실제 기계어로 변환하는 컴파일..

basics 2025.04.29

docker 정리

초기에 LXC(리눅스 컨테이너스)라는 커널 컨테이너 기술을 이용하여 만든 컨테이너 기술 중 하나. 나무위키 컨테이너는?컨테이너를 설명하자면 '운영체제 수준 가상화'. Linux의 cgroup 과 namespace를 이용하여 호스트 OS와 별개로 동작하는 가상머신 비스무리한 것. 나무위키 well known port : 1 -10000포트10000-65535 2바이트 NAT?network address translation공인ip로 들어왔을때 사설 ip로 넘겨줌. 포트포워딩?공인 ip 몇번 포트는 -> 사설ip 몇번포트로 보내겟음. 공유기 -> 공인ip : 공신력있는 ip, 통신사에서 할당해줌.사설ip : 통신이 안됨. 사설 ip끼리만 통신 가능. docker run -it ubuntu:22.04 ..

Heap힙 /ptmalloc

ptmalloc2 allocator ptmalloc2란?리눅스 GLIBC에서 사용하는 메모리 할당자임. 리눅스 유저모드에서 주로 사용함. chunk가 뭐임...메모리 관리 시스템에서 메모리의 기본 할당 단위. memory allocator가 관리하는 메모리 블록의 단위라고 생각하면됨.chunk는 allocated (사용중인 영역 )/ free (해제되서 재사용 가능한 영역) 두가지 상태로 나뉜다. free chuck들은 bin이라는 자료구조에 의해서 크기별로 관리되고 , free list형태로 구성됨. allocated chunk 와 free chunkprev_size: 이전 힙 청크가 해제되었을 경우 해제된 힙 청크의 크기 저장.size: 할당된 현재 힙 청크의 크기를 저장하고 있고, 3개의 비트 플래..

malloc / 메모리사용

메모리는 malloc -> 사용 -> free패턴으로 사용함. 메모리를 사용하려면 malloc함수를 사용해 메모리 공간을 확보해야한다.메모리 크기는 바이트 단위임.#include #include // malloc, free 함수가 선언된 헤더 파일int main(){ int num1 = 20; // int형 변수 선언 int *numPtr1; // int형 포인터 선언 numPtr1 = &num1; // num1의 메모리 주소를 구하여 numPtr에 할당 int *numPtr2; // int형 포인터 선언 numPtr2 = malloc(sizeof(int)); // int의 크기 4바이트만큼 동적 메모리 할당 printf("%p\n", ..

C언어 포인터 복습

변수는 컴퓨터 메모리에 생성된다.특정한 메모리 주소에 저장됨.서식지정자 %p를 사용하고, 변수 앞에 &를 붙이면 주소를 구할 수 있음. 메모리 주소는 C언어에서 포인터 변수에 저장된다.int *numPtr; 이런식으로 *을 사용해 선언함.즉 포인터와 메모리 주소는 같은 의미임.메모리의 특정 위치를 가리킬 때 사용한다. 변수가 int형이면 이 변수의 메모리 주소를 저장하는 포인트도 int *이어야한다.시스템이 32비트인지 64비트인지에 따라 포인터의 크기가 달라짐.(32비트에서는 4바이트, 64비트에서는 8바이트) #include int main(){ int *numPtr; // 포인터 변수 선언 int num1 = 10; // 정수형 변수를 선언하고 10 저장 numPtr ..

docker 명령어

docker run -it ubuntu:22.04 /bin/bash우분투 22.04 이미지로 새 컨테이너를 생성해서 /bin/bash 쉘을 실행함. docker build . -t diary현재 디렉토리(.)에 있는 Dockerfile을 기반으로 이미지 빌드 docker run -it diary /bin/bash방금 만든 diary 이미지를 기반으로 컨테이너 실행, bash 쉘 진입. docker images로컬에 저장된 도커 이미지 목록 출력. ps -ef | grep prob현재 실행 중인 프로세스 중에서 prob이라는 문자열이 들어간 것 검색.

컴파일(Compile), 링커(Linker) 정리함

소스코드 =>컴파일러 (gcc, clang, MSVC등) => 목적코드 => 링커 (LTO) (주로 컴파일러에 포함)=> 실행파일 어셈블리어랑 기계어 차이점?기계어는 2진수로 이뤄진 CPU가 직접 실행할 수 있는 코드임. 0과 1로된 코드. (binary, hex로 표현)어셈블리어는 어셈블러에 의해서 기계어로 번역되고, 기계어를 사람이 읽기 쉽게 이름을 붙인 거임. (mov eax,1 처럼 표현)컴파일러가 어셈블리어로도 바꿔주고 기계어로도 바꿔줌. 링커가 하는일? 매우 많음위에처럼 여러 개의 목적코드를 하나의 실행파일로 만들어줌.심볼이나 함수 주소를 연결함.LTO를 수행해 최적화함.말고도 더더 많음. LTO: link time optimization ?간단한 함수들을 inline처리해줌 . -> 속도향상..