<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>いちばんやさしいゲームの作り方 &#187; オブジェクトコード</title>
	<atom:link href="http://www.game-create.com/archives/tag/%e3%82%aa%e3%83%96%e3%82%b8%e3%82%a7%e3%82%af%e3%83%88%e3%82%b3%e3%83%bc%e3%83%89/feed" rel="self" type="application/rss+xml" />
	<link>http://www.game-create.com</link>
	<description>文系の人でも、数理学がわからない人でもゲームプログラミングをマスターできるブログ</description>
	<lastBuildDate>Sat, 13 Mar 2010 16:40:02 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>オブジェクトファイルからオブジェクトコード（機械語）を表示する</title>
		<link>http://www.game-create.com/archives/1262</link>
		<comments>http://www.game-create.com/archives/1262#comments</comments>
		<pubDate>Wed, 28 Jan 2009 16:01:35 +0000</pubDate>
		<dc:creator>Byerkut</dc:creator>
				<category><![CDATA[ゲームプログラミング]]></category>
		<category><![CDATA[アセンブラ]]></category>
		<category><![CDATA[オブジェクトコード]]></category>
		<category><![CDATA[オブジェクトファイル]]></category>
		<category><![CDATA[ネームマングリング]]></category>

		<guid isPermaLink="false">http://www.game-create.com/?p=1262</guid>
		<description><![CDATA[オブジェクトファイルからオブジェクトコード（機械語）を表示するためには dumpbin コマンドを使います。

dumpbin コマンドを使うと、オブジェクトファイルに格納されているオブジェクトコード（機械語）を出力する [...]]]></description>
			<content:encoded><![CDATA[<p>オブジェクトファイルからオブジェクトコード（機械語）を表示するためには dumpbin コマンドを使います。</p>
<p><span id="more-1262"></span></p>
<p>dumpbin コマンドを使うと、オブジェクトファイルに格納されているオブジェクトコード（機械語）を出力することができるようになります。具体的には x86 アセンブラのニーモニックとオペランドが出力されます。</p>
<p>たとえば次のようなソースコードがあったとき…</p>
<div class="hl-surround" ><div class="hl-main"><pre><span class="hl-prepro">#include </span><span class="hl-quotes">&lt;</span><span class="hl-string">cstdio</span><span class="hl-quotes">&gt;</span><span class="hl-prepro">

</span><span class="hl-types">int </span><span class="hl-identifier">someFunction</span><span class="hl-brackets">(</span><span class="hl-types">int </span><span class="hl-identifier">value</span><span class="hl-brackets">)
{
  </span><span class="hl-reserved">return </span><span class="hl-identifier">value</span><span class="hl-code"> + </span><span class="hl-number">10</span><span class="hl-code">;
</span><span class="hl-brackets">}

</span><span class="hl-types">int </span><span class="hl-identifier">main</span><span class="hl-brackets">(</span><span class="hl-types">int </span><span class="hl-identifier">argc</span><span class="hl-code">, </span><span class="hl-types">char</span><span class="hl-code">* </span><span class="hl-identifier">argv</span><span class="hl-brackets">[])
{
  </span><span class="hl-identifier">std</span><span class="hl-code">::</span><span class="hl-identifier">printf</span><span class="hl-brackets">(</span><span class="hl-quotes">&quot;</span><span class="hl-string">Results is [%d]</span><span class="hl-special">\</span><span class="hl-string">n</span><span class="hl-quotes">&quot;</span><span class="hl-code">, </span><span class="hl-identifier">someFunction</span><span class="hl-brackets">(</span><span class="hl-number">123</span><span class="hl-brackets">))</span><span class="hl-code">;

  </span><span class="hl-reserved">return </span><span class="hl-number">0</span><span class="hl-code">;
</span><span class="hl-brackets">}</span></pre></div></div>
<p>以下のように実行すると…</p>
<div class="hl-surround" ><div class="hl-main"><pre>cl /c source.cpp
dumpbin /disasm source.obj</pre></div></div>
<p>結果は以下のようになります。</p>
<div class="hl-surround" style="height:280px;"><div class="hl-main"><pre>Dump of file source.obj

File Type: COFF OBJECT

?someFunction@@YAHH@Z (int __cdecl someFunction(int)):
  00000000: 55                 push        ebp
  00000001: 8B EC              mov         ebp,esp
  00000003: 8B 45 08           mov         eax,dword ptr [ebp+8]
  00000006: 83 C0 0A           add         eax,0Ah
  00000009: 5D                 pop         ebp
  0000000A: C3                 ret
  0000000B: CC                 int         3
  0000000C: CC                 int         3
  0000000D: CC                 int         3
  0000000E: CC                 int         3
  0000000F: CC                 int         3
_main:
  00000010: 55                 push        ebp
  00000011: 8B EC              mov         ebp,esp
  00000013: 6A 7B              push        7Bh
  00000015: E8 00 00 00 00     call        ?someFunction@@YAHH@Z
  0000001A: 83 C4 04           add         esp,4
  0000001D: 50                 push        eax
  0000001E: 68 00 00 00 00     push        offset $SG3907
  00000023: E8 00 00 00 00     call        _printf
  00000028: 83 C4 08           add         esp,8
  0000002B: 33 C0              xor         eax,eax
  0000002D: 5D                 pop         ebp
  0000002E: C3                 ret

  Summary

          84 .debug$S
          45 .drectve
          11 .rdata
          2F .text</pre></div></div>
<p>someFunction() という関数がネームマングリングによって ?someFunction@@YAHH@Z になっていたり、関数の後ろにパディングがあったりしていることが見て取れます。 printf() 関数のフォーマット部は $SG3907 に定数として配置されているようです。</p>
<p>最適化によって自分が作ったコードがどう変化するのか知りたいときなどには思い出してみてください。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.game-create.com/archives/1262/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>リンカ</title>
		<link>http://www.game-create.com/archives/30</link>
		<comments>http://www.game-create.com/archives/30#comments</comments>
		<pubDate>Sat, 11 Aug 2007 13:39:00 +0000</pubDate>
		<dc:creator>Byerkut</dc:creator>
				<category><![CDATA[ゲームプログラミング]]></category>
		<category><![CDATA[C++]]></category>
		<category><![CDATA[オブジェクトコード]]></category>
		<category><![CDATA[ライブラリ]]></category>
		<category><![CDATA[リンカ]]></category>
		<category><![CDATA[リンク]]></category>
		<category><![CDATA[用語]]></category>

		<guid isPermaLink="false">http://www.game-create.com/?p=30</guid>
		<description><![CDATA[リンカとはオブジェクトコードやライブラリを結合して実行可能ファイルを生成するプログラムです。

単体では動作しないオブジェクトファイルやライブラリを結合したうえ、さらに実行可能なコードを付加して、実行可能ファイルを生成し [...]]]></description>
			<content:encoded><![CDATA[<p>リンカとはオブジェクトコードやライブラリを結合して実行可能ファイルを生成するプログラムです。</p>
<p><span id="more-30"></span></p>
<p>単体では動作しないオブジェクトファイルやライブラリを結合したうえ、さらに実行可能なコードを付加して、実行可能ファイルを生成します。オブジェクトコードやライブラリをコンテナに例えると、リンカはトレーラーに相当します。</p>
<p>なお、オブジェクコードやライブラリを結合して実行可能ファイルを生成することを「リンクする」と表現します。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.game-create.com/archives/30/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>オブジェクトコード</title>
		<link>http://www.game-create.com/archives/29</link>
		<comments>http://www.game-create.com/archives/29#comments</comments>
		<pubDate>Fri, 10 Aug 2007 13:28:33 +0000</pubDate>
		<dc:creator>Byerkut</dc:creator>
				<category><![CDATA[ゲームプログラミング]]></category>
		<category><![CDATA[C++]]></category>
		<category><![CDATA[オブジェクトコード]]></category>
		<category><![CDATA[オブジェクトファイル]]></category>
		<category><![CDATA[用語]]></category>

		<guid isPermaLink="false">http://www.game-create.com/?p=29</guid>
		<description><![CDATA[オブジェクトコードとはソースコードのコンパイルによって生成する機械語です。

オブジェクトコードは、いわばトレーラーに接続していないコンテナと同じく、それ単体ではプログラムを実行できません。実行可能ファイルはリンカが生成 [...]]]></description>
			<content:encoded><![CDATA[<p>オブジェクトコードとはソースコードのコンパイルによって生成する機械語です。</p>
<p><span id="more-29"></span></p>
<p>オブジェクトコードは、いわばトレーラーに接続していないコンテナと同じく、それ単体ではプログラムを実行できません。実行可能ファイルはリンカが生成します。</p>
<p>なお、オブジェクトコードを記述したファイルを「オブジェクトファイル」と表現します。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.game-create.com/archives/29/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>コンパイラ</title>
		<link>http://www.game-create.com/archives/26</link>
		<comments>http://www.game-create.com/archives/26#comments</comments>
		<pubDate>Wed, 08 Aug 2007 10:50:41 +0000</pubDate>
		<dc:creator>Byerkut</dc:creator>
				<category><![CDATA[ゲームプログラミング]]></category>
		<category><![CDATA[C++]]></category>
		<category><![CDATA[オブジェクトコード]]></category>
		<category><![CDATA[コンパイラ]]></category>
		<category><![CDATA[コンパイル]]></category>
		<category><![CDATA[ソースコード]]></category>
		<category><![CDATA[用語]]></category>

		<guid isPermaLink="false">http://www.game-create.com/?p=26</guid>
		<description><![CDATA[コンパイラとはソースコードをオブジェクトコード（機械語）に翻訳するプログラムです。

コンピュータは機械語（オブジェクトコード）という、いわば母国語のような言語でのみ命令（プログラム）を理解するため、プログラマはコンパイ [...]]]></description>
			<content:encoded><![CDATA[<p>コンパイラとはソースコードをオブジェクトコード（機械語）に翻訳するプログラムです。</p>
<p><span id="more-26"></span></p>
<p>コンピュータは機械語（オブジェクトコード）という、いわば母国語のような言語でのみ命令（プログラム）を理解するため、プログラマはコンパイラを用いて視認性の高いソースコードからオブジェクトコード（機械語）へと翻訳してプログラムを実行します。</p>
<p>なお、コンパイラを用いてソースコードを翻訳することを「コンパイルする」と表現します。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.game-create.com/archives/26/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
