Hatena::Groupprogram

lnzntのプログラミング日記 このページをアンテナに追加 RSSフィード

2010年11月10日(水)

Ubuntu 10.04 にツールチェーンをインストールする

| 16:53 | Ubuntu 10.04 にツールチェーンをインストールする - lnzntのプログラミング日記 を含むブックマーク はてなブックマーク - Ubuntu 10.04 にツールチェーンをインストールする - lnzntのプログラミング日記 Ubuntu 10.04 にツールチェーンをインストールする - lnzntのプログラミング日記 のブックマークコメント

ATDE から Ubutu にホスト環境を移しました。そのメモです。

Ubuntu ネイティブのパッケージのインストール

  • genext2fs
  • .... いろいろ

私の環境では genext2fs をインストールしただけでしたが環境次第です。(少なくとも make は必要です)

続きを読む

2010年11月08日(月)

Armadillo-9 のイメージのビルド

| 09:35 |  Armadillo-9 のイメージのビルド - lnzntのプログラミング日記 を含むブックマーク はてなブックマーク -  Armadillo-9 のイメージのビルド - lnzntのプログラミング日記  Armadillo-9 のイメージのビルド - lnzntのプログラミング日記 のブックマークコメント

開発ホスト ATDE

Armadillo-9 の開発ホストはやはり Linux が良いでしょう。

自前で環境を整えるのは面倒なので、アットマークテクノさんが提供する ATDE という開発を利用します。開発者サイトから入手できます。

ATDE は VMwareアプライアンスです。VMware Player が必要です。

ATDE には Debian Linux とツールチェーンがプリインストールされています。

Armadillo-9 では ATDE2 を使用します。

続きを読む

Armadillo-9 のフラッシュへの書き込み

| 09:15 |  Armadillo-9 のフラッシュへの書き込み - lnzntのプログラミング日記 を含むブックマーク はてなブックマーク -  Armadillo-9 のフラッシュへの書き込み - lnzntのプログラミング日記  Armadillo-9 のフラッシュへの書き込み - lnzntのプログラミング日記 のブックマークコメント

Armadillo-9のフラッシュ最新のイメージを書き込んでみました。

リージョンと書き込むイメージは以下の通りです。

  • bootloader (loader-armadillo-9-eth-v.1.1.2)
  • kernel (linux-2.6.12.3-a9-17.bin.gz)
  • userland (romfs-20090318-2.6.12.3-a9-17.img.gz)

書き込む方法は以下があります。

今回は harmit-at-win を使用しました。

ツール、イメージ、マニュアルは以下からダウンロードできます。

今回は特にソフトウェアマニュアルが参考になります。

Armadillo-9 で組み込み Linux

| 00:05 |  Armadillo-9 で組み込み Linux - lnzntのプログラミング日記 を含むブックマーク はてなブックマーク -  Armadillo-9 で組み込み Linux - lnzntのプログラミング日記  Armadillo-9 で組み込み Linux - lnzntのプログラミング日記 のブックマークコメント

Armadillo-9 は アットマークテクノさんの ARM9 の CPUボードです。 4年くらい前に入手しました。組み込み Linux (uCLinux) が動きます。

続きを読む

2010年11月04日(木)

公開鍵暗号まとめ

| 20:56 |  公開鍵暗号まとめ - lnzntのプログラミング日記 を含むブックマーク はてなブックマーク -  公開鍵暗号まとめ - lnzntのプログラミング日記  公開鍵暗号まとめ - lnzntのプログラミング日記 のブックマークコメント

公開鍵暗号*1による暗号システム。

以下のオペレーションが行える。

「暗号技術入門」(旧版)を読んだメモ

| 20:34 |  「暗号技術入門」(旧版)を読んだメモ - lnzntのプログラミング日記 を含むブックマーク はてなブックマーク -  「暗号技術入門」(旧版)を読んだメモ - lnzntのプログラミング日記  「暗号技術入門」(旧版)を読んだメモ - lnzntのプログラミング日記 のブックマークコメント

