python编程(反汇编)

栏目: Python · 发布时间: 6年前

内容简介:python编程(反汇编)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】

很多同学其实不太了解,在 python 语言下面其实也是可以反汇编调试的。比如说一般的代码,其实只要添加dis库,就可以看到反汇编代码了。

1、反汇编的方法

要查看反汇编后的代码,其实很简单,参数为某一个函数名或者类名,

import dis
dis.dis(dead_loop)

2、死循环的反汇编代码

我们从dead loop开始,看看deadloop的反汇编代码是什么样子的,假设代码是这样的,

def dead_loop():
    while True:
        print 'hello, world'

那么,dis.dis(dead_loop)的效果如下所示。内容本身不复杂,大家可以好好读一读,

feixiaoxingdeMacBook-Pro-4:Desktop feixiaoxing$ python test.py 
  4           0 SETUP_LOOP              15 (to 18)
        >>    3 LOAD_GLOBAL              0 (True)
              6 POP_JUMP_IF_FALSE       17

  5           9 LOAD_CONST               1 ('hello, world')
             12 PRINT_ITEM          
             13 PRINT_NEWLINE       
             14 JUMP_ABSOLUTE            3
        >>   17 POP_BLOCK           
        >>   18 LOAD_CONST               0 (None)
             21 RETURN_VALUE

3、简单遍历的反汇编代码

看过了dead loop,我们换一个for循环看看。假设代码是这样的,

def loop():
    for i in range(10):
        print i

那么反汇编后呢?

feixiaoxingdeMacBook-Pro-4:Desktop feixiaoxing$ python test.py 
  8           0 SETUP_LOOP              25 (to 28)
              3 LOAD_GLOBAL              0 (range)
              6 LOAD_CONST               1 (10)
              9 CALL_FUNCTION            1
             12 GET_ITER            
        >>   13 FOR_ITER                11 (to 27)
             16 STORE_FAST               0 (i)

  9          19 LOAD_FAST                0 (i)
             22 PRINT_ITEM          
             23 PRINT_NEWLINE       
             24 JUMP_ABSOLUTE           13
        >>   27 POP_BLOCK           
        >>   28 LOAD_CONST               0 (None)
             31 RETURN_VALUE

4、if-else的反汇编代码

看完了循环代码,我们找一个if-else函数看看,假设代码是这样的,

def choose(data):
    if 10 < data:
        print 'big'
    else:
        print 'small'

有了上面的经验之后,相信choose函数的反汇编代码也不会太难,

feixiaoxingdeMacBook-Pro-4:Desktop feixiaoxing$ python test.py 
 12           0 LOAD_CONST               1 (10)
              3 LOAD_FAST                0 (data)
              6 COMPARE_OP               0 (<)
              9 POP_JUMP_IF_FALSE       20

 13          12 LOAD_CONST               2 ('big')
             15 PRINT_ITEM          
             16 PRINT_NEWLINE       
             17 JUMP_FORWARD             5 (to 25)

 15     >>   20 LOAD_CONST               3 ('small')
             23 PRINT_ITEM          
             24 PRINT_NEWLINE       
        >>   25 LOAD_CONST               0 (None)
             28 RETURN_VALUE

5、简单类代码

说了那么多函数,下面我们可以找个类代码看看,

class A():
    def __init__(self):
        pass
    def __del__(self):
        pass

这个类代码是不是很简单。相信汇编代码也不会难到哪里去,

feixiaoxingdeMacBook-Pro-4:Desktop feixiaoxing$ python test.py 
Disassembly of __del__:
 21           0 LOAD_CONST               0 (None)
              3 RETURN_VALUE        

Disassembly of __init__:
 19           0 LOAD_CONST               0 (None)
              3 RETURN_VALUE

6、继承类的反汇编

说完了类,我们来看看继承类代码,

class A():
    def __init__(self):
        pass
    def __del__(self):
        pass

class B(A):
    def __init__(self):
        A.__init__(self)

为了方便,我们挑选了最简单的继承类。大家看看这个继承类的反汇编如何?

feixiaoxingdeMacBook-Pro-4:Desktop feixiaoxing$ python test.py 
Disassembly of __init__:
 25           0 LOAD_GLOBAL              0 (A)
              3 LOAD_ATTR                1 (__init__)
              6 LOAD_FAST                0 (self)
              9 CALL_FUNCTION            1
             12 POP_TOP             
             13 LOAD_CONST               0 (None)
             16 RETURN_VALUE

7、后面的话

反汇编不是洪水猛兽,多看看都能学得会、用得好,个人觉得用它来调试、分析还是很有好处的。


以上所述就是小编给大家介绍的《python编程(反汇编)》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

数据结构与算法分析(Java版)(英文原版)

数据结构与算法分析(Java版)(英文原版)

(美)Clifford A.Shaffer / 电子工业出版社 / 2002-5 / 39.00元

《数据结构与算法分析(C++版)(第2版)》采用程序员最爱用的面向对象C++语言来描述数据结构和算法,并把数据结构原理和算法分析技术有机地结合在一起,系统介绍了各种类型的数据结构和排序、检索的各种方法。作者非常注意对每一种数据结构的不同存储方法及有关算法进行分析比较。书中还引入了一些比较高级的数据结构与先进的算法分析技术,并介绍了可计算性理论的一般知识。本版的重要改进在于引入了参数化的模板,从而提......一起来看看 《数据结构与算法分析(Java版)(英文原版)》 这本书的介绍吧!

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

在线进制转换器
在线进制转换器

各进制数互转换器

URL 编码/解码
URL 编码/解码

URL 编码/解码