seclan のほえほえルーム

| |

・masm ver6.14 available! (1999/05/07 [])
 「フリー」な Microsoft のマクロアセンブラ masm(ml.exe) がいつのまにかバージョンアップして、ver 6.14 になってるぞ。.586 や .586p, .686 や .686p といったディレクティブが追加され、Pentium や Pentium Pro, II, III の特有の命令が使用できるようになったぞ。さらに、ver6.12 からは .MMX で mmx の命令が、ver6.13 からは .k3d で AMD 3D Now! の命令が、そして、ver6.14 からは .xmm で Streaming SIMD Extension、またの名を MMX2 (非公式な呼び方だが) の命令をアセンブルできるようになった。喜ばしい限りである。
 でも、ver6.11 にはすでにあったバグがまだなおってないみたい。NetNewsで流れた報告によると、invoke を使った場合次の様なことがおこるみたいですね。

MASM ver6.14のバグ
ソースコード(記事より引用)アセンブル後(DumpBinの出力:*一部分)
    .586p
    .model flat,stdcall
    proc1 proto d1:DWORD
.code
    invoke proc1, eax
    invoke proc1, ds
    end

00000000: 50         push eax
00000001: E800000000 call 00000006
00000006: 6A00       push 0
00000008: 1E         push ds
00000009: E800000000 call 0000000e

 見た瞬間おかしいことがすぐにわかりますね(なんてね、これで悩んだ人でないと多分わからないだろうな。おかしいのは、赤字でかかれた部分。ほんとは存在してはいけない。32bit モードでは push ds をすると 32bit 幅でスタックに push される。従ってこの部分を実行するとスタックがずれてしまう!)。記事にはこのバグをなくし、再アセンブルすればもちょっと Win98 も安定するのにねー(要約)、と皮肉交じりに?書いてあったりします。でも、きっと Microsoft ではこの invoke は使ってないんでしょうね、こんなことに気づかないのだから。もし使ってたら、このプログラムまずまともに動きませんからね!(直後に leave でもしてれば大丈夫なのだが...)。DDK を持っている人、誰か grep でも使って、これを使っているかどうか調べて見てくださいよ (^_^;)。

by seclan

関連


| |

 

配信

6.05 msec