sourceforge上pyXML0.84只能支持到python2.4,之后没有更新。搜索网上,这位仁兄提供了适合python2.7的pyXML0.84 http://www.somethinkodd.com/oddthinking/2009/10/31/windows-installer-for-pyxml-0-8-4-for-python-2-6-x/
下载运行,提示“Pythonversion 2.7required, which was not found in the registry”。可是我明明已经安装过Python2.7了(我安装的是Active Python 2.7)。
没说的,运行OllyDbg打开PyXML-0.8.4.win32-py2.7.exe调试。打开读取注册表的API分别为RegOpenKeyEx和RegQueryValueEx。定位相关代码并在004028ED设置断点。
首先读取HKEY_LOCAL_MACHINE下的"Software\Python\PythonCore",获得版本2.7,使用sprintfs合成字符串Software\Python\PythonCore\2.7\InstallPath,并读取,读取失败。我打开注册表观察相应键值存在,我意识到win64位下注册表重定位的可能性。HKEY_LOCAL_MACHINE下的Software重定位到Software\Wow6432Node,Software\Python\PythonCore存在2.7项,但是2.7下面没有InstallPath项,于是在2.7下新建InstallPath,并设置默认值为C:\Python27(我电脑上python2.7的安装路径)。重新运行PyXML-0.8.4.win32-py2.7.exe,安装成功!
检验PyXML安装
>>>import xml
>>>xml.__version__
'0.8.4'
相应汇编码
.text:004028ED; int __cdecl sub_4028ED(int, HKEY hKey, int)
.text:004028EDsub_4028ED proc near ; CODE XREF: .text:00402BDBp
.text:004028ED ;.text:00402BF2p
.text:004028ED
.text:004028EDcbData = dword ptr -110h
.text:004028EDvar_10C = dword ptr -10Ch
.text:004028EDvar_108 = dword ptr -108h
.text:004028EDhWnd = dword ptr -104h
.text:004028EDcchName = dword ptr -100h
.text:004028EDdwIndex = dword ptr -0FCh
.text:004028EDphkResult = dword ptr -0F8h
.text:004028EDSubKey = byte ptr -0F4h</