内容简介: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笔记
- 汇编基本语法实现
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Head First EJB(中文版)
KathySierra,Ber / 中国电力出版社 / 2006-9 / 79.00元
有些人只是想通过认证来取悦挑剔的老板,但相信你不是这种人。确实,你也想通过Su n认证业务组件开发人员(SCBCD)考试,但不仅如此,你还需要真正把EJB用到实处。你要构建应用,要对付最后期限,如果通过考试之后第二天早上就把你学过的EJB知识忘得一干二净,你肯定会受不了。 我们会看着你稳稳当当地通过考试,而且会帮你在实际中使用EJB。你会深入地了解EJB体系结构、会话、实体和消息驱动......一起来看看 《Head First EJB(中文版)》 这本书的介绍吧!