PySide这个鸟东西听起来很牛b的样子,但是折腾起来很蛋疼。其实折腾这个东西主要还是看了hexblog上的一篇文章之后才想折腾的。看别人的文章感觉很简单,但是自己折腾就是折腾死也搞不定。后来又仔细看了下文章才发现原来ida中用的那个pyside是一个修改版本,并不是直接从源码编译过来的。并且提供了一个源码的patch包(http://hex-rays.com/idapro/freefiles/pyside_patch_20110328.zip),但是这个包只是针对 03/28/2011发布的版本。
其实上面的还不是关键,关键是那个源码在Windows下编译各种错误,包括使用官方提供的python脚本也无法正常编译。各种cmake和nmake错误,而网上关于在Windows下编译pyside的教程又少的可怜,如果谁成功编译了,还望不吝赐教。
整体来说,引入pyside之后ida的脚本功能可以说是提升到了一个非常高的高度,可以有Gui的交互界面。当然,单纯用python和ida的一些api也是可以绘制图形界面的,但是这个功能要强大的多。
最后没有办法使用官方提供的补丁,终于可以让ida正常加载了,但是在python中使用的时候却会出现加载失败的错误。也就是说这个鸟东西要么在ida中可以用,要么在python中可以用。如果想一起正常使用,那根本不可能。简直是shit啊。最终插件效果图。
测试代码可以从hexblog获得。
Hello world 测试代码:
from idaapi import PluginForm
from PySide import QtGui, QtCore
class MyPluginFormClass(PluginForm):
def OnCreate(self,form):
self.parent = self.FormToPySideWidget(form)
self.PopulateForm()
def PopulateForm(self):
layout = QtGui.QVBoxLayout()
layout.addWidget(
QtGui.QLabel("Hello from PySide"))
layout.addWidget(
QtGui.QLabel("Hello form IdaPython"))
self.parent.setLayout(layout)
def OnClose(self,form):
pass
plg = MyPluginFormClass()
plg.Show("PySide Hello world")
效果图:
2 comments
我也遇到了这个问题,请问官方提供的补丁在哪可以下到,我只在官方网上找到了那个patch包,但死活还是没弄出来,还望作者再讲详细点
官网上的那个包是需要独立编译的,否则是不能用的。你可以从看雪的这个帖子下载编译好的。http://bbs.pediy.com/showthread.php?p=1108219