暗号技術入門」(旧版)を読んだメモ

第 I 部: 暗号

暗号
cryptography。暗号
暗号
encrypt。平文を暗号文に変換すること。
復号(化)
decrypt。暗号文を平文に変換すること。
平文
plaintext。暗号化されていないメッセージ。
暗号
ciphertext。暗号化されているメッセージ。
メッセージ
message。暗号化される(ビット列の)情報の総称。
送信者
sender。メッセージの送り手。
受信者
receiver。メッセージの受け手。
(暗号)解読 or (暗号)解析
cryptanalysis。受信者以外が暗号文を平文に復元しようとすること。
(暗号)解読者 or (暗号)解析者
cryptanalyst。暗号解読(暗号解析)する人。
アルゴリズム
algorithm。暗号化、または復号の手順。
key暗号化、または復号に必要なマジックナンバー
対称鍵暗号
symmetric cryptography。暗号化と復号に同じ鍵を使う暗号。共有鍵暗号(shared-key cryptography)、共通鍵暗号(common-key cryptography)、秘密鍵暗号(secret-key cryptography)、慣用暗号(conventional cryptography)。
非対称鍵暗号
asymmetric cryptography。暗号化と復号に異なる鍵を使う暗号公開鍵暗号(public-key cryptography)。
一方向ハッシュ関数
one-way hash function。ハッシュ値を計算する関数
ハッシュ値
hash value。メッセージから不可逆に計算される一意性のある値。メッセージ・ダイジェスト(message digest)、指紋(fingerprint)、暗号チェックサム(cryptographic checksum)。
メッセージ認証コード (MAC)
message authentication code。MAC値を計算するアルゴリズム
MAC
MAC value。メッセージ認証コード(MAC)による計算される一意性のある値。
(デジタル)署名
digital signature。電子的な押印・署名の技術。
(デジタル署名)検証
verify。デジタル署名が正しいか確認すること。
疑似乱数生成器 (PRNG)
pseudo random number generator。乱数列を擬似的に生成するアルゴリズム
盗聴
eavesdropping。セキュリティの脅威の一つ。情報を盗み見られること。
改竄
falsification。セキュリティの脅威の一つ。情報が書き換えられること。
なりすまし
spoofing。セキュリティの脅威の一つ。偽物が本物になりすますこと。
否認
repudiation。セキュリティの脅威の一つ。既成事実を否定すること。
機密性
confidentiality。セキュリティの特性の一つ。秘密が守られること。
正真性 or 完全性
integrity。セキュリティの特性の一つ。本物であること。
認証
authetication。セキュリティの特性の一つ。本人であることが確認できること。
ステガノグラフィ
steganography。メッセージの存在を隠す技術。電子透かしなどに応用される。
隠すことによるセキュリティ
security by obscurity (security through obscurity)。(アルゴリズムなどを)秘密にすることに依存したセキュリティ
シーザー暗号
Caesar cipher。アルファベットを一定の文字数だけずらすことで行なう暗号
換字暗号
subsititution cipher。一文字(数文字)単位で別の文字に変換することで行なう暗号。換字式暗号
使い捨てパッド
one-time pad。平文とランダムなビット列の XOR を取ることで行なう暗号。ブルート・フォース・アタックで解読不可能。鍵の運用が高コストのため非実用的。
エニグマ
enigma。20 世紀初めにドイツで発明された暗号機械。
ブルート・フォース・アタック
brute force attack。(鍵などの)可能性・候補を総当りする暗号解読。全数検索(exhaustive search)。総当り法。しらみ潰し法。
頻度分析
frequency analysis。文字や文字列の使用・出現頻度を手掛りにした暗号解読
ブロック暗号
block cipher。データをブロック(ある特定のビット数のまとまり)単位で処理する暗号
ストリーム暗号
stream cipher。データを順次処理していく暗号
ファイステルネットワーク
Feistel network。DES などの多くのブロック暗号に使われている基本構造。サブキー(subkey)を用いたラウンド関数による暗号化のステップ(=ラウンド(round))を何度も繰り返す。ファイステル構造(Feistel structure)。ファイステル暗号(Feistel cipher)。
DES
Data Encrypt Standard。[FIPS 46-3]。対称鍵暗号の一つ。64-bit 長ブロックを 64-bit に暗号化するブロック暗号。鍵長 56 bit。ブルート・フォース・アタックで解読可能。弱い。
トリプル DES (3DES)
triple-DES。DES を 3 段重ねした暗号
  • DES-EDE2 は、暗号化 => 復号 => 暗号化 の 3DES。鍵は 2 つ (鍵 1、鍵3 共用)。
  • DES-EDE3 は、暗号化 => 復号 => 暗号化 の 3DES。鍵は 3 つ。
