備忘録

備忘録

C/C++

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のバージョンを取得する

Ⅰ. はじめに タイトルの通り「C++でWindowsのバージョンを取得する」方法です。 Ⅱ. サンプルプログラム #include <Windows.h> #include <iostream> typedef LONG NTSTATUS, *PNTSTATUS; #define STATUS_SUCCESS (0x00000000) #define OS_ANYSERVER 29 typedef NTSTATUS(WINAPI* Rt</iostream></windows.h>…

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

Ⅰ. はじめに タイトルの通り「C++でプロセス名からプロセスIDを取得する」方法です。 Ⅱ. サンプルプログラム #include <Windows.h> #include <tlhelp32.h> #include <iostream> DWORD GetProcessIdByName(const wchar_t *processName) { auto entry = PROCESSENTRY32{ sizeof(PROCESSENTRY32) </iostream></tlhelp32.h></windows.h>…

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 実行結果 Ⅴ. POST(JSON) 実行結果 Ⅵ. POST(form-urlencoded) 実行結果 その他 Ubuntuでコンパイルする時 参考 Ⅰ. はじめに .NET系 であれば WebClient や HttpCli…

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++で複数プロセスから読み書き可能な共有メモリを作る

Ⅰ. はじめに あるプロセスのメモリ空間には他のプロセスからアクセスする事ができません。 OpenProcess してアクセス権を得てもメモリ上のどのアドレスに何のデータが保存されているか簡単に分かりません。 この問題は複数プロセスで共有して使えるメモリ空…

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> int main</fstream></iostream>…

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

Ⅰ. はじめに C#(EXE)からC++(DLL)の関数を呼び出す方法です。 いわゆる P/Invoke です。Win32 API の P/Invoke はこのサイトを利用してコピペしたほうが早いです。 http://www.pinvoke.net/ Ⅱ. サンプル dllexport.def EXPORTS GetInt GetIntArray GetString…

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

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