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编程(反汇编)》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

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

Head First EJB(中文版)

Head First EJB(中文版)

KathySierra,Ber / 中国电力出版社 / 2006-9 / 79.00元

有些人只是想通过认证来取悦挑剔的老板,但相信你不是这种人。确实,你也想通过Su n认证业务组件开发人员(SCBCD)考试,但不仅如此,你还需要真正把EJB用到实处。你要构建应用,要对付最后期限,如果通过考试之后第二天早上就把你学过的EJB知识忘得一干二净,你肯定会受不了。 我们会看着你稳稳当当地通过考试,而且会帮你在实际中使用EJB。你会深入地了解EJB体系结构、会话、实体和消息驱动......一起来看看 《Head First EJB(中文版)》 这本书的介绍吧!

随机密码生成器
随机密码生成器

多种字符组合密码

HTML 编码/解码
HTML 编码/解码

HTML 编码/解码

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具