NIST
National Institute of Standards and Technology。米国国立標準技術研究所。
FIPS
Federal Information Processing Standards。米国連邦情報処理標準。NIST が発行している。
AES
Advanced Encryption Standard。新暗号標準 [FIPS-197]。自由に無料に使用できる。暗号アルゴリズムとして Rijndael が選定された。他の AES 最終候補は、MARS、RC6、Serpent、Twofish。
Rijndael
AES。ブロック長 128-bit。鍵長 128/192/256-bit (AES 規格上)。SPN 構造を持つ。
ブロック暗号のモード
ブロック単位の暗号化の繰り返しの方法。主なモードは、ECBCBC、CFB、OFB、CTR。
ECB モード
Electric CodeBook mode。電子符号表モード。平文ブロックを暗号化したものが、そのまま暗号ブロックになる。使うべきでない。
CBC モード
Cipher Block Chaining mode。暗号ブロック連鎖モード。1 つ前の暗号文ブロックと平文ブロックの XOR を取ってから暗号化を行う。推奨。
初期化ベクトル (IV)
initialization vector。最初の平文の 1 つ前の暗号文ブロックの代わりのビット列。
CFB モード
Cipher FeedBack mode。暗号フィードバックモード。1 つ前の暗号文ブロックと平文の XOR を取る。代わりに CTR モードを用いたほうがよい。
ストリーム
key stream。CFB モードで暗号アルゴリズムが生成して平文と XOR を取るビット列。
OFB モード
Output FeedBack mode。出力フィードバックモード。1 つ前の暗号アルゴリズムの出力の暗号文を鍵ストリームにする。代わりに CTR モードを用いたほうがよい。
CTR モード
CounTeR mode。カウンタモード。1 ずつ増加していくカウンタを暗号化して鍵ストリームにする。推奨。
鍵配送問題
key distribution problem。対称暗号で受信者に共有鍵を送る必要があること。解決法として、鍵の事前共有、鍵配送センタ(KDC)、DH 鍵交換法、公開鍵暗号、がある。
鍵配送センタ (KDC)
key distribution center。通信が必要な都度、セッション鍵を生成するホスト。通信を行う各人はKDC と鍵を事前共有してセッション鍵を安全に受け取る。
DH 鍵交換 (or DH 鍵合意)
Diffie-Hellman key agreement (Diffie-Hellman key exchange)。送信者と受信者が盗聴されても構わない情報を交換することで安全に鍵を共有する方法。
鍵ペア
key pair。非対称鍵暗号の 2 本一対の鍵。
公開鍵
public key公開鍵暗号の鍵ペアで公開される鍵。
私有鍵 (or プライベート鍵)
private key公開鍵暗号の鍵ペアで秘匿される鍵。
秘密鍵
secret key。共有鍵暗号の鍵。
RSA
公開鍵暗号アルゴリズムの一つ。現在のデファクト・スタンダード
  • 暗号化: 暗号文 = 平文E mod N
  • 複合化: 平文 = 暗号文D mod N
  • 公開鍵: 数 E と数 N
  • 私有鍵: 数 D と数 N
