2019年11月27日水曜日

備忘録:Windwosの共有メモリの詳細なサイト

備忘録として、Windwosの共有メモリの詳細なサイトのURLを残す。

共有メモリの解説として
http://chokuto.ifdef.jp/advanced/sharedmem.html

サンプルコードとして
https://www.wabiapp.com/WabiSampleSource/windows/shared_memory.html

2019年10月17日木曜日

VisualStudoでコンパイル時にVisual C++ランタイムを静的リンクする方法

■前提条件
・Visual Studio C++環境

■手順
※Visual Studioのバージョンが異なっても同じはず。自分はVisual Studio Pro 2008 C++で確認した。

1.VisualStudoを起動する
2.[メニュー」→「プロジェクト」→「xxxx のプロパティ」
  →xxxx のプロパティページ ダイアログが表示する
.[構成プロパティ]→「C/C++」→[コード生成]→[ランタイムライブラリ]
  →「マルチスレッド DLL (/MD)」に変更する。

■静的リンク
「マルチスレッド (/MT)」
「マルチスレッド デバッグ (/MTd)」

■動的リンク
「マルチスレッド DLL (/MD)」
「マルチスレッド デバッグ DLL (/MDd)」

Release版
「マルチスレッド (/MT)」
「マルチスレッド DLL (/MD)」

Debug版
「マルチスレッド デバッグ (/MTd)」
「マルチスレッド デバッグ DLL (/MDd)」


参考サイト
動的リンクと静的リンクについて
https://ohwhsmm7.blog.fc2.com/blog-entry-78.html

2019年10月16日水曜日

OpenSSL1.1.1c(TLS.1.3対応版)のビルド(VisualStudio 2019版)

【ビルド環境】
Visual Studio Pro 2019

【準備】
1)Perlインストール
1-1) Perlをインストールする。選択肢はデフォルトで実施。
link:https://www.activestate.com/activeperl/downloads

1-2)コマンドプロンプト上でバージョン確認。
perl --version

2)NASMインストール
2-1)NASMをインストールする。
link:http://www.nasm.us/

2-2)nasmのzipをダウンロードし、解凍する。
※openSSLビルド環境構築先が、Win10x64なので、nasm-2.14.02-win64.zipをダウンロード。

2-3)NASMのインストール先フォルダを、環境変数の「Path」に追加する。

2-4)コマンドプロンプト上でバージョン確認。
nasm --version

3)OpenSSL
3-1)OpenSSLのソースコードをダウンロードする。
link:https://www.openssl.org/source

3-2) OpenSSLのソースコードを解凍する。
解凍先例:C:\build_openssl\openssl-1.1.1c

3-3)OpenSSLコンパイル生成先フォルダを作成する。
例:C:\build_openssl\output\openssl_v1.1.1c\win\x86

【ビルド手順】
1) スタートメニューから「x64_x86 Cross Tools Command Prompt for VS 2019」を起動する。
2) cdコマンドでOpenSSLのソースコードのフォルダへ移動する。
コマンド例)cd C:\build_openssl\openssl-1.1.1c

3) perlのコマンドを実行する。
コマンド例)perl Configure VC-WIN32 --prefix=C:/openssl/win/x86
→Windwos32ビット版OpenSSLがビルドする。今回はWindwos32ビット版のOpenSSLが必要だったので、こっちを指定する。

蛇足だが、Visual C++ランタイムを静的リンクする際は、以下のコマンドでできるみたい。
コマンド例)perl Configure VC-WIN32 --prefix=C:/build_openssl/output/openssl_v1.1.1c/win/x86 "CFLAGS=/W3 /wd4090 /nologo /O2 /WX /MT"

"CFLAGS=/MT"の指定は、C:\build_openssl\openssl-1.1.1c\makefileのCFLAGSの設定になるみたい。

4) nmake installを実行する。

参考サイト
ビルド時のコマンド
https://www.sumirelab.com/docs/tech/windows-%E3%81%A7-openssl-%E3%81%AE%E3%83%93%E3%83%AB%E3%83%89%E3%83%A1%E3%83%A2/

