<?xml version="1.0" encoding="SHIFT_JIS"?>
<rdf:RDF
	xmlns="http://purl.org/rss/1.0/"
	xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:admin="http://webns.net/mvcb/"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/"
	xml:lang="ja">
	<channel rdf:about="http://mitsuki.engawa.org/index.rdf">
		<title>Mitsuki's Magic Laboratory</title>
		<link>http://mitsuki.engawa.org</link>
		<description>生温い技術屋がぼんやりする日々</description>
		<dc:creator>mitsuki</dc:creator>
		<admin:generatorAgent rdf:resource="http://www.blosxom.com/?v=2.0"/>
		<admin:errorReportsTo rdf:resource="mailto:mitsuki at engawa dot org"/>
		<items>
			<rdf:Seq>
				<rdf:li rdf:resource="http://mitsuki.engawa.org/Ruby/20090325_cpuid.html"/>
			</rdf:Seq>
		</items>
	</channel>
	<item rdf:about="http://mitsuki.engawa.org/Ruby/20090325_cpuid.html">
		<title>RubyでもCPUIDしてみた</title>
		<link>http://mitsuki.engawa.org/Ruby/20090325_cpuid.html</link>
		<description>perl から任意の C ライブラリを呼び出す方法 - id:kazuhookuのメモ置き場Perl で Win32::API プログラミング入門 - TAKESAKOのはてな出張所TAKESAKO @ Yet another Cybozu Labs: Pure Perl で Acme::x86::CPUID を作りました　Ruby でもやってみました。1.9 系でしか動かないはず（1.8 系は DL クラスが別物なので）。動作確認は Cygwin 上の 1.9.1 のみ。　CPUID を取得して、Windows のメッセージボックスで表示してます。　機械語は竹迫さんのをまるぱくり。#!/usr/bin/env rubyrequire 'dl'cpu = "\0" * 48bin = "S\xbf#{ [cpu].pack('p') }\xb8\x02\x00\x00\x80" 　ぶくまコメントにもちらっと書いたけど、ベーマガの投稿プログラム（POKE 文でメモリに機械語セットして呼び出す奴）を思い出して笑ったのは、わたしだけではないはずだ（多分）。</description>
		<dc:subject><a href="/Ruby">Ruby</a></dc:subject>
		<dc:creator>mitsuki</dc:creator>
		<dc:date>2009-03-25T16:11+09:00</dc:date>
		<content:encoded><![CDATA[<ul>
<li><a href="http://d.hatena.ne.jp/kazuhooku/20090313/1236931258">perl から任意の C ライブラリを呼び出す方法 - id:kazuhookuのメモ置き場</a>
<li><a href="http://d.hatena.ne.jp/TAKESAKO/20090324/1237879559">Perl で Win32::API プログラミング入門 - TAKESAKOのはてな出張所</a>
<li><a href="http://labs.cybozu.co.jp/blog/takesako/2009/03/x86cpuid.html">TAKESAKO @ Yet another Cybozu Labs: Pure Perl で Acme::x86::CPUID を作りました</a>
</ul>

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

<blockquote><pre><code>
#!/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!*')


</code></pre></blockquote>

<p>
　ぶくまコメントにもちらっと書いたけど、ベーマガの投稿プログラム（POKE 文でメモリに機械語セットして呼び出す奴）を思い出して笑ったのは、わたしだけではないはずだ（多分）。
]]></content:encoded>
		<trackback:ping rdf:resource="http://mitsuki.engawa.org/Ruby/20090325_cpuid.trackback"/>
	</item>
</rdf:RDF>
<!--

-->