0

我正在对 python 应用程序进行逆向工程。通过它我将通过在应用程序内动态检测代码来观察行为。问题是我需要在正确的缩进级别插入代码。

例如,让我们考虑我将要检测的一段代码:

class A:
     def move(self,name):
         name=self.name
         print name
     def move1(self):
         print 'dude'

现在对于上面的示例代码,我将检测进入和退出日志记录,检测代码应该如下所示

enter code class A:
     def move(self,name):
         print 'Entry move class='A''
         name=self.name
         print name
         Print'Exit move class='A''
     def move1(self):
         print 'Entry move1 class='A''
         print 'dude'
         print 'Exit move class='A''

这是我在检测代码时需要的,而不是我得到以下信息:

enter code class A:
     def move(self,name):
print 'Entry move class='A''
             name=self.name
             print name
print'Exit move class='A''
         def move1(self):
print 'Entry move1 class='A''
             print 'dude'
print'Exit move1 class='A''

因为我正在编写一个脚本,它插入下一行并且不知道 python 代码的缩进格式。

无论如何我可以在插入时自动调整缩进,或者我应该需要知道下一行中字符的索引并在字符串中插入空格然后插入。

4

1 回答 1

1

在您的示例中,它实际上相当简单:

  • “entry”消息应该具有与它后面的语句完全相同的缩进。

  • “exit”消息应该与相应的“entry”消息具有完全相同的缩进。

也就是说,您可以通过使用装饰器而不是两个显式print语句来大大简化工作。像这个页面@trace这样的东西比成对插入代码要容易得多。prints

更进一步,您可以即时执行检测,而不是修改源文件。

于 2013-03-07T10:13:15.007 回答