生成物について
http://lfsbookja.osdn.jp/svn-sysdja/chapter06/openssl.html

Visual C++ランタイムの静的リンク
https://www.picolix.jp/blog/2018/12/openssl-111a-tls-13-smail-tls-13.html

2019年9月20日金曜日

python メモ

pythonの備忘録を記載する

--------------------------------------------------------------------------------------------
メモ
--------------------------------------------------------------------------------------------
■比較演算子
A in B AがB(リストやタプル)に含まれている時にTrueを返す

■python while文 for文の使い分け
[for文]
ループする回数が判明してるに使う。
例えば、リストの総要素回数

[while文]
ループする回数が判明していない時に、条件式を規定して、ループする。

■pyhon アンパック1
hoge = (0, 1, 2)

a, b, c = hoge

print(a)
print(b)
print(c)
>> 0
>> 1
>> 2

hoge = [0, 1, 2]

a, b, c = hoge

print(a)
print(b)
print(c)
>> 0
>> 1
>> 2

■pyhon アンパック2
タプルは丸括弧を省略可。以下のように複数の変数に複数の値を1行で代入できる。

a, b = 0, 1

print(a)
print(b)
>> 0
>> 1

■pycharn ショートカット
・コードの整形( Ctrl + Alt + L )
・コメントアウト( Ctrl + / )
・関数や変数の名前変更( Shift + F6 )
・関数などの定義を確認する( Ctrl + Shift + I )
・ファイルの新規作成( Alt + Insert )
・クリッップボード履歴(Ctrl + Shift + V )
・タブ移動( Ctrl + Tab )
・コードの改善提案の表示( Alt + Enter )

2019年9月19日木曜日

Visual Studio

Visual Studioの備忘録を記載する

--------------------------------------------------------------------------------------------
ショートカット
--------------------------------------------------------------------------------------------
■指定行への移動
ctrl+g

--------------------------------------------------------------------------------------------
つまづいた問題
--------------------------------------------------------------------------------------------
■デバッガでブレイクポイントに止まらない症状の対策
メニューバーから「ツール > オプション > デバッグ 」に行って、以下チェックボックスをOFFにする
  ・元のバージョンと完全に一致するソースファイルを必要とする




2019年7月19日金曜日

boost C++ std::vector ループ中に要素を削除する

基本的には以下の方針でループ中に条件に一致する要素を削除できる

auto itr = numbers.begin();
while (itr != numbers.end())
{
    if(((*itr) == a) || ((*itr) == b))// 削除条件の判定
    {
        // erase関数の返り値で次要素のポインタが返る
        itr = numbers.erase(itr);
    }
    else
    {
        itr++;
    }

}

2019年5月1日水曜日

ApacheServerにTLSv1.3を適用する手順

■ApacheServerにTLSv1.3を適用する。

[ApacheServerのインストール]
注意
  ・Apacheをインストールする際は、Apache 2.4.37以降を使うこと。
    Apache 2.4.37からOpenSSL1.1.1とTLSv1.3をサポートしているため。

手順
1.Apacheをダウンロードする。

ダウンロード先
OpenSSLを同梱したApacheをダウンロードする。

・Apache Haus
https://www.apachehaus.com/cgi-bin/download.plx
・個人(win32ビット対応のApacheServer)
https://emg-my.sharepoint.com/:u:/r/personal/s-tsuruda_eandm_co_jp/Documents/tools/ApacheServer/httpd-2.4.39-o111b-x86-vc15.zip?csf=1&e=mJgi2i

.ダウンロードした「httpd-2.4.39-o111b-x86-vc15.zip」ファイルを解凍します。
  例:c:\Apache\

2.Apache設定ファイル(httpd.conf)の編集
  httpd.confの格納先
  例:C:\Apache\Apache24\conf

[ServerRoot]
--------------------------------------------------------------------------------
修正前
Define SRVROOT "/Apache24"
ServerRoot "${SRVROOT}"

修正後
Define SRVROOT "C:/Apache/Apache24"
ServerRoot "${SRVROOT}"
--------------------------------------------------------------------------------

