内容简介: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笔记
- 汇编基本语法实现
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Principles of Object-Oriented JavaScript
Nicholas C. Zakas / No Starch Press / 2014-2 / USD 24.95
If you've used a more traditional object-oriented language, such as C++ or Java, JavaScript probably doesn't seem object-oriented at all. It has no concept of classes, and you don't even need to defin......一起来看看 《Principles of Object-Oriented JavaScript》 这本书的介绍吧!