中間介入攻撃
man-in-the-middle attack。受信者には送信者に、送信者には受信者になりすし機密性を脅かす攻撃
ElGamal 方式
公開鍵暗号アルゴリズムの一つ。GnuPG に実装されている。
Rabin 方式
公開鍵暗号アルゴリズムの一つ。
楕円曲線暗号 (ECC)
elliptic curve cryptosystems。公開鍵暗号アルゴリズムの一つ。
ハイブリッド暗号システム
hybrid cryptosystem。共有鍵暗号公開鍵暗号のメリットを合わせたシステム。 SSL/TLSPGP でも使用されている。仕組みは以下。
  1. メッセージは対称暗号暗号化する。
  2. 対称暗号暗号化で使うセッション鍵は、PRNG で生成する。
  3. セッション鍵は公開鍵暗号暗号化する。
  4. 公開鍵暗号の鍵はハイブリッド暗号システムの外部から与える。

第 II 部 認証

ハッシュ関数
改竄を検出できる。
衝突 (collision)
異なるメッセージが同じハッシュ値を持つこと。
衝突耐性 (collision resistance)
衝突を見つけるのが困難な性質のこと。
弱衝突耐性
そのハッシュ値を持つ別のメッセージを見つけ出すことが非常に困難な性質のこと。
強衝突耐性
ハッシュ値が一致するような、異なるメッセージを見つけ出すことが非常に困難な性質のこと。
一方向性
ハッシュ値からメッセージを逆算できない性質のこと。
MD4
128-bit ハッシュ値を持つ。
MD5
128-bit ハッシュ値を持つ。
SHA-1
160-bit ハッシュ値を持つ。[FIPS-180-1]
SHA-256/SHA-384/SHA-512
256/384/512-bit のハッシュ値を持つ。SHA-2 とも呼ばれる。[FIPS-180-2]
RIPEMD-160
160-bit のハッシュ値を持つ。
誕生日攻撃
birthday attack。「誕生日のパラドックス」に則った、強衝突耐性を破ろうとする攻撃。あらかじめハッシュ値の同じ(内容の異なる)メッセージを用意して、一方を正当として受信者に渡し、後で密かにもう一方とすりかえる攻撃。
誕生日のパラドックス
「N 人集まればその中に(どの日でもよいので)同じ誕生日の人がいる確率が50%を超えるか?」から生じるパラドックス。N=23。直感的な答えより意外に少ない。
鳩の巣原理
pigeon-hole principle。「N+1 羽の鳩を N 個の巣箱に分けると、鳩が 2 羽以上いる巣箱が少なくとも 1 個は存在する」。この原理から、ハッシュ関数は必ず衝突する。
メッセージ認証コード (MAC)
メッセージと共有鍵から固定ビット長の出力を行なう。改竄となりすましを検出できる。共有鍵に依存するので、鍵の配送問題がある。利用例は、SWIFT(国際銀行間通信協会)、IPsecSSL/TLS など。実現方法は、一方向ハッシュ関数を使う、ブロック暗号を使う、など。再生攻撃を防ぐために、シーケンス番号(のメッセージへの付与)、タイムスタンプ(の付与)、ノンス(nonce。受信者から送信者へ渡される使い捨てのランダムな値)の付与、などの手段がある。第三者に対する証明や否認防止ができない。
HMAC
一方向ハッシュ関数を使って MAC を検証する方法の一つ[RFC2104]。HMAC-SHA1(SHA-1 を使用)、HMAC-MD5(MD5 を使用)、HMAC-RIPEMD (RIPEMD-160 を使用)など。
(デジタル)署名 or 電子署名
公開鍵暗号の「私有鍵による暗号文」を認証子(authenticator) として利用する。送信者が私有鍵を署名作成に使い、受信者が(送信者の)公開鍵を署名検証に使う。メッセージ自体でなく、メッセージの「ハッシュ値」に署名するのが実用的。改竄の検出、第三者に対する証明、否認防止、なりすましの防止ができる。メッセージが暗号化されない署名のことをクリア署名(clearsign)と呼ぶ。
公開鍵証明書、SSL/TLS などで利用される。アルゴリズムとして RSA、ElGamal 方式、DSA、Rabin 方式などがある。man-in-the-middle 攻撃に対して、fingerprint の提示/確認などの対策がある。デジタル署名を使って公開鍵暗号を復号させるよう欺く攻撃もある。
PKCS
public-key cryptography standard。RSA 社が公開している規格。PKCS #1 はデジタル署名アルゴリズムの詳細がある。
DSA
digital signature algorithm。DSS 用に作られたアルゴリズム。デジタル署名だけに用いることができる。
DSS
digital signature standard。デジタル署名規格。NIST で規定された。
公開鍵証明書 (or 証明書 or PKC)
public-key certificate。公開鍵(の主体者の)情報と署名がついたもの。

