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

查看所有标签

猜你喜欢:

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

灵活Web设计

灵活Web设计

Zoe Mickley Gillenwater / 李静 / 2009-9 / 45.00元

《灵活Web设计》讲述如何应用可变或不固定布局及弹性布局来实现灵活设计,以满足用户的根据自己需求而调整浏览站点的窗口大小的要求。全书共分为9章,内容包括:理解灵活布局、可变布局和弹性布局存在的挑战、设计灵活布局的方法、准备网页设计、创建可变布局结构、创建弹性布局结构、规范灵活性、设置文字间距、添加背景图像和颜色、创建灵活的图像。 《灵活Web设计》适用于网页设计人员、网页设计爱好者。一起来看看 《灵活Web设计》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

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

RGB HEX 互转工具

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具