[Listen]
--------------------------------------------------------------------------------
修正前
Listen 80

修正後
Listen 172.27.67.146:80
--------------------------------------------------------------------------------

[ServerName]
--------------------------------------------------------------------------------
修正前
ServerName localhost:80

修正後
ServerName 172.27.67.146:80
--------------------------------------------------------------------------------

[DocumentRoot]
--------------------------------------------------------------------------------
修正前
DocumentRoot "${SRVROOT}/htdocs"


修正後
DocumentRoot "C:/Apache/Apache24/htdocs"

--------------------------------------------------------------------------------

3.秘密鍵(server.key)の生成
Apacheインストールディレクトリのbinに移動して、以下のコマンドを実行します。

C:\Apache\Apache24\bin>openssl.exe genrsa -out ..\conf\server.key 1024
Loading 'screen' into random state - done
Generating RSA private key, 1024 bit long modulus
...............................++++++
.............................................++++++
e is 65537 (0x10001)

4.公開鍵(server.csr)の生成
2項と同じディレクトリで以下のコマンドを実行します。

C:\Apache\Apache24\bin>openssl.exe req -new -key ..\conf\server.key -out ..\conf\server.csr -config ..\conf\openssl.cnf
.csr -config ..\conf\openssl.cnf
Loading 'screen' into random state - done
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:JP
State or Province Name (full name) [Some-State]:Tokyo
Locality Name (eg, city) []:City
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Company
Organizational Unit Name (eg, section) []:Section
Common Name (e.g. server FQDN or YOUR name) []:127.0.0.1
Email Address []:foo@bar.com

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:

5.証明書(server.crt)の生成
2項と同じディレクトリで以下のコマンドを実行します。

C:\Apache\Apache24\bin>openssl.exe x509 -in ..\conf\server.csr -out ..\conf\server.crt -req -signkey ..\conf\server.key -days 365
-req -signkey ..\conf\server.key -days 365
Loading 'screen' into random state - done
Signature ok
subject=/C=JP/ST=Tokyo/L=City/O=Company/OU=Section/CN=127.0.0.1/emailAddress=foo@bar.com
Getting Private key

5.Apacheインストール
2項と同じディレクトリで以下のコマンドを実行します。
C:\Apache\Apache24\bin>httpd -k install

6.Apacheの起動方法
2項と同じディレクトリで以下のコマンドを実行します。
C:\Apache\Apache24\bin>httpd -k start

何も表示されずに、入力欄が表示されたら、ブラウザを起動してください。

ブラウザのURL入力欄に、「http://localhost/」と入力し「Enter」を押してこのような画面が表示されたら、Apacheが正常に起動していることになります。

■エラー
「症状」
コンピューターに VCRUNTIME140.dll がないため、プログラムを開始できません。この問題を解決するには、プログラムを再インストールしてみてください。

「対策」
このエラーは、Visual Studio C++ 2015という開発環境で作成されたソフトウェアの実行時に発生するようです。

上環境で作成されたソフトは実行にランタイムというプログラムが必要ですがインストールされていないので、その旨のエラーが表示されています。

よって、Visual Studio C++ 2015のランタイムをインストールすれば解決します。
ランタイムのインストール方法

マイクロソフト公式ダウンロードセンターにアクセスし、ダウンロード をクリッ
https://www.microsoft.com/ja-jp/download/details.aspx?id=48145
   
■参考URL
http://www.koikikukan.com/archives/2013/12/03-012345.php
https://qiita.com/naganao/items/fe119b2818479b730c74
https://techacademy.jp/magazine/1846
http://proengineer.internous.co.jp/content/columnfeature/5456
https://http2.try-and-test.net/tls13_apache_conf.html
https://www.unknownengineer.net/entry/2018/11/15/145720

2019年4月25日木曜日


■目的

TLS1.3を最優先とし、以下優先度でサーバに対して、TLS通信を試みる。

優先1. TLS1.3
優先2. TLS1.2
優先3. TLS1.1
優先4. TLS1.0