認証局 (CA)
certification authority (or certifying authority)。証明書の証明機関。証明書の発行を行なう。ベリサイン(Verisign)が有名。主な仕事は以下。
  • 公開鍵の登録 (本人の認証)
  • 証明書の発行
  • 証明書の破棄
(CA の)運用規定 (CPS)
certificate practice statement。CA がどのように「本人」と確認するか、など規定。
登録局 (RA)
registrarion authority。CA の業務のうち、公開鍵の登録(と本人の認証)を行う機関。

検証局 (VA)
validation authority。CA の業務のうち、CRL の運用を行う(証明書の検証に対応する)機関。
X.509
証明書の標準規格。ITUISORFC で規定。内容は以下。
  1. X.509 のバージョン (現行 3)
  2. シリアル番号
  3. 署名アルゴリズム
  4. 発行者
  5. 有効日限。開始と終了
  6. 主体者
  7. 公開鍵アルゴリズム
  8. 公開鍵
  9. 拡張領域(項目はいろいろ)
  10. 署名アルゴリズム
  11. 署名
公開鍵基盤 (PKI)
public-key infrastructure。公開鍵を運用する基盤の総称。
証明書失効リスト (CRL)
certificate revocation list。失効した証明書の一覧。CRL 発行の時間差をついた攻撃(なりすましや否認)もある。

第 III 部 鍵・乱数・応用技術

セッション
session key。通信ごとに作られる鍵
マスタ鍵
master key。通信ごとに作られる鍵
CEK
contents encrypting key。情報(内容)を暗号化するのに使う鍵。
KEK
key encrypting key。鍵を暗号化するのに使う鍵。
鍵更新
key updating。機密性を高めるため通信の最中に定期的に鍵を更新すること。
パスワードを元にした暗号 (PBE)
password based encryption。パスワードを元にして作った鍵で行なう暗号。鍵作成には、辞書攻撃(dictionary attack)を防ぐため、PRNG で生成したソルト(salt)も使う。パスワードとソルトをハッシュ関数に通して鍵を作成する。PKCS #5 などで規格化されている。
乱数
random number。以下の性質に分類できる。
  • 無作為性 ... 統計的な偏りがない性質。弱。
  • 予測不可能性 ... 次の数が予測できない性質。中。
  • 再現不可能性 ... 同じ数列が再現できない性質。強。
