프로그래밍
-
🧰 C++11 std::atomic 표준 라이브러리프로그래밍/C/C++ 2023. 6. 1. 09:13
std::atomic은 멀티스레딩 환경에서 안전하게 변수를 접근할 수 있도록 하는 C++의 표준 라이브러리 클래스입니다. 이 클래스는 다양한 변수 타입(int, float, bool 등)에 대한 원자적인 조작(atomic operation)을 제공합니다. 💡 std::atomic의 특징 std::atomic은 다음과 같은 특징을 가지고 있습니다. 멀티스레딩 환경에서 안전하게 변수를 접근할 수 있습니다. 이 클래스를 사용하면 변수에 대한 동기화를 수동으로 처리할 필요가 없으므로, 코드를 간단하게 유지할 수 있습니다. std::atomic은 원자적인 조작(atomic operation)을 제공합니다. 원자적인 조작은 하나의 스레드에서 실행 중인 코드가 중단되지 않고, 전체적으로 원자적으로 실행되는 코드 블록..
-
DLL 라이브러리에서 (DLL Export Function) 함수 이름 숨기기프로그래밍/해킹/보안 2023. 4. 5. 21:37
C/C++ 기반으로 DLL을 만들어서 공유 라이브러리로 사용하면 어쩔 수 없이 C 함수를 노출시키는 경우가 흔하다. 하지만 이거는 보안상 아주 위험한 짓이다. 왜냐? 일반적인 DLL 같은 경우는 `Export Table` 정보가 그대로 저장이 되기 때문이다. 솔루션 회사에서 만약 본인들의 DLL 모듈의 Export 함수가 존재할 때, 이 함수의 정보를 외부로 노출 시킨다고 생각해보자. 악의적인 목적으로 누군가가 DLL Export Table 정보를 쭉 확인하고 함수 이름으로 이 DLL의 기능을 추측할 수 있다는거다. 이때 그러면 DLL Export Function 이름을 대충 만들면되는거 아니야? 라고 한다면 할 말이 없다. SecretFunction_1, SecretFunction_2, SecretFu..
-
러스트에서 단순 입출력 구현해보기프로그래밍/Rust 2023. 4. 3. 23:57
use std::io; fn main() { println!("Guess the number !"); println!("Please input your guess."); let mut guess = String::new(); io::stdin().read_line(&mut guess); println!("You guessed : {}", guess); } 코드는 일단 위와 같습니다. 코드를 한줄한줄 해석해보자면, use std::io ; use 를 사용하여 명시적으로 해당 타입을 가져옵니다. std::io 는 사용자 입출력과 관련된 기능들을 제공합니다. let mut guess = String::new(); let foo = bar foo 라는 변수를 선언합니다. foo 라는 변수를 bar 라는 변수와 ..
-
러스트(Rust) 프로젝트 만들기프로그래밍/Rust 2023. 4. 3. 23:39
러스트 프로그래밍 시작을 위한 디렉토리를 생성합니다. 아래 명령어를 순서대로 적어 러스트 프로젝트 경로를 만들고, 해당 경로로 이동합니다. 저 같은 경우 위에 Cmd 를 통해 경로를 만들고, VSCode를 통해 작업했습니다. 1. 소스코드 작성 main.rs (Rust Source Code)를 만들고 아래 코드를 입력합니다. fn main() { println!("Hello, world!"); } 2. 빌드(컴파일) 및 실행 rustc main.rs ./main 3. 실행 결과 확인 자 이제 위에 작성된 전체적인 코드를 분석해보겠습니다. (딱히 분석해볼만한 것도 없지만) println!("Hello, world!"); 위 짧은 코드 한줄이 이 프로그램의 모든 일을 합니다. " " 사이에 존재하는 내용을 ..
-
Windows Rust 프로그래밍 언어 설치하기프로그래밍/Rust 2023. 4. 3. 23:11
러스트 설치는 간단합니다. https://www.rust-lang.org/learn/get-started Getting started A language empowering everyone to build reliable and efficient software. www.rust-lang.org 위 페이지에 접속을 해서 본인 OS에 맞는 러스트(Rust)를 설치합니다. 저 같은 경우는 Windows 64Bit 러스트를 설치했습니다. 이렇게 설치 과정이 진행됩니다. 설치는 일반적으로 어려움이 없어요. 그대로 엔터만 눌러주시면 됩니다 ㅎㅎ ! 이후 cmd 창을 열어 아래 명령어를 작성해서 Rust 설치가 정상적으로 되었는지 확인합니다. cargo --version 이렇게 나오면 정상적으로 설치가 완료된겁니다.
-
🖥️ C++에서 윈도우 프로그램 동시 실행 방지하기프로그래밍/C/C++ 2023. 2. 28. 13:25
C++에서 윈도우 프로그램을 개발할 때 중복 실행을 방지하는 방법 중 가장 간단한 방법은 CreateMutex 함수를 사용하는 것입니다. #include int main() { HANDLE hMutex; hMutex = CreateMutex(NULL, TRUE, "MyMutex"); if(GetLastError() == ERROR_ALREADY_EXISTS) { MessageBox(NULL, "이미 실행 중입니다.", "알림", MB_OK); return 0; } // 중복 실행이 아닐 때 실행할 코드 작성 ... ReleaseMutex(hMutex); CloseHandle(hMutex); return 0; } 위 코드에서 CreateMutex 함수를 이용하여 뮤텍스 객체를 생성합니다. 이 때, 뮤텍스 ..
-
C++20 코루틴 기능을 활용한 비동기 프로그래밍 예제프로그래밍/C/C++ 2023. 2. 23. 10:03
✨C++로도 비동기 프로그래밍을 구현할 수 있어요!✨ C++11부터는 C++ 표준 라이브러리에 스레드, 뮤텍스, 조건 변수와 같은 다중 스레드 지원 기능이 추가되어, 비동기 프로그래밍을 구현할 수 있게 되었어요! 또한 C++11에서는 표준 라이브러리에 비동기 처리를 위한 기능들을 추가했습니다. C++11에서 추가된 비동기 처리 기능은 std::async, std::future, std::promise, std::packaged_task 등이 있어요. std::async를 사용하면 비동기 함수 호출을 간단하게 작성할 수 있고, std::future를 사용하여 비동기 함수 호출 결과를 받을 수 있어요. 또한, std::promise와 std::packaged_task를 사용하여 비동기 함수 호출 결과를 만들..
-
C++ std::thread와 std::mutex를 사용한 멀티스레딩 예제프로그래밍/C/C++ 2023. 2. 22. 11:23
std::thread는 C++11부터 추가된 표준 라이브러리 클래스로, 멀티스레드 프로그래밍을 쉽게 구현할 수 있도록 도와줍니다. std::thread 클래스는 스레드를 생성하고, 실행시키며, 종료시키는 등의 다양한 기능을 제공합니다. std::thread를 사용하면, 별도의 스레드를 생성하여 해당 스레드에서 작업을 수행할 수 있습니다. 예를 들어, 주 스레드에서는 사용자 인터페이스를 처리하고, 별도의 스레드에서는 파일 입출력 또는 계산 등의 작업을 수행하는 것이 가능합니다. std::thread는 스레드 생성 시 실행될 함수(또는 람다 표현식)와 인수를 전달하여 스레드를 생성할 수 있습니다. 생성된 스레드는 join 함수를 사용하여 종료될 때까지 대기하거나, detach 함수를 사용하여 분리(detac..