OKWAVEのAI「あい」が美容・健康の悩みに最適な回答をご提案!
-PR-
締切り
済み

エミュレータ上での動作の検出

  • 暇なときにでも
  • 質問No.243449
  • 閲覧数79
  • ありがとう数3
  • 気になる数0
  • 回答数3
  • コメント数0

お礼率 15% (5/32)

あるプログラムが、
自分自身がエミュレータ上で動いているかどうかを
検出する方法はあるのでしょうか。

お答えいただければ幸いです。
宜しくお願いいたします。
通報する
  • 回答数3
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

回答 (全3件)

  • 回答No.1
レベル13

ベストアンサー率 37% (570/1525)

「エミュレータ上で動作している」なんて事がわかったらエミュレータの意味が半減するのではないでしょうか。 (完全なエミュレーションとは呼べなくなる) エミュレータ側に「環境がエミュレータである」ことを示すような仕組みが組み込まれている場合は別ですが… ただ、「エミュレータ」といっても、ICEやターミナルエミュレータ、ゲーム機エミュレータなど多種多様ですから具体的な環境示していただければ経験者の ...続きを読む
「エミュレータ上で動作している」なんて事がわかったらエミュレータの意味が半減するのではないでしょうか。
(完全なエミュレーションとは呼べなくなる)

エミュレータ側に「環境がエミュレータである」ことを示すような仕組みが組み込まれている場合は別ですが…

ただ、「エミュレータ」といっても、ICEやターミナルエミュレータ、ゲーム機エミュレータなど多種多様ですから具体的な環境示していただければ経験者の方ならわかるかもしれません。
補足コメント
tarotaro

お礼率 15% (5/32)

早速のご回答有難うございます。

エミュレータの限界に関心がありましたので、この様な質問を致しました。

想定する環境としては、Windows等のOS上で
動くプログラムが、本来のOS上ではなく、
そのOS上で動いているOSエミュレータ上で
動くときを考えています。
投稿日時 - 2002-03-29 15:41:45


  • 回答No.2

WInのMS-DOSエミュレーターの検出ならば.バージョン取得(Int21 ??かInt2f ??)でたしかVer7以上ならばエミュレーターと検出できます。 あとはioポートをダイレクトに操作する入出力をして.実機との時間差からエミュレータと判断する方法もあります。たたし.実機情報を持っていればですけと。 フロッピーを細工できるのであれば.ギャップにフラグを入れていてキャップを読み取れるかとす ...続きを読む
WInのMS-DOSエミュレーターの検出ならば.バージョン取得(Int21 ??かInt2f ??)でたしかVer7以上ならばエミュレーターと検出できます。

あとはioポートをダイレクトに操作する入出力をして.実機との時間差からエミュレータと判断する方法もあります。たたし.実機情報を持っていればですけと。

フロッピーを細工できるのであれば.ギャップにフラグを入れていてキャップを読み取れるかとする方法があります。一部のエミュレーターは標準フォーマットしか対応していないために.ギャッブを適当にいじると読めなくなりますから。

最後は.romの直接読み取りで.機種によってはramに比べて1ウェイト遅くしてある機種があります。RamとROMの読み取り速度の違いから検出できる場合があります。
補足コメント
tarotaro

お礼率 15% (5/32)

ご回答ありがとうございます。

求めていたものにかなり近いお答えを頂きまして嬉しく思います。
お答えから察するに基本的には、
(1)エミュレーターや装置に、検出を可能とする特別な仕掛けがあり、それを利用する方法
(2)装置の本来の実行時間をあらかじめ入手しておく方法
の2種類のようですね。

フロッピーの方法はエミュレータ側で対応することも可能だと受け取りました。

エミュレータ側にいかなる実装をしようとも、
かつ、装置の本来の実行速度をあらかじめ入手することなく
検出する方法という都合のよいものはやはりないのでしょうか。

たとえば2つのコマンドの実行時間の違いから検出するといった
方法があれば嬉しいのですが。
投稿日時 - 2002-04-02 09:56:04
  • 回答No.3

>エミュレータ側にいかなる実装をしようとも、 >かつ、装置の本来の実行速度をあらかじめ入手することなく >検出する方法という都合のよいものはやはりないのでしょうか。 所詮ソフトですよ。かって.symdeb.exeのトレース(エミュレーターの一つ)をしていると実行速度の差からハングアップするコピープロテクトとかありましたが.ことごとく破るソフトが開発されています。だから簡単に避けられ ...続きを読む
>エミュレータ側にいかなる実装をしようとも、
>かつ、装置の本来の実行速度をあらかじめ入手することなく
>検出する方法という都合のよいものはやはりないのでしょうか。
所詮ソフトですよ。かって.symdeb.exeのトレース(エミュレーターの一つ)をしていると実行速度の差からハングアップするコピープロテクトとかありましたが.ことごとく破るソフトが開発されています。だから簡単に避けられてしまいます。

>2つのコマンドの実行時間の違いから検出するといった方法が
特定のコマンドの実行速度を測定する方法は使えません。というのは.現在のOSは原則としてマルチタスクです。したがって.優先度の高いタスクが起動されると該当コマンドが待ち行列につながれてしまいますから.この待ち時間の影響を考慮しなければならないためです。Winでctrl+shift+delを押しただけで実行中のタスクが暴走した(エミュレーター上の動作として通常とは異なる動作をした)なんてことになりかねません。
ioやメモリー直接アクセスはスーパーバイザー(Winではデバドラ・BIOS)上での動作ですから.必要に応じて最高優先度を指定できます。つまり.実行優先度を最高優先度に.割り込み処理を一切抑止できる特権タスクを自前で作り実行するから可能です。しかし.osを含めて一般のタスクは優先度を低く押さえています(時計が遅れたというような事は一般のタスクの優先度の上げ過ぎから発生する)。
お話の内容では.マルチタスク処理を脅かす致命的障害になりかねません。不可能でしょう。
このQ&Aで解決しましたか?
関連するQ&A
-PR-
-PR-
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


いま みんなが気になるQ&A

関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