본문 바로가기
[Visual Studio] - 소스코드를 가져오거나 컴파일할 때 한글 인코딩 문제 1) Visual Studio의 소스코드 편집기의 인코딩을 UTF-8로 변경할 수 있다.2) 컴파일러에게 소스코드의 인코딩이 UTF-8이라고 설정할 수 있다.  #1. VS의 인코딩 문제 ▷ 인코딩 문제는 어떤 프로그래밍 언어를 사용하든 한 번쯤은 만날 수 밖에 없는 오류다.   ▷ 외부에서 가져온 소스코드를 나의 Visual Studio로 열면 가끔 위와 같은 에러 메시지가 뜬다. 이것은 해당 소스코드가 UTF-8로 인코딩한 파일인데, VS가 기본적으로 로컬 시스템의 환경인 CP949로 텍스트 편집기를 설정하므로 CP949 관점에서 식별 불가능한 데이터를 만나 무슨 문자인지 해석이 안 된다는 뜻이다. 즉, UTF-8로 저장한 바이트 값 중 일부가 CP949에서 약속되지 않은 불명의 값이라 에러를 뱉은 .. 2024. 12. 21.
[Windows] - 인코딩 환경이 난잡한 이유 (Unicode, MBCS, ...) # MBCS(CP949) ▷ MBCS는 멀티 바이트 캐릭터 세트의 약자다. MBCS는 유니코드가 아니다!!. 문자를 인코딩할 때 다양한 크기의 바이트로 저장한다는 점에서 UTF-8과 유사해 오해하기 쉽다. 그러나 MBCS는 유니코드 개발 이전에 문자 인코딩이 유니코드로 글로벌하게 표준화되기 전에 존재했던 과도기 기술이다. ▷ ASCII 코드가 1바이트만을 사용해서 영어 알파벳과 기타 문자를 표시하던 시절, 일본이나 한국과 같은 지역에서는 아스키코드를 포함하여 자신들의 문자열을 표현할 수 있는 인코딩을 개발했다. 아스키코드가 당시 컴퓨터의 실질적 표준이었기 때문에 1바이트로 표현하는 아스키 방식과 호환시키면서 자국의 언어도 표현하려도 보니 "멀티 바이트"로 저장하는 시스템이 되었고, MBCS라는 단어가 붙.. 2024. 12. 21.
라이브러리와 링커 ▷ 처음 C언어를 배울 때는 완전히 착각을 한 부분이 바로 부분이었다. 나는 printf()와 같은 함수의 구현 소스코드가 저 헤더 파일에 있는 줄 착각했다. 그도 당연할 것이, printf() 함수의 구현 소스코드를 본 적이 없었기 때문이다.▷ 그러나 함수 선언 부인 헤더 파일은 그저 해당 소스코드(텍스트 파일)를 재배치 가능한 파일(오브젝트 파일)로 컴파일하기 위해 존재하는 것일 뿐이다. printf()의 구현체를 발견하질 못했으니 오브젝트 파일 내의 바이너리로 포함할 수 없다. 이러한 미해결 호출 함수의 심볼은 ELF(unix/linux) 혁식이든 COFF(windows)이든  따로 헤더에 저장되고, 이것을 링커가 해결한다.▷ 호출 가능한 실제 printf() 함수의 구현 바이너리는 라이브러리 형.. 2024. 12. 21.
[리눅스] - 마운트란 ▷ mount란 외부 저장 장치를 다루게 하는 리눅스만의 특별한 방식이다.▷ Windows는 리눅스의 마운트와 조금 다르게 동작하는데, C:/ D:/ 이런 식으로 아예 저장 장치만의 별도의 독립된 구획이 따로 있는 것처럼 보인다. ▷ 그러나 리눅스는 외부 저장 장치를 루트 디렉터리(/)에서 시작해 어떤 위치의 디렉터리에 통합시켜버린다.▷ 예를 들어, USB 디바이스의 파일 시스템(FAT 형식)을 읽어서 특정 위치 (/mnt/usb) 디렉터리에 통합시켜버리는 것이다.▷ 이렇게 하면 리눅스 사용자 입장에서는 외부 저장 장치 내부의 파일들을 루트 디렉터리에서 시작하는 디렉터리 시스템의 일부라고 쉽게 받아들일 수 있는 것이다. 마치 하드디스크나 USB 안의 파일들이 원래 그 디렉터리에 있었던 것처럼 말이다.▷이.. 2024. 12. 20.
[64비트 멀티코어 OS 원리와 구조 1] - 목차 기준으로 흐름 요약 3장. 64비트 프로세서의 이모저모- x86-64 프로세서는 호환성을 위해 16비트 모드부터 부팅 시작.- 따라서 16비트, 32비트를 거쳐 64비트 모드로 전환이 필요.- 각 모드 별 레지스터의 의미와 메모리 접근 방식이 다르므로, 상세 사항을 알지 못하면 전환을 할 수 X.▶ 개괄 : 1) 운영모드에는 어떤 것이 있으며, 각 모드마다 2) 레지스터 의미가 무엇인지, 그리고 3) 메모리 관리가 어떻게 다른지 알아본다.  4장. 내 PC를 부팅하자!- OS의 진입점(entry point)인 부트로더(boot loader)가 어떻게 시작되는지 아는 것이 4장의 목적.- x86 프로세서와 OS의 진입점 사이에는 BIOS가 있다.- BIOS가 부트로더를 어떻게 실행하는지 모르면 부트로더를 작성할 수 없으므로 .. 2024. 12. 18.
미국 초대 재무부장관,알렉산더 밀턴 Men give me credit for some genius. All the genius I have lies in this; when I have a subject in hand, I study it profoundly. Day and night it is before me.My mind becomes pervaded with it. Then the effort that I have made is what people are pleased to call the fruit of genius. It is the fruit of labor and thought.사람들은 나를 천재라 부른다. 모든 천재에 대한 내 생각은 다음과 같다. 어떠한 사안을 다루어야 할 때면 이를 깊게 공부한다. 낮이고 밤이고 쉴새 .. 2024. 12. 17.
[게임 업계에 대한 일침] Swen Vincke Roasts The Gaming Industry Speech for Game of the Year Award 여러분이 여기 3시간째 앉아 계신 것 압니다. 근데 제가 작년에 아껴둔 연설 시간이 좀 있어서요. (작년 GOTY 수상 소감을 30초 만에 끝내라고 압박 받음) 저는 오늘 수상받을 올해의 게임이 뭔지 가장 먼저 알고 있습니다. 뿐만 아니라 내년, 이듬해, 또 그다음 해의 우승작도 알고 있죠. 어떻게 아는 걸까요? 예언가가 말해주더군요. 변화가 올 거라고 했죠.  생각보다 현대적인 사람이라 NDA를 쓰게 됐지만, 여러분은 믿을 만하니 비밀을 지켜주실 거라 믿습니다.  예언가가 말하길, 2025년 올해의 게임은 여기 이 자리로 올라오는 법을 알게된 스튜디오가 탈 거라는 군요. 그 비법은 어처구니없을 만큼 단순하지만, 자주 잊혀지곤 하죠. 자신들이 하고 싶은 게임을 만드는 자들이 이 자리에 올 겁니다. 이전에.. 2024. 12. 15.
[2024.11.21] - IRETQ 명령어 새롭게 알게 된 내용 정리 ▷ IRTG 명령어는 인터럽트 수행이 끝난 후에 핸들러 함수의 끝부분의 마지막 명령어다. 이것은 IST 스택에 프로세서가 직접 쌓아준 여러 레지스터 데이터들(Flags, CS, SS, RIP, RSP)를 한 꺼번에 복구시키는 명령어다. ▷ IDT 인터럽트 게이트 디스크립터 테이블에 우리는 인터럽트 핸들러 함수의 포인터를 저장하고, CS(코드 세그먼트 설렉터)와 IST, DPL, 타입을 저장한다. 이때 타입에는 인터럽트/트랩 두 종류 중 하나를 선택할 수 있는데, 보통 인터럽트를 선택한다. 트랩은 인터럽트 핸들러 수행 도중에 다른 인터럽트를 또 받을 수 있게 설정하는 것이다. 인터럽트는 핸들러 수행 도중에 다른 인터럽트 신호 발생 시 무시하는 역할을 수행한다. ▷ 인터럽트 타입은 해당 인터럽트 신호가 발생.. 2024. 11. 21.
OS 배운거 정리 2024.10.29 - rex, 오퍼랜드 사이즈 접두사 개념 - 멀티코어 원리 책 읽고 추가 내용 정리한 것. (3장 내용)- 원래 리얼모드나 32비트 모드에서 32비트, 그리고 64비트 레지스터나 값에 접근하는 것은 불가능함. 16비트 프로세서가 32비트 값을 메모리에서 읽어와서 레지스터에 저장할 수는 없음.- 하지만 64비트 프로세서는 이론적으로는 이런 명령어 실행이 가능하긴 함. 그래서 64비트 모드의 경우, 설령 리얼모드 혹은 보호모드에서 동작하는 코드라고 하더라도 접두사를 통해 다양한 크기의 레지스터에 접근할 수 있도록 허락함.- 이게 86페이지의 표에 나타나 있음.- 내가 어셈블리어로 코딩한 값을 어떤 크기로 읽어야 하는지 알려주는 개념.. 접두사를 사용하면 리얼모드와 보호모드에서 확장된 크기의 값을 사용할 수 있음. 즉, 16비트 모드에서 mov ea.. 2024. 10. 29.