備忘録

備忘録

C/C++

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

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

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

Ⅰ. はじめに タイトルの通り「C++で正規表現を利用する方法」です。 Ⅱ. やり方 1. サンプルプログラムを書く Source.cpp #include <iostream> #include <regex> int main() { std::wstring str(L"key01=value02&key02=value02"); std::wsmatch m; std::wregex pattern(LR"((ke</regex></iostream>…

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…

C/C++ パッケージマネージャvcpkgの使い方

Ⅰ. はじめに Ⅱ. インストール方法 Ⅲ. 使い方 パッケージをインストールする Windows 32bit 動的リンク用のパッケージをインストールする Windows 64bit 動的リンク用のパッケージをインストールする Windows 64bit 静的リンク用のパッケージをインストールす…

VC++ビルド時にMSB8038, LNK1104が出る場合の解決方法

Ⅰ. はじめに Ⅱ. 解決方法1(Spectre 軽減策オプションを「無効」にする) Ⅲ. 解決方法2 1. Visual Studio Installer を起動する 2. Libs for Spectre(x86 and x64) をインストールする Ⅰ. はじめに タイトルの通り「VC++ビルド時にMSB8038, LNK1104が出る場…

botanをWindowsでビルドする方法

Ⅰ. はじめに タイトルの通り「botanをWindowsでビルドする方法」です。 Ⅱ. 環境(必要なもの) ・Visual Studio 2017 Community (C++) ・Python 2.6以降 Ⅲ. やり方 1. リポジトリを clone する git clone https://github.com/randombit/botan 2. 「VS 2017用…

Pythonでダイナミックリンクライブラリを利用する方法

Ⅰ. はじめに Ⅱ. やり方 1. ダイナミックリンクライブラリを作成する 2. Pythonから呼び出す 実行結果 Ⅲ. 関数名に記号が入っている場合について 参考 Ⅰ. はじめに タイトルの通り「Pythonでダイナミックリンクライブラリを利用する方法」です。 Ⅱ. やり方 1.…

C++でHTTPサーバ、クライアントを作る方法

Ⅰ. はじめに Ⅱ. HTTPサーバ サンプルプログラム 実行結果 Ⅲ. HTTPクライアント サンプルプログラム 実行結果 参考 Ⅰ. はじめに タイトルの通り「C++でHTTPサーバ、クライアントを作る方法」です。以下のライブラリを使います。 https://github.com/yhirose/c…

タスクトレイのアイコンを消す方法

Ⅰ. はじめに タイトルの通り「タスクトレイのアイコンを消す方法」です。 Ⅱ. やり方 C++の場合 #include <Windows.h> int main() { auto hWnd = FindWindow(L"ApplicationWindow", NULL); NOTIFYICONDATA data; data.cbSize = sizeof(NOTIFYICONDATA); data.hWnd = hWnd</windows.h>…

C++でLINQを使う方法(cpplinqの使い方)

Ⅰ. はじめに タイトルの通り「C++でLINQを使う方法(cpplinqの使い方)」です。 Ⅱ. 使い方 1. GitHubから cpplinq.hpp をダウンロードする https://github.com/mrange/cpplinq 2. サンプルプログラムを書く #include <iostream> #include <list> #include <algorithm> #include <string> #includ</string></algorithm></list></iostream>…