元帅加载和执行

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了元帅加载和执行相关的知识,希望对你有一定的参考价值。

我有这段Python代码。

import marshal, imp
if imp.get_magic() == 'x03xf3
':
    __code = marshal.loads('cx00x00x00x00.....x00dx01x00kx00.....		
x01')
del marshal, imp
exec __code

这个... if 条件检查Python版本是否是 "正确的 "版本。然后 marshal 是用来加载一个包含一些代码的字符串。

第一个问题。这个字符串是怎么生成的?也许是 compile()? 但具体怎么做呢?"第二个问题。我可以反编译那个字符串吗? 怎么解?

答案

至于它是如何创建的,它的东西是这样的。

a = marshal.dumps(compile("def test(): return 0", "<source>", "exec"))

至于研究出它的作用?你千万不要解开它。你不知道里面藏着什么恐怖的金块,当你把它装进去后会被执行。

你也许可以用dis

print dis.disassemble_string(a)

这将给你代码中的每个操作。

取消测试函数的输出

>>    0 DUP_TOPX            0
      3 STOP_CODE      
>>    4 STOP_CODE      
      5 STOP_CODE      
      6 STOP_CODE      
      7 STOP_CODE      
>>    8 STOP_CODE      
      9 POP_TOP        
     10 STOP_CODE      
     11 STOP_CODE      
     12 STOP_CODE      
>>   13 BINARY_AND     
     14 STOP_CODE      
     15 STOP_CODE      
     16 STOP_CODE      
     17 POP_JUMP_IF_TRUE    13
     20 STOP_CODE      
     21 STOP_CODE      
     22 LOAD_CONST          0 (0)
     25 MAKE_FUNCTION       0
     28 STORE_NAME          0 (0)
     31 LOAD_CONST          1 (1)
... etc etc

它要靠你通过每一个操作来识别它在做什么。我可以发现一些我理解的指令,比如 34 RETURN_VALUE文件 这里应该有助于识别其他

以上是关于元帅加载和执行的主要内容,如果未能解决你的问题,请参考以下文章

tensorflow 加载数据:错误的元帅数据

如何使用事件侦听器来加载动画片段的循环

VS2010中的元帅结构指针

C# 中的元帅“char *”

元帅的 [In] [Out] 属性

元帅浮点*到 C#