備忘録

備忘録

C/C++

cpprestsdkを利用してWebサーバを構築する方法

Ⅰ. はじめに タイトルの通り「cpprestsdkを利用してWebサーバを構築する方法」です。 Ⅱ. サンプルプログラム #include <Windows.h> #include <iostream> #include <format> #include <cpprest/http_listener.h> int main() { SetConsoleOutputCP(CP_UTF8); auto address = utility::conversions::to_string_t("http:</cpprest/http_listener.h></format></iostream></windows.h>…

C言語+Linuxで任意ネットワークインターフェイスを指定してTCP接続する方法

Ⅰ. はじめに タイトルの通り「C言語+Linuxで任意ネットワークインターフェイスを指定してTCP接続する方法」です。 Ⅱ. 手順 1. サンプルプログラムを書く main.c #include <stdio.h> #include <unistd.h> #include <sys/socket.h> #include <arpa/inet.h> #include <errno.h> int main() { int sock = socket(PF_INET,</errno.h></arpa/inet.h></sys/socket.h></unistd.h></stdio.h>…

C++(EXE)からC#(DLL)の関数を呼び出す方法(.NET 7 AOT利用)

Ⅰ. はじめに タイトルの通り「C++(EXE)からC#(DLL)の関数を呼び出す方法(.NET 7 AOT利用)」です。 Ⅱ. 手順 1. C#(DLL)のサンプルプログラムを書く Program.cs using System.Runtime.InteropServices; namespace MyDLL { public class MyCalss { [Unmanaged…

Windowsでプロセスを終了する方法

Ⅰ. はじめに Ⅱ. 方法 1. msvcrt.abort 2. msvcrt.exit 3. kernel32.ExitProcess 4. ntdll.RtlExitUserProcess 5. ntdll.NtTerminateProcess (ZwTerminateProcess) 6. syscall Ⅲ. 方法(ウィンドウ系) 1. user32.PostQuitMessage 2. win32u.NtUserCallOnePar…

C++で.NETのBinaryReaderのような事をする方法

Ⅰ. はじめに タイトルの通り「C++で.NETのBinaryReaderのような事をする方法」です。 Ⅱ. サンプルプログラム #include <iostream> #include <string> class BinaryReader { private: uint8_t *p; public: BinaryReader(uint8_t *data) { this->p = data; } template<typename T> T read() {</typename></string></iostream>…

C++17でstd::mapをforループさせる方法

