備忘録

備忘録

C/C++

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>…

Linuxで他プロセスのメモリを読み書きする方法

Ⅰ. はじめに タイトルの通り「Linuxで他プロセスのメモリを読み書きする方法」です。 Windowsの場合はOpenProcessしてプロセスのハンドルを取得した後にReadProcessMemory, WriteProcessMemoryすればOKです。 Ⅱ. サンプルプログラム メモリを読み書き「され…

VisualStudioでx64アセンブリを書き、実行する方法

Ⅰ. はじめに 2018/01/03時点、VisualStudioでプラットフォームをx64と指定した場合インラインアセンブリ(__asm)がサポートされていない為使えません。 エラー C4235 非標準の拡張機能が使用されています: '__asm' キーワードはこのアーキテクチャではサポ…

C++(EXE)からC#(DLL)の関数を呼び出す

Ⅰ. はじめに Ⅱ. 「C++/CLIを使う」方法 1. C++のプロジェクト設定を開き「共通言語ランタイム サポート (/clr)」に変更する 2. サンプルプログラム 3. 実行結果 Ⅲ. 「C#(DLL)側で関数をエクスポートする」方法 1. サンプルプログラム 2. DllExport.bat をダ…

呼出規約とは

Ⅰ. はじめに Ⅱ. 環境 Ⅲ. 呼出規約(calling convention)とは Ⅳ. cdecl main.cpp 逆アセンブル ポイント リバースエンジニア向けのポイント Ⅴ. stdcall main.cpp 逆アセンブル ポイント リバースエンジニア向けのポイント Ⅵ. fastcall main.cpp 逆アセンブル …

Windowsでsyscallする方法

Ⅰ. はじめに タイトルの通り「Windowsでsyscallする方法」です。 この記事はWOW64を対象とした内容になっています。 x64向けはこちら http://kagasu.hatenablog.com/entry/2018/01/03/200337 Ⅱ. 環境 Windows 10 64bit 1709 Ⅱ. サンプルプログラム サンプル…

C++でWindowsのバージョンを取得する

Ⅰ. はじめに Ⅱ. 方法1 Ⅱ. 方法2 Ⅲ. 実行結果 参考 Ⅰ. はじめに タイトルの通り「C++でWindowsのバージョンを取得する」方法です。 Ⅱ. 方法1 以下レジストリの値を読み取る (サンプルプログラム省略) HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\Cur…

C++でプロセス名からプロセスIDを取得する

Ⅰ. はじめに Ⅱ. サンプルプログラム 1. CreateToolhelp32Snapshot を利用する場合 2. EnumProcesses を利用する場合 3. NtQuerySystemInformationを使用する方法 Ⅲ. 実行結果 Ⅰ. はじめに タイトルの通り「C++でプロセス名からプロセスIDを取得する」方法で…

C++ リンカエラーを非表示にする方法

Ⅰ. はじめに タイトルの通り「C++ リンカエラーを非表示にする方法」です。 型キャスト等で出力されるコンパイラ警告は以下の一行で非表示にできますが、リンカエラーは #pragma では不可能です。 #pragma warning(disable:4312) コンパイラ警告の例 「C4312…

cpprestsdk をビルドしてstatic linkする

Ⅰ. はじめに cpprestsdk の使い方はこちらcpprestsdk はNuGetで dynamic link 版が配布されています。 static link 版は配布されていません。static link する為には2017/10/08時点、自分でビルドするしか方法がありません。 Ⅱ. 必要なもの VisualStudio 201…

C++でHTTP(S)でGET/POSTする(cpprestsdk の使い方)

Ⅰ. はじめに Ⅱ. なぜ「C++ RESET SDK(cpprestsdk)」を選んだのか Ⅲ. インストール方法 Ⅳ. GET(同期) Ⅴ. GET(非同期) 実行結果 Ⅵ. POST(JSON)(非同期) 実行結果 Ⅶ. POST(form-urlencoded) 実行結果 その他 Ubuntuでコンパイルする時 参考 Ⅰ. はじめに .…

OpenSSLをWindowsでビルドする方法

Ⅰ. はじめに タイトルの通り「OpenSSLをWindowsでビルドする方法」です。 コンパイル済みライブラリだけ欲しい人はこちら Ⅱ. 環境(必要なもの) ・Visual Studio 2017 Community (C++) ・Perl(ActivePerl を利用しました) ・OpenSSL 1.0.2l のソースコー…

WindowsでPOCO C++をビルドして使う

https://pocoproject.org/ Ⅰ. はじめに 「POCO C++」はモダンで強力なC++ライブラリです。 XML JSON Zip DB (SQLite, ODBC, MySQL) Foundation(基本機能ライブラリ Base64変換等) 等の機能があります。 Ⅱ. 1つづつビルドする方法 1. ソースコードをダウンロ…

C++ で全ての例外を try catch 出来るようにする方法

Ⅰ. はじめに Visual Studioのデフォルト設定ではWindowsが発行する「システム的な例外」を捉えることはできません。 無効なメモリアドレスへのアクセス 0での割り算 等が「システム的な例外」に該当します。また、「『システム的な例外』をプログラム上で扱…

C++で複数プロセスから読み書き可能な共有メモリを作る

Ⅰ. はじめに Ⅱ. サンプル 1. 共有メモリにデータを書き込むだけのプログラム 2. 共有メモリからデータを読み込むだけのプログラム Ⅲ. カーネルモードについて Ⅳ. 実行結果 その他 Ⅰ. はじめに あるプロセスのメモリ空間には他のプロセスからアクセスする事が…

C++でShift-JIS, UTF-8, UTF-16 BOM有無とエンディアンを考慮してファイルの読み込みをする

Ⅰ. はじめに Ⅱ. 環境 Ⅲ. プログラム Shift-JIS UTF-8 (BOM なし) UTF-8 (BOM あり) UTF-16 リトルエンディアン (BOM なし) UTF-16 リトルエンディアン (BOM あり) UTF-16 ビッグエンディアン (BOM なし) UTF-16 ビッグエンディアン (BOM あり) Ⅲ. 参考 Ⅰ. は…

C++ ファイルを全て読み込む

Ⅰ. はじめに STL を使ってファイルを全て読み込む(全行読み込む)方法です。※追記 C++でShift-JIS, UTF-8, UTF-16 BOM有無とエンディアンを考慮してファイルの読み込みをする - 備忘録 Ⅱ. サンプル test.txt aiueo Source.cpp #include <iostream> #include <fstream> #include <string></string></fstream></iostream>…

C#(EXE)からC++(DLL)の関数を呼び出す方法

Ⅰ. はじめに Ⅱ. 関数をエクスポートする方法(P/Invoke) 1. サンプルプログラム 2. 実行結果 3. DllImportの呼出規約について Ⅲ. C++/CLIを利用する方法 1. サンプルプログラム 2. 実行結果 Ⅰ. はじめに C#(EXE)からC++(DLL)の関数を呼び出す方法です。方法…

Windows C++ 高速にメモリサーチを行う方法

Ⅰ. はじめに ある特定範囲の最初から最後までをサーチをする場合、 メモリを確保していない場所までサーチするため非常に遅くなります。VirtualQueryExを使うと、 メモリのアクセス権の状態などによって分岐を行えるため、 非常に高速にメモリサーチを行うこ…