Mitsukiの魔法実験室

Mitsuki's Magic Laboratory
Since 2002.09.14

RubyでもCPUIDしてみた

Posted at 2009/03/25 16:11 in Ruby

 Ruby でもやってみました。1.9 系でしか動かないはず(1.8 系は DL クラスが別物なので)。動作確認は Cygwin 上の 1.9.1 のみ。
 CPUID を取得して、Windows のメッセージボックスで表示してます。
 機械語は竹迫さんのをまるぱくり。


#!/usr/bin/env ruby

require 'dl'

cpu = "\0" * 48
bin = "S\xbf#{ [cpu].pack('p') }\xb8\x02\x00\x00\x80" <<
      "P\x0f\xa2\x89\x07\x89_\x04\x89O\x08\x89W\x0c\x8d\x7f\x10X\x8d\@\x01" * 3 <<
      "[\xc3"
DL::CFunc.new([bin].pack('p').unpack('L!')[0], DL::TYPE_VOID).call []

DL::CFunc.new(DL::dlopen('user32')['MessageBoxA'], DL::TYPE_LONG, 'MessageBox', :stdcall).
    call [0, cpu.gsub(/\0/, '').gsub(/\s+/, ' '), "CPUID", 0].pack('L!ppL!').unpack('L!*')


 ぶくまコメントにもちらっと書いたけど、ベーマガの投稿プログラム(POKE 文でメモリに機械語セットして呼び出す奴)を思い出して笑ったのは、わたしだけではないはずだ(多分)。