いちばんやさしいゲームの作り方

文系の人でも、数理学がわからない人でもゲームプログラミングをマスターできるブログ

オブジェクトファイルからオブジェクトコード(機械語)を表示するためには dumpbin コマンドを使います。

dumpbin コマンドを使うと、オブジェクトファイルに格納されているオブジェクトコード(機械語)を出力することができるようになります。具体的には x86 アセンブラのニーモニックとオペランドが出力されます。

たとえば次のようなソースコードがあったとき…

#include <cstdio>


int someFunction(int value)
{
  return value + 10;
}

int main(int argc, char* argv[])
{
  std::printf("Results is [%d]\n", someFunction(123));

  return 0;
}

以下のように実行すると…

cl /c source.cpp
dumpbin /disasm source.obj

結果は以下のようになります。

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

someFunction() という関数がネームマングリングによって ?someFunction@@YAHH@Z になっていたり、関数の後ろにパディングがあったりしていることが見て取れます。 printf() 関数のフォーマット部は $SG3907 に定数として配置されているようです。

最適化によって自分が作ったコードがどう変化するのか知りたいときなどには思い出してみてください。

Contributions




Trackback URL

メルマガ登録・解除
 
挫折不可能!初級ゲームプログラミング完全マニュアル
RSS track feedいちばんやさしいゲームの作り方 カウンター
ブログSEO対策:track word あわせて読みたい SEO STATUS