内容简介: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编程(反汇编)》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- iOS汇编入门教程(一)ARM64汇编基础
- iOS 汇编入门教程(一):ARM64 汇编基础
- iOS汇编入门教程(三)汇编中的 Section 与数据存取
- iOS汇编入门教程(二)在Xcode工程中嵌入汇编代码
- 汇编语言8086笔记
- 汇编基本语法实现
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
数据结构与算法分析(Java版)(英文原版)
(美)Clifford A.Shaffer / 电子工业出版社 / 2002-5 / 39.00元
《数据结构与算法分析(C++版)(第2版)》采用程序员最爱用的面向对象C++语言来描述数据结构和算法,并把数据结构原理和算法分析技术有机地结合在一起,系统介绍了各种类型的数据结构和排序、检索的各种方法。作者非常注意对每一种数据结构的不同存储方法及有关算法进行分析比较。书中还引入了一些比较高级的数据结构与先进的算法分析技术,并介绍了可计算性理论的一般知识。本版的重要改进在于引入了参数化的模板,从而提......一起来看看 《数据结构与算法分析(Java版)(英文原版)》 这本书的介绍吧!