Visual C++ で末尾再帰の最適化を確認する

Visual C++ で末尾再帰の最適化を確認します。 動作確認環境 Windows 10 Home 21H2, 64bit Visual Studio Community 2019 普通の再帰プログラムを書く 1 から 100 までの数を合計するプログラムを、再帰を使って書きます。ループで書くなり計算で求めたりしたほうが効率的ですが、実験のため再帰を使います。 コンパイルして、実行します。Zi は「デバッグ情報生成」の意味です。 1 から 100 までの合計である 5050 が表示されました。 […]

JavaScript の Promise がよく分からないので調べてみた

JavaScript の Promise を使った非同期処理がよく分からないので調べてみました。(低レイヤーの話ではありません。) 動作確認環境 Windows 10 Home 21H2, 64bit Microsoft Edge 97 Promise の動作に対する疑問 Promise の説明でありがちなサンプルプログラムです。 実行すると、「#1」「#2」「#3」「#4」「#5:hello」と表示されます。 最初、次の点が分かりませんでした。 new Promise() の引数内の reso […]

フルパス名で指定したファイルを Copy Here

エクスプローラーで表示している場所に、フルパス名で指定したファイルをコピーする方法です。 動作確認環境 Windows 10 Home 21H2, 64bit コピー手順 このファイルを、 エクスプローラーで表示しているこの場所にコピーしたい。 フルパス名をクリップボードにコピーして、 エクスプローラーのアドレスバーに「cmd /c copy 」と入力後、 [Ctrl]+[V] キーを押してフルパス名を追加し、 [Enter] キーを押すとファイルがコピーされます。 ※ 注1. コピー元としてワ […]

メモリ内にパスワード残ってしまう話(続き)

前回、password バッファを SecureZeroMemory() でクリアしているにもかかわらず、ダンプファイル内にパスワードが残ってしまうという話をしました。なぜなのか、追っていきます。 動作確認環境 Windows 10 Home 21H2, 64bit Visual Studio Community 2019 WinDbg プログラム再掲 前回使ったプログラムを再掲します。 password バッファを SecureZeroMemory() でクリアしていますが、メモリ内にパスワー […]

メモリ内にパスワードが残ってしまう話

パスワードを格納したバッファをクリアしたつもりが実際にはクリアされず、パスワードが漏洩してしまう可能性についてお話しします。 動作確認環境 Windows 10 Home 21H2, 64bit Visual Studio Community 2019 WinDbg パスワードが漏洩するパターン 次のプログラムを準備します。 処理の概要は次の通りです。 ユーザー入力したパスワードを password という名前のバッファに格納。 password バッファの内容を表示。 password バッフ […]

歴史: IIJ が日本で初めてダイアルアップ IP サービスを始めたときのチラシ

IIJ(インターネットイニシアティブ)が 1994 年に日本で初めてダイアルアップ IP サービスを開始したときのチラシの一部をアップロードしておきます。Web 上に見当たらなかったので。 サービス内容のご案内 「サービス内容のご案内」と題した計 6 ページのチラシの最初のページです。 インターネットへの接続方法として次の 3 種類が示してあり、 インターネット接続サービス ダイアルアップ IP サービス UUCP サービス 続く文章で各接続方法について説明しています。 ダイアルアップ IP サ […]

コマンドプロンプトの、たぶんあまり知られていないテクニック

Windows のコマンドプロンプトを便利に使うための、たぶんあまり知られていないテクニックを 5 つ紹介します。 動作確認環境 Windows 10 Home 21H1, 64bit ファイルのフルパス名を表示する dir コマンドは、通常、狭義のファイル名(ベースネーム+拡張子)を表示します。たとえば、Windows のシステムディレクトリにて「dir kernel*.dll」と入力すると、次のように表示されます。 この dir コマンドに「/s /b」オプションを付加すると、フルパス名が表 […]

これは便利! Z80 マシン語コーディング用紙

「これは便利!」というのは冗談ですが、Z80 用のマシン語コーディング用紙(コーディングシート)が残っていたのでアップロードしておきます。 マシン語コーディング用紙 「マシン語コーディング用紙」の表紙です。1985 年ごろに町の電気屋で購入したものです。 「Addcom」というロゴから、アドコム電子株式会社製であることが分かります。下半分に書いてあるのは、当時普及していた 8bit CPU である Z80 のマシン語です。 シート本体です。 使い方はおおよそ次のようになります。 アセンブリ言語で […]

アイオーデータのバンクメモリ仕様書(PC-9801時代)

アイオーデータ機器 (IO DATA) が策定したバンクメモリ仕様書 (BMS) の一部を、NEC PC-9801 時代の史料としてアップロードしておきます。Web 上に見当たらなかったので。 バンクメモリ仕様書 バンクメモリ仕様書の表紙です。「Bank Memory Specification Version1.3, Copyright 1988, 89 I・O DATA DEVICE Inc.」とあります。 当時はメールが普及しておらず、アイ・オー・データ社に「BMS の資料をください」と手 […]

Windows プログラムに埋め込まれた MS-DOS スタブのメッセージを表示する

MS-DOS スタブの「This program cannot be run in DOS mode.」というメッセージを表示するプログラムを作ります。 動作確認環境 Windows 10 Home 21H1, 64bit Visual Studio Community 2019 プログラムの作成 既存のほとんどのプログラムには、0x4e バイト目から「This program cannot be run in DOS mode.」という文字列が埋め込まれています。 例 1. メモ帳 例 2. […]