• 使用Unicorn-engine 续1


      续上次,在ubuntu server 14.04交叉编译好后,下一步就是在windows上使用了。

      在windows上,我主要是用python进行分析程序,因此我最初安装的是官网上的 unicorn-0.9-python2.7-win32.exe。至于我为什么要用32位的版本,因为64位的版本不能在IDAPython里使用,就像下面:

      后来,我干脆统一了IDA是32位的程序,python是32位的,unicorn也是32位的,这样的话在IDAPython里可以使用unicorn了。

      安装unicorn-0.9-python2.7-win32.exe会在site-packages目录下存在以下dll:

      他们的依赖关系如下(用dependency walker看的):

      在python2.7/Lib/site-packages/unicorn.py里也看到定义了这些动态链接库的加载顺序:

      下面我来讲下官网上的unicorn-0.9-python2.7-win32.exe有什么bug,导致我去自己编译源码。

      问题是这样的:

    Example 1:

    Error:

    Python>uc = Uc(UC_ARCH_X86, UC_MODE_64)

    Python>uc.mem_map(0x19000c000,0x1000)

    Python>uc.mem_write(0x19000c000, 'x00')

    Traceback (most recent call last):

    File "<string>", line 1, in <module>

    File "C:Python27libsite-packagesunicornunicorn.py", line 232, in mem_write

    raise UcError(status)

    unicorn.unicorn.UcError: Invalid memory write (UC_ERR_WRITE_UNMAPPED)

    Correct:

    Python>uc.mem_map(0x9000c000,0x1000)

    Python>uc.mem_write(0x9000c000, 'x00')

    Python>

      我使用的是UC_MODE_64,但是发现mem_map的时候地址只能在32位内,大于32位的地址将会在往地址写内容时报错。在测试时发现,如果指令的地址在32位以上,也不能模拟执行,那这个UC_MODE_64就感觉没什么用了。

      我在Github上发现,有人已经提出这个问题了,而且给出了对源代码的修改方案,并进行了pull request。链接:https://github.com/unicorn-engine/unicorn/issues/523 代码还没有被合并到主分支里,所以如果直接从github上下载的话,还是有问题的,所以要自己手动的去修改。

      编译完成后,按照github上的说明,我主要使用的是unicorn python bindings,在bings/python目录下,运行python setup.py install进行安装。

      同时将编译完成的unicorn.dll,/usr/x86_64-w64-mingw32/sys-root/mingw/bin/libglib-2.0-0.dll,/usr/lib/gcc/x86_64-w64-mingw32/4.8/libgcc_s_sjlj-1.dll,/usr/x86_64-w64-mingw32/lib/libwinpthread-1.dll拷贝到Lib/site-packages/unicorn目录下就可以了。他们的依赖关系是这样的:

      因此,我们修改下unicorn.py里定义的动态链接库加载顺序。

      到此,完工,可以完美使用了,并且解决了bug。附成功截图(在写入时没有报错):

  • 相关阅读:
    Styling a Flex Button control using embedded fonts(转载)
    ArcSDE Administration Command Reference (来自ARCGIS官方)
    FlexPaper_1.2.1.swc——Flex在线显示PDF文档(使用FlexPaper)感悟
    SDE数据的备份与恢复(转载)
    C#中将dll汇入exe,并加壳(转载)
    WEB页面导出为EXCEL/WORD文档的方法 (转载)
    Property Manager Updated 1.0.0.4 小工具介绍(转载)
    Openbravo 3.0安装过程简述
    Installing "uuidossp" library in Postgres 9.1
    BindingSource的事件触发顺序
  • 原文地址:https://www.cnblogs.com/wangaohui/p/5523920.html
Copyright © 2020-2023  润新知