TLS通信のコネクションが確立したTLSバージョンで、サーバと通信を行なう。
■調査結果

[調査1]
SSL_CTX_newにセットする関数は?

[結果]
TLS_client_method()をセットする。
前述の関数は、SSLv3、TLSv1、TLSv1.1、TLSv1.2、TLSv1.3を使えるようになる。

 参考サイト
https://www.openssl.org/docs/man1.1.1/man3/SSLv23_client_method.html

[調査2]
特定のTLSバージョンのみでTLS通信を試みるには?

[結果]
TLS_client_method()をそのまま使うと、SSLv3、TLSv1、TLSv1.1、TLSv1.2、TLSv1.3でTLS通信を試みる。そのため、特定のTLSバージョンのみでTLS通信を試みる場合、以下の手順で使用可能なプロトコルを制限する。

例えば、TLSv1.3のみを利用したい場合、

// TLSv1.3
long flags=SSL_OP_NO_SSLv3 | SSL_OP_NO_TLSv1 | SSL_OP_NO_TLSv1_1 | SSL_OP_NO_TLSv1_2;
SSL_CTX *m_sslContext = SSL_CTX_new(TLS_client_method());
SSL_CTX_set_options(m_sslContext, flags);

// TLSv1.2
// long flags=SSL_OP_NO_SSLv3 | SSL_OP_NO_TLSv1 | SSL_OP_NO_TLSv1_1;

// TLSv1.1
// long flags=SSL_OP_NO_SSLv3 | SSL_OP_NO_TLSv1 | SSL_OP_NO_TLSv1_2;

// TLSv1.0
// long flags=SSL_OP_NO_SSLv3 | SSL_OP_NO_TLSv1_1 | SSL_OP_NO_TLSv1_2;

参考サイト
https://www.openssl.org/docs/manmaster/man3/SSLv23_client_method.html

以下のOpenSSLの関数を用いて、SSL/TLS通信処理時にサポートするTLSのバージョンの最小バージョン、最大バージョンを指定できる。

SSL_CTX_set_min_proto_version()
SSL_CTX_set_max_proto_version()
https://www.openssl.org/docs/manmaster/man3/SSL_CTX_set_min_proto_version.html

[調査3]
調査1,2以外でTLS1.3を使うために何か特別な処理は実装する必要があるか?

[結果]
SSL/TLS通信処理に用いるOpenSSLの関数について、TLS1.3に関する記載がないかOpenSSLのmanualを調べた。

・SSL_CTX_new
TLS1.3の記載有り。TLS_method(), TLS_server_method(), TLS_client_method()を使えって書いてる。
https://www.openssl.org/docs/manmaster/man3/SSL_CTX_new.html

・SSL_CTX_set_verify
TLS1.3の記載無し。
https://www.openssl.org/docs/manmaster/man3/SSL_CTX_set_verify.html

・SSL_CTX_set_options
TLS1.3の記載有り。
https://www.openssl.org/docs/manmaster/man3/SSL_CTX_set_options.html

・SSL_new
TLS1.3の記載なし。
https://www.openssl.org/docs/manmaster/man3/SSL_new.html

・SSL_set_connect_state
TLS1.3の記載なし。
https://www.openssl.org/docs/manmaster/man3/SSL_set_connect_state.html

・SSL_set_fd
TLS1.3の記載なし。
https://www.openssl.org/docs/manmaster/man3/SSL_set_fd.html

・SSL_connect
TLS1.3の記載有り
https://www.openssl.org/docs/manmaster/man3/SSL_connect.html

■TCPとSSL/TLSの関係
[階層]
OSI階層というもので、TCPとSSL/TLSのレイヤーが違うみたい。
HTTPSの通信はTCP/IPプロトコルスイートとして、
TCPの上層にSSL/TLSがあり、
アプリケーションプロトコルのHTTPプロトコルが載って通信する。

コネクションとセッションは通信の概念として別になり、
TCPでクライアントからWebサーバに対してコネクション(経路)が確立され、
その上でセッション(ブラウザでログイン~ログアウト)があります
イメージ的には以下の感じ。