Ⅰ. はじめに タイトルの通り「C++17でstd::mapをforループさせる方法」です。 Ⅱ. やり方 1. サンプルプログラム std::map<int, int> items; items.insert(std::make_pair(1, 1)); items.insert(std::make_pair(2, 2)); items.insert(std::make_pair(3, 3)); for (const</int,>…

C++でSHA256ハッシュを計算する方法

Ⅰ. はじめに タイトルの通り「C++でSHA256ハッシュを計算する方法」です。 Ⅱ. やり方 1. 必要なパッケージをインストールする vcpkg install botan 2. サンプルプログラムを書く #include <botan/hash.h> // #include <botan/hex.h> #include <botan/base64.h> #include <iostream> std::string sha256(std::string</iostream></botan/base64.h></botan/hex.h></botan/hash.h>…

Androidの共有ライブラリをAndroid以外のOSで利用する方法

Ⅰ. はじめに Ⅱ. やり方 1. 共有ライブラリのサンプルプログラムを書く 2. 1をコンパイルする 3. 共有ライブラリを利用するサンプルプログラムを書く 実行結果 FAQ Q. unidbgはスレッドセーフですか? Q. Java以外はありますか? 参考 Ⅰ. はじめに AndroidはL…

C++で正規表現を利用する方法

Ⅰ. はじめに Ⅱ. 1回マッチさせたい場合 サンプルプログラム 実行結果 Ⅲ. 複数マッチさせたい場合 サンプルプログラム 実行結果 Ⅰ. はじめに タイトルの通り「C++で正規表現を利用する方法」です。 Ⅱ. 1回マッチさせたい場合 サンプルプログラム Source.cpp /…

Visual Studio 2019のC++/CLIでWindows Formを利用する方法

Ⅰ. はじめに タイトルの通り「Visual Studio 2019のC++/CLIでWindows Formを利用する方法」です。 Ⅱ. やり方 1. Visual Studio インストーラーを起動する 2. v142 ビルド ツール用 C++/CLI サポートをインストールする 3. 新規C++/CLIプロジェクトを作成する…

mongooseを利用してHTTPサーバを構築する方法

Ⅰ. はじめに タイトルの通り「mongooseを利用してHTTPサーバを構築する方法」です。 Ⅱ. やり方 1. サンプルプログラムを書く #include <iostream> #include <winsock2.h> #pragma comment(lib, "ws2_32.lib") extern "C" { #include <mongoose.h> } static void fn(struct mg_connection* c, in</mongoose.h></winsock2.h></iostream>…

VisualStudioを利用してAndroidで実行可能な実行ファイルをC++で作成する方法

Ⅰ. はじめに タイトルの通り「VisualStudioを利用してAndroidで実行可能な実行ファイルをC++で作成する方法」です。 Ⅱ. やり方 1. Visual Studio Installerを起動する 2. 「C++ によるモバイル開発」をインストールする 3. 「メイクファイル プロジェクト(A…

AndroidStudioを利用してAndroidで実行可能な実行ファイルをC++で作成する方法

Ⅰ. はじめに タイトルの通り「AndroidStudioを利用してAndroidで実行可能な実行ファイルをC++で作成する方法」です。 Ⅱ. やり方 1. 新規Native C++プロジェクトを作成する 2. CMakeLists.txtを編集する $(project_root)/app/src/main/cpp/CMakeLists.txt cma…

C++のHTTPサーバ、HTTPクライアントライブラリ一覧

Ⅰ. はじめに タイトルの通り「C++のHTTPサーバ、HTTPクライアントライブラリ一覧」です。 Ⅱ. 一覧 cpprestsdk HTTP Server/Client C++でHTTP(S)でGET/POSTする(cpprestsdk の使い方) cpprestsdk をビルドしてstatic linkする cpp-httplib HTTP Server/Clie…

C++でWindows上の特定プロセスの全モジュールを取得する方法

Ⅰ. はじめに Ⅱ. サンプルプログラム1(EnumProcessModulesExを使用する方法) Ⅲ. サンプルプログラム2(CreateToolhelp32Snapshotを使用する方法) Ⅳ. サンプルプログラム3(NtQueryInformationProcessを使用する方法) Ⅴ. 実行結果 Ⅵ. 留意点 参考 Ⅰ. はじ…

C++でWindows上の特定プロセスの全スレッドIDを取得する方法

Ⅰ. はじめに タイトルの通り「C++でWindows上の特定プロセスの全スレッドIDを取得する方法」です。 Ⅱ. サンプルプログラム #include <Windows.h> #include <tlhelp32.h> #include <iostream> #include <vector> #include <algorithm> std::vector<uint32_t> GetAllThreadIds(uint32_t processId) { std::vector<uint32_t> threadIds; T</uint32_t></uint32_t></algorithm></vector></iostream></tlhelp32.h></windows.h>…

C++でjoinする方法

Ⅰ. はじめに タイトルの通り「C++でjoinする方法」です。 Ⅱ. やり方 1. 必要なパッケージをインストールする vcpkg install fmt 2. サンプルプログラムを書く #include <fmt/format.h> #include <iostream> int main() { auto delimiter = ","; auto items = { "a", "b", "c" }; auto</iostream></fmt/format.h>…

C++でクリップボードに文字列をコピーする方法

Ⅰ. はじめに タイトルの通り「C++でクリップボードに文字列をコピーする方法」です。 Ⅱ. やり方 1. サンプルプログラムを書く #include <Windows.h> #include <iostream> void copy(const wchar_t *str) { auto len = (wcslen(str) + 1) * 2; auto hMem = reinterpret_cast<HGLOBAL>(Global</hglobal></iostream></windows.h>…

C++でzlibの圧縮と展開を行う方法

Ⅰ. はじめに タイトルの通り「C++でzlibの圧縮と展開を行う方法」です。 Ⅱ. やり方 1. zlibをインストールする vcpkg install zlib:x64-windows 2. サンプルプログラムを書く #include <Windows.h> #include <iostream> #include <sstream> #include <fstream> #include <zlib.h> constexpr auto BUFFER_SIZE</zlib.h></fstream></sstream></iostream></windows.h>…

WindowsでLuaから呼び出し可能なライブラリをC++で作成する方法

Ⅰ. はじめに Ⅱ. やり方 1. luaのライブラリをインストールする 2. モジュール定義ファイルを指定する 3. サンプルプログラムを書く 実行結果 参考 Ⅰ. はじめに タイトルの通り「WindowsでLuaから呼び出し可能なライブラリをC++で作成する方法」です。 Ⅱ. や…

InfinityHook を利用して Windows の syscall を hook する方法

Ⅰ. はじめに Ⅱ. やり方 1. clone する 2. コンパイルする 3. 実行する 実行結果 FAQ Q. hook できません。 参考 Ⅰ. はじめに Windows の syscall を hook するメジャーな方法は SSDT Hook です。 しかし、Windows にはカーネル領域の改ざんを検知する仕組み…

Windows カーネルドライバでプロセスメモリを読み書きする方法

Ⅰ. はじめに タイトルの通り「Windows カーネルドライバでプロセスメモリの読み書きをする方法」です。 Ⅱ. サンプルプログラム https://github.com/kagasu/KMMM 実行結果 ① プロセスメモリの読み込みに成功し、「value 100」が出力された ② プロセスメモリの…

Windows Kernel Driver で HelloWorld する方法

Ⅰ. はじめに Ⅱ. やり方 1. Windows Driver Kit(WDK) をインストールする 2. Kernel Mode Driver, Empty(KMDF) の新規プロジェクトを作成する 3. サンプルプログラムを書く 4. 実行する 実行結果 FAQ Q. 以下のメッセージが表示され、ドライバの実行ができな…

Thread Hijacking を利用して他プロセスの関数を呼び出す方法

Ⅰ. はじめに タイトルの通り「Thread Hijacking を利用して他プロセスの関数を呼び出す方法」です。 Ⅱ. サンプルプログラム x86とx64に対応しています https://github.com/kagasu/ThreadHijacking

WOW64 syscall をhookする方法

Ⅰ. はじめに タイトルの通り「WOW64 syscall をhookする方法」です。 Ⅱ. サンプルプログラム https://github.com/kagasu/WOW64SyscallHook 参考 https://github.com/mq1n/Wow64SyscallHook http://www.codereversing.com/blog/archives/243 http://www.coder…

C++でJSONを扱う方法

Ⅰ. はじめに タイトルの通り「C++でJSONを扱う方法」です。ライブラリは cereal を利用します。 cereal は JSON 出力だけでなく、XMLやバイナリ出力にも対応しています。 Ⅱ. やり方 1. vcpkg で cereal をインストールする vcpkg install cereal 2. サンプル…

Qt + VisualStudio2019 + C++ で HelloWorldする方法

Ⅰ. はじめに Ⅱ. やり方 1. Qt5 のインストーラをダウンロードする 2. Qt5 をインストールする 3. 「MSVC v141 VS 2017 C++ x64/x86 ビルドツール」をインストールする 4. Qt Visual Studio Tools をインストールする 5. Qt Options から、Qtのディレクトリを…

C++でUUID(v4)を生成する方法

Ⅰ. はじめに Ⅱ. やり方(Botanを利用する場合) 1. Botanをインストールする 2. サンプルプログラムを書く 3. 実行結果 Ⅲ. やり方(Windowsのみ) 1. サンプルプログラムを書く 2. 実行結果 参考 Ⅰ. はじめに タイトルの通り「C++でUUID(v4)を生成する方法」…

C++でAESの暗号化と複合を行う方法

Ⅰ. はじめに タイトルの通り「C++でAESの暗号化と複合を行う方法」です。 Ⅱ. やり方 1. botanをインストールする vcpkg install botan 2. サンプルプログラムを書く #include <iostream> #include <botan/pipe.h> #include <botan/key_filt.h> #include <botan/hex_filt.h> #include <botan/b64_filt.h> // #include <botan/hex.h> #include <botan/base64.h> using namesp</botan/base64.h></botan/hex.h></botan/b64_filt.h></botan/hex_filt.h></botan/key_filt.h></botan/pipe.h></iostream>…

C++でBase64をエンコード、デコードする方法

Ⅰ. はじめに Ⅱ. やり方 1. botanをインストールする 2. サンプルプログラムを書く 2. サンプルプログラムを書く(Pipeを利用する方法) 3. 実行結果 参考 Ⅰ. はじめに タイトルの通り「C++でBase64をエンコード、デコードする方法」です。 Ⅱ. やり方 1. bota…