同じ数列を生成するまでの長さを周期という。 ソフトウェアでの乱数生成は必ず周期を持ち、再現不可能性がない PRNG である。
線形合同法
PRNG を実現する方法の一つ。
ランダムプール
必要になった時に乱数を作りだすのでなく、予めランダム値を蓄えておく方法。
PGP
Pretty Good Privacy。暗号ソフトウェア。信頼モデルは「信頼の輪 (web trusted link)」。仕様として OpenPG [RFC2440] などがある。実装として GnuPG などがある。以下の機能がある。
SSL/TLS
Secure Socket Layer/Tranport Layer Security。暗号技術を組み合わせて使用するためのプロトコルフレームワークSSLNetscape Communications 社の仕様。SSLv3 が最新。TLS は RFC2246 の仕様。TLSv1 は SSLv3 相当の仕様。
マスタ・シークレット
master secret。TLS クライアントサーバが合意した秘密の値。プレ・マスター・シークレット、クライアントランダム、サーバランダムから計算される。以下の情報を作るために使われる。
暗号技術入門-秘密の国のアリス

暗号技術入門-秘密の国のアリス

新版暗号技術入門 秘密の国のアリス

新版暗号技術入門 秘密の国のアリス

2010年11月03日(水)

MBR をダンプする ruby スクリプト(ツール)

| 00:40 |  MBR をダンプする ruby スクリプト(ツール) - lnzntのプログラミング日記 を含むブックマーク はてなブックマーク -  MBR をダンプする ruby スクリプト(ツール) - lnzntのプログラミング日記  MBR をダンプする ruby スクリプト(ツール) - lnzntのプログラミング日記 のブックマークコメント

MBR をダンプするスクリプト。(非実用品)

#!/usr/bin/env ruby

module MBR
    class MBR
        class PartitionTable < Array
            class Entry
                class CHS
                    def initialize(data)
                        @cylinder   = (data[1] & 0xc0) << 2 | data[2]
                        @header     = data[0]
                        @sector     = data[1] & 0x3f
                    end
                    attr_reader :cylinder,:header,:sector
                end

                def initialize(data)
                    flag,chs_s,kind,chs_e,lba,lba_size = data.unpack("Ca3Ca3LL")
                    @flag       = (flag != 0)
                    @kind       = kind
                    @chs_start  = CHS.new(chs_s)
                    @chs_end    = CHS.new(chs_e)
                    @lba        = lba..(lba+lba_size-1)
                end
                attr_reader :flag,:kind,:lba,:lba_size,:chs_start,:chs_end
            end

            def initialize(data)
                data.scan(/.{16}/)[0,4].each {|entry|
                    push(Entry.new(entry))
                }
            end
        end

        def initialize(data)
            @boot_strap, partition, aa55 = data.unpack("a446 a64 v")

            @boot_strap.freeze
            @partition = PartitionTable.new(partition)
            @valid = (aa55 == 0xaa55)
        end

        attr_reader :boot_strap, :partition

        def valid? ; @valid ; end

        def valid! ; @valid or raise('MBR is invalid') ; end
    end

    module_function

    SIZE = 512
   def create(data)
        if data == ARGF || data.kind_of?(IO)
            data = data.read(SIZE)
        end

        MBR.new(data)
    end
end

if __FILE__ == $0
  require 'pp'

  mbr = MBR.create(ARGF)
  mbr.valid!
  pp mbr.partition
end

使い方。(MBR は /dev/sda にあるとする。実際は環境依存)

MBR を読み出す作業は慎重に!!! (誤操作でシステムを壊す恐れがあります)

$ sudo dd if=/dev/sda of=sda.mbr bs=512 count=1 # MBR を読み出す。(慎重に!!!)
$ ruby mbr.rb sda.mbr

PC互換機 の MBR

| 00:38 |  PC互換機 の MBR - lnzntのプログラミング日記 を含むブックマーク はてなブックマーク -  PC互換機 の MBR - lnzntのプログラミング日記  PC互換機 の MBR - lnzntのプログラミング日記 のブックマークコメント

MBR について(構造など)は下記参照

gas ソース

# ipl.s

# generate real mode code
.code16

    jmp begin
    nop

