2013-03-15 1 views
4

은의 우리가 파이썬 문자열 (파일이 아닌, 문자열, 파일 없음)python : 코드 객체에서 소스를 얻는 방법?

TheString = "k=abs(x)+y" 

확인을 가정하자? 이제 우리는 파이썬 지금 바이트 코드

Binary = compile(TheString , "<string>" , "exec") 

문제의 조각으로 문자열을 컴파일 : 내가 어떻게 내가 TheString, 원래의 문자열 개체를 나타내는 문자열을 모르는 여겨 진에서 얻을 수 있나요?

곧 : compile()과 반대되는 기능은 무엇입니까?

+1

http://exackoverflow.com/questions/1149513/exploring-and-decompiling-python-bytecode –

답변

11

소스 코드가 없으면 코드를 근사 할 수 있습니다. 당신은 다음의 dis module으로에게 컴파일 된 바이트 코드를 분해 근사치로 소스 코드를 재구성 할 수 있습니다

>>> import dis 
>>> TheString = "k=abs(x)+y" 
>>> Binary = compile(TheString , "<string>" , "exec") 
>>> dis.dis(Binary) 
    1   0 LOAD_NAME    0 (abs) 
       3 LOAD_NAME    1 (x) 
       6 CALL_FUNCTION   1 
       9 LOAD_NAME    2 (y) 
      12 BINARY_ADD   
      13 STORE_NAME    3 (k) 
      16 LOAD_CONST    0 (None) 
      19 RETURN_VALUE   

함수 abs() 하나 개의 인수로 호출되는 이름을 우리는 1 개 라인이 있었다 볼 수있는 분해,에서 x. 결과는 다른 이름 y에 추가되고 그 결과는 k에 저장됩니다.

unpycuncompyle2 프로젝트는 그렇게합니다. 파이썬 바이트 코드를 디 컴파일하고 그로부터 파이썬 코드를 재구성하십시오.