분류 전체보기 (55) 썸네일형 리스트형 Reversing 섹션의 속성에는 file/memory에서의 시작 위치, 크기, 엑세스 권한 등이 있다. code : 실행, 읽기 권한 data : 비실행 ,읽기, 쓰기 권한 resource : 비실행, 읽기 권한 IMAGE_SECTION_HEADER : 섹션 헤더는 각 섹션별 IMAGE_SECTION_HEADER 구조체의 배열로 되어 있습니다. 주요멤버 (나머지는 사용되지 않음) : VirtualSize // 메모리에서 섹션이 차지하는 크기 VirtualAddress // 메모리에서 섹션의 시작 주소(RVA) SizeOfRawData // 파일에서 섹션이 차지하는 크기 PointerToRawData // 파일에서 섹션의 시작 위치 Characteristics // 섹션의 속성(bit or) name // 아스키가 아니어.. Win System Programming load eax, 0x0100 이런 명령어는 100이라는 주소가 너무 커서 피연산자 8bit로 표현이 불가하다. 그래서 다른 방법을 사용하는데 mul r0, 4, 4 mul r1, 4, 4 mul r2, r0, r1 //256(0x100) store r2, 0x30(메모리 주소) load r1, [0x30] //indirect 모드로 0x30 주소에 있는 값의 주소로 가서(0x100) 값을 가져온다. 프로세스 란 단지 메모리에 로딩된 실행중인 프로그램이 완벽한 설명은 아니며 프로세스 가상메모리 + 레지스터 가 더 좋은 설명이다. 프로세스에 종속적인 레지스터가 있기 때문인데 A라는 프로세스가 실행중인데 B라는 프로세스가 실행 되어야 한다면 A프로세스에서 사용중이던 레지스터들을 다른 메모리에 저장후 다시 B.. Reversing ollydbg에서 점프할 주소에 빨간 줄 그어져 있는 것은 옵션 - cpu 탭 - Show jump path’, ‘Show grayed path jf jump is not taken’ , ‘Show jumps to selected command' 항목 체크 *PE(pe32) 파일은 window os에서 사용하는 실행파일 형식 32bit 형태를 의미, 64bit는 pe+ , pe32+ pe header(dos header ~ section header)에는 실행되기 위해 필요한 모든 정보가 담겨있다 어떻게 메모리에 적재되고 어디서부터 실행되어야 하고 어떤 dll이 로드되어야 하고 stack/heap의 크기 수많은 정보가 pe header에 구조체 형식으로 저장되어 있다. pe는 파일로 저장되어있을 때와 메.. Win System Programming ALU에서 사칙연산 명령어를 해석할때는 피연산자에 메모리주소가 바로올수 없고 레지스터 가 와야한다. 이유는 메모리에 접근하기위해서는 항상 레지스터를 거치기 때문이다. Load(메모리에서 레지스터로 로드), Store(레지스터에서 메모리로 저장) 명령어는 피연산자에 주소가 올수 있다. ex) store eax, 0x20(메모리 주소) Reversing Caller(호출자) Callee(피호출자) 함수호출후 cdecl : main함수가 파라미터 2개를 스택에 넣었을 경우 함수가 끝난후 ADD ESP, 8 과 같이 main에서 스택에 입력한 파라미터를 정리하는 방식으로 printf 와같은 가변길이의 파라미터를 전달할수 있는 특징 다른 calling convention에서는 구현이 어렵다. c언어에서 기본적으로 사용하는 방식 stdcall : win32 api 에서 사용됨 calle에서 스택을 정리하는 것이 특징 retn 8 : return(해당코드로 돌아감) + pop 8byte fastcall : stdcall과 같은방식이지만 함수에 전달하는 파라미터를 일부(2개까지)를 스택이아닌 레지스터를 이요하여 전달한다는 특징 Win System Programming win32 vs win64 32bit 컴퓨터는 bus, cpu가 한번에 처리할수 있는 명령어의 비트수가 32bit이다(64bit 컴퓨터는 64bit이다). 32bit컴퓨터에서 64bit의 포인터 주소를 같는다면 버스에서 주소를 보내는데 2번의 작업을 하므로 비효율적이다. 가상메모리에 대해서 알고싶다... 나중에 가면 배우는 듯 하다. 예스! 윈도우도 예외처리가 있나보다. 에러나면 전역구역에 에러코드가 저장된다. 바로 GetLastError( )를 호출하면 코드가 리턴된다. Win System Programming 윤성우의 윈도즈 시스템 프로그래밍 유튜브 강의로 공부를 하고 있다. char 자료형으로 문자열을 많이 사용했는데 영어는 1바이트이고 한글은 2바이트임으로 안전성을 확보하기 위해 모든 문자를 2바이트로 표현하는 유니코드를 사용한다. SBCS(single byte character set) : 아스키 1바이트 MBCS(multi byte character set) : 한글 2바이트, 영문 1바이트 -> 우리가 평소에 썼던 것 WBCS(Wide byte character set) : 유니코드 문자 2바이트 사용 char str [ ] = "ABC한글"; int size = sizeof(str); -> 8 (1*3 + 2*2 + null문자) int len = strlen(str); -> 7 (한글은 2바이트라.. Win System Programming 가정 : HDD에서 메모리에 ADD 3 + 5를 로드한다 버스를 타고 CPU의 버스 인터페이스를 통해 접근해 레지스터에 ADD, 3, 5가 로드된다. 컨트롤 유닛은 레지스터에서 ADD를 불러와 해석하고 ALU에 ADD 명령을 내린다. ALU는 ADD 3 + 5를 수행하고 레지스터에 값을 저장한다. 컨트롤 유닛은 CPU의 전반적인 컨트롤을 담당한다. 버스 (control bus + address bus + data bus) 소스코드가 실행파일이 되는 과정 : 가정 : test.c 작성 -> 전처리기 작업 -> 소스를 컴파일러가 어셈블리언어로 컴파일 -> 어셈블러가 어셈블리어를 바이너리 코드로 변경 -> 링커가 바이너리 코드와 라이브러리를 합해 실행파일 생성 #include -> add 3, 5 -> 010.. 이전 1 ··· 3 4 5 6 7 다음