↑(高階層)

│HTTPプロトコル
│SSLハンドシェイクプロトコル
│TLSレコードプロトコル
│TCP/IP

↓(低階層)

[処理順]
1.3ウェイ・ハンドシェイクでコネクション(論理的な通信路)を確立。(TCP)
2.TLSハンドシェイクプロトコルのネゴシエーションを行なう。(SSL/TLS)
3.クライアントとサーバ間で実際のhttps通信を行なう。
https://qiita.com/Brutus/items/1015cc01d2e1eb82a526

■セッションとコネクションの違い
https://www.infraexpert.com/study/networking4.html
説明
セッション
 セッションは、通信の開始から終了までを管理する1つの単位のことです。
 例えば端末の間でセッションが確立すると、通信で使用するアプリケーションが
 データ転送可能な状態になります。OSI 7階層の第5層「セッション層」の機能です。

コネクション
 コネクションは、セッションでデータ転送を行うための論理的な回線のことです。
 一般的に、OSI 7階層の第4層「トランスポート層」のTCPコネクションを指します。


■参考サイト
・SSL/TLSについてまとめ2018
https://qiita.com/Brutus/items/1015cc01d2e1eb82a526

・【図解】TLSv1.3の仕組みとシーケンス ~QUICに向けた0-RTT, key_shareやHelloRetryRequest, NewSessionTicketとPSKの関係, コネクションとセッションの違い~
https://milestone-of-se.nesuke.com/nw-basic/tls/tls-version-1-3/

OpenSSLライブラリに詳しい
https://techblog.yahoo.co.jp/infrastructure/ssl-session-resumption/

細かすぎて伝わらないSSL/TLS
https://techblog.yahoo.co.jp/infrastructure/ssl-session-resumption/

[C言語] HTTPSクライアントを作ってみる
https://qiita.com/edo_m18/items/41770cba5c166f276a83

OpenSSLライブラリを使ってプログラミング(1)
https://lemniscus.hatenablog.com/entry/20090730/1248970407

sakura editor

sakura editorの備忘録を記載する。

--------------------------------------------------------------------------------------------
ショートカット
--------------------------------------------------------------------------------------------
■日付の挿入
Alt+;

■時刻の挿入
Alt+:

--------------------------------------------------------------------------------------------
小ネタ
--------------------------------------------------------------------------------------------
■grep実行時、初期状態からリアルタイムで表示する設定

メニューバー > 共通設定 > 検索 > Grep
「リアルタイムで表示する」チェックボックスをOnにする。

■複数のソースファイルから一斉置換する
[手順]
1.sakura editorを起動する
2.上部のメニュー>検索>grep置換を押下する
3.Grep置換Popupで諸条件を設定する
4.バックアップ作成のチェックボックスをチェックする
5.置換ボタンを押下する


2019年3月17日日曜日

変更したソースファイルの差分のstep数を算出する方法

[前提条件]
・かぞえチャオを使う

[手順]
1.変更前ソースファイルの実ステップ数を算出する。(結果をCSVに保存)
2.変更後ソースファイルの実ステップ数を算出する。(結果をCSVに保存)
3.算出方法。差分ステップ数 = 手順.2の実ステップ数 - 手順.1の実ステップ数

[かぞえチャオ]
・ダウンロード先[Vector]
https://www.vector.co.jp/soft/winnt/prog/se251853.html

・念のため
https://emg-my.sharepoint.com/:f:/r/personal/s-tsuruda_eandm_co_jp/Documents/share/tools/counter?csf=1&e=Si6nO0

2019年1月2日水曜日

pycharn インストール手順

pycharn ショートカット

・コードの整形( Ctrl + Alt + L )
・コメントアウト( Ctrl + / )
・関数や変数の名前変更( Shift + F6 )
・関数などの定義を確認する( Ctrl + Shift + I )
・ファイルの新規作成( Alt + Insert )
・クリッップボード履歴(Ctrl + Shift + V )
・タブ移動( Ctrl + Tab )
・コードの改善提案の表示( Alt + Enter )