# BPB
name:           .ascii  "Name    "
sector_size:    .word   0x0200
cluster_size:   .byte   0x01
fat_pos:        .word   0x0001
fat_cnt:        .byte   0x02
root_size:      .word   0x00e0
sector_cnt:     .word   0x0b40
media_type:     .byte   0xf0
fat_size:       .word   0x0009
sector_cnt_pt:  .word   0x0012
head_cnt:       .word   0x0002
bpb_pos:        .long   0x0000
sector_cnt_l:   .long   0x00000b40
drive_no:       .byte   0x00
reserved:       .byte   0x00
ext_boot_code:  .byte   0x29
volume_serial:  .long   0xffffffff
disk_name:      .ascii  "DISK       "
fat_name:       .ascii  "FAT12   "

    # boot begin
begin:
    # infinite loop
    jmp begin

# boot signature.
. = 510
.short 0xaa55
アセンブル
$ as -o ipl.o ipl.s
バイナリ変換
$ objcopy -S -O binary ipl.o ipl.bin
FD イメージ作成 (エミュレーション用)
$ dd if=/dev/zero of=fd.img count=2880
$ dd if=ipl.bin of=fd.img conv=notrunc
QEMU での実行
$ qemu -m 128 -fda fd.img
QEMU での実行(Cygwin)
$ ./qemu/qemu.exe -L ./qemu -m 128 -fda fd.img

制御転送命令

| 00:37 |  制御転送命令 - lnzntのプログラミング日記 を含むブックマーク はてなブックマーク -  制御転送命令 - lnzntのプログラミング日記  制御転送命令 - lnzntのプログラミング日記 のブックマークコメント

x86CPU 制御転送命令

  1. 制御転送命令
    1. 無条件ジャンプ
    2. 条件付きジャンプ
    3. ループ
    4. サブルーチンのコールとリターン
    5. 割り込み・例外の発生とリターン
    6. スタック・フレームの作成と解放
  2. その他の命令

ジャンプ命令

far ジャンプ
異なるセグメントへのジャンプ. (E)IP, (E)CS を更新.
near ジャンプ
同じセグメントへのジャンプ. (E)IP を更新.
short ジャンプ
相対オフセットが -128〜127 の範囲の near ジャンプ.
相対オフセット・ジャンプ
ジャンプ命令の直後を0としたバイト・オフセットを指定.
絶対オフセット・ジャンプ
飛び先の絶対番地を指定.
(記述例)
   jmp label01    # ラベル 'label01' へジャンプ
   jmp 1b         # 直前の数字ラベル '1' へジャンプ
   jmp 1f         # 直後の数字ラベル '1' へジャンプ
   jmp *%ebx      # 絶対オフセット指定の場合は「*」を付ける

逆アセンブル

| 00:36 |  逆アセンブル - lnzntのプログラミング日記 を含むブックマーク はてなブックマーク -  逆アセンブル - lnzntのプログラミング日記  逆アセンブル - lnzntのプログラミング日記 のブックマークコメント

gas

16bitコード: objdump -m i8086 -b binary -D hoge.bin

32bitコード: objdump -m i386 -b binary -D hoge.bin

nasm

16bitコード: ndisasm hoge.bin

32bitコード: ndisasm -u hoge.bin

empty_8042

| 00:35 |  empty_8042 - lnzntのプログラミング日記 を含むブックマーク はてなブックマーク -  empty_8042 - lnzntのプログラミング日記  empty_8042 - lnzntのプログラミング日記 のブックマークコメント

(x86 asm) empty_8042

キーボードバッファを空にする (8042 はキーボード・コントローラ)

.code16
empty_8042:
    push      %cx
    mov       $0xffff, %cx
empty_8042_loop:
    dec       %cx
    jz        empty_8042_end_loop

    call      delay
    in        $0x64, %al
    test      $0x1, %al
    jz        no_output
    call      delay
    in        $0x60, %al
    jmp       empty_8042_loop
no_output:
    test      $0x2, %al
    jnz       empty_8042_loop
empty_8042_end_loop:
    pop       %cx
    ret

参考