Drkcore

15 03 2011 Ruby Python Tweet

Pythonのdisモジュール

逆アセンブル用のモジュール

ソースコードも200行程度で読みやすそうなので、読んでみようかと。

その前にドキュメント読んだら面白かった。

Rubyで作る奇妙なプログラミング言語でスタックマシンを作ってみた経験が理解において非常に役に立った。

ProductName Rubyで作る奇妙なプログラミング言語 ~Esoteric Language~
原 悠
毎日コミュニケーションズ / ?円 ( 2008-12-20 )


リスト内包標記

>>> def cp(l): return [e for e in l]
... 
>>> dis.dis(cp)
  1           0 BUILD_LIST               0
              3 DUP_TOP             
              4 STORE_FAST               1 (_[1])
              7 LOAD_FAST                0 (l)
             10 GET_ITER            
        >>   11 FOR_ITER                13 (to 27)
             14 STORE_FAST               2 (e)
             17 LOAD_FAST                1 (_[1])
             20 LOAD_FAST                2 (e)
             23 LIST_APPEND         
             24 JUMP_ABSOLUTE           11
        >>   27 DELETE_FAST              1 (_[1])
             30 RETURN_VALUE

ループで書いてみる

>>> def cp2(l):
...   ll = []
...   for e in l:
...     ll.append(e)
...   return ll
... 
>>> dis.dis(cp2)
  2           0 BUILD_LIST               0
              3 STORE_FAST               1 (ll)

  3           6 SETUP_LOOP              27 (to 36)
              9 LOAD_FAST                0 (l)
             12 GET_ITER            
        >>   13 FOR_ITER                19 (to 35)
             16 STORE_FAST               2 (e)

  4          19 LOAD_FAST                1 (ll)
             22 LOAD_ATTR                0 (append)
             25 LOAD_FAST                2 (e)
             28 CALL_FUNCTION            1
             31 POP_TOP             
             32 JUMP_ABSOLUTE           13
        >>   35 POP_BLOCK

  5     >>   36 LOAD_FAST                1 (ll)
             39 RETURN_VALUE

参考

  • Pythonの内包表記はなぜ速い?

ProductName エキスパートPythonプログラミング
Tarek Ziade
アスキー・メディアワークス / 3780円 ( 2010-05-28 )


About

  • もう5年目(wishlistありマス♡)
  • 最近はPythonとDeepLearning
  • 日本酒自粛中
  • ドラムンベースからミニマルまで
  • ポケモンGOゆるめ

Tag

Python Deep Learning javascript chemoinformatics Emacs sake and more...

Ad

© kzfm 2003-2021