我正在尝试创建一个 python 脚本来反汇编二进制文件(准确地说是 Windows exe)并分析其代码。 我需要能够获取某个缓冲区,并提取某种结构,其中包含有关其中指令的信息。
我以前用 C 语言使用过 libdisasm,我发现它的界面非常直观和舒适。 问题是,它的 Python 接口(interface)只能通过 SWIG 使用,我无法在 Windows 下正确编译它。
在可用性方面,diStorm 提供了一个很好的开箱即用的接口(interface),但它只提供了每条指令的助记符,而不是带有定义指令类型的枚举的二进制结构。 这对我的目的来说非常不舒服,并且需要花费大量时间来包装界面以使其满足我的需求。
我还查看了 BeaEngine,它实际上提供了我需要的输出,一个包含关于每条指令的二进制信息的结构,但它的界面真的很奇怪并且违反直觉,并且在提供时它几乎立即崩溃错误的论据。 CTypes 有点像你的 Python 崩溃的终极死亡。
因此,我很高兴听到其他解决方案,这些解决方案比使用 djgcc 或 mingw 制作 SWIGed libdisasm 或为 diStorm 编写 OOP 包装器所花费的时间要少一些。 如果有人对如何编译 SWIGed libdisasm 或更好的编译二进制文件(pyd 或 dll+py)有一些指导,我很乐意听到/拥有它。 :)
提前致谢。
最佳答案
好吧,经过多方努力,我设法编译了 SWIGed libdisasm! 不幸的是,它似乎在不正确(有时是正确的)使用时使 python 崩溃。 我是怎么做到的:
我使用以下命令行 SWIGed 给定的 libdisasm_oop.i 文件
swig -python -shadow -o x86disasm_wrap.c -outdir 。 libdisasm_oop.i
使用 Cygwin 在 libdisasm 根目录中运行 ./configure。你从这里得到的唯一真实的东西是 config.h
然后我新建了一个DLL工程,在其中添加了x86disasm_wrap.c,将c:\PythonXX\libs和c:\PythonXX\Include文件夹添加到相应的变量中,设置为Release配置(重要,要么这或在包含 python.h 之前执行#undef _DEBUG)。 此外,您可能需要修复 config.h 的路径。
编译DLL工程,并将输出命名为_x86disasm.dll。 将其放在与 SWIG 生成的 x86disasm.py 相同的文件夹中,您就完成了。
对于其他不太崩溃的 python disasm 库有什么建议吗?
关于python - 用 python 反汇编 - 没有简单的解决方案?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2216816/
关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭4年前。Improvethisquestion我想在固定时间创建一系列低音和高音调的哔哔声。例如:在150毫秒时发出高音调的蜂鸣声在151毫秒时发出低音调的蜂鸣声200毫秒时发出低音调的蜂鸣声250毫秒的高音调蜂鸣声有没有办法在Ruby或Python中做到这一点?我真的不在乎输出编码是什么(.wav、.mp3、.ogg等等),但我确实想创建一个输出文件。
我好像记得Lua有类似Ruby的method_missing的东西。还是我记错了? 最佳答案 表的metatable的__index和__newindex可以用于与Ruby的method_missing相同的效果。 关于ruby-难道Lua没有和Ruby的method_missing相媲美的东西吗?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/7732154/
我有一个奇怪的问题:我在rvm上安装了rubyonrails。一切正常,我可以创建项目。但是在我输入“railsnew”时重新启动后,我有“程序'rails'当前未安装。”。SystemUbuntu12.04ruby-v"1.9.3p194"gemlistactionmailer(3.2.5)actionpack(3.2.5)activemodel(3.2.5)activerecord(3.2.5)activeresource(3.2.5)activesupport(3.2.5)arel(3.0.2)builder(3.0.0)bundler(1.1.4)coffee-rails(
在MRIRuby中我可以这样做:deftransferinternal_server=self.init_serverpid=forkdointernal_server.runend#Maketheserverprocessrunindependently.Process.detach(pid)internal_client=self.init_client#Dootherstuffwithconnectingtointernal_server...internal_client.post('somedata')ensure#KillserverProcess.kill('KILL',
我想在一个没有Sass引擎的类中使用Sass颜色函数。我已经在项目中使用了sassgem,所以我认为搭载会像以下一样简单:classRectangleincludeSass::Script::FunctionsdefcolorSass::Script::Color.new([0x82,0x39,0x06])enddefrender#hamlengineexecutedwithcontextofself#sothatwithintemlateicouldcall#%stop{offset:'0%',stop:{color:lighten(color)}}endend更新:参见上面的#re
有没有办法在这个简单的get方法中添加超时选项?我正在使用法拉第3.3。Faraday.get(url)四处寻找,我只能先发起连接后应用超时选项,然后应用超时选项。或者有什么简单的方法?这就是我现在正在做的:conn=Faraday.newresponse=conn.getdo|req|req.urlurlreq.options.timeout=2#2secondsend 最佳答案 试试这个:conn=Faraday.newdo|conn|conn.options.timeout=20endresponse=conn.get(url
我想在Ruby中创建一个用于开发目的的极其简单的Web服务器(不,不想使用现成的解决方案)。代码如下:#!/usr/bin/rubyrequire'socket'server=TCPServer.new('127.0.0.1',8080)whileconnection=server.acceptheaders=[]length=0whileline=connection.getsheaders想法是从命令行运行这个脚本,提供另一个脚本,它将在其标准输入上获取请求,并在其标准输出上返回完整的响应。到目前为止一切顺利,但事实证明这真的很脆弱,因为它在第二个请求上中断并出现错误:/usr/b
我意识到这可能是一个非常基本的问题,但我现在已经花了几天时间回过头来解决这个问题,但出于某种原因,Google就是没有帮助我。(我认为部分问题在于我是一个初学者,我不知道该问什么......)我也看过O'Reilly的RubyCookbook和RailsAPI,但我仍然停留在这个问题上.我找到了一些关于多态关系的信息,但它似乎不是我需要的(尽管如果我错了请告诉我)。我正在尝试调整MichaelHartl'stutorial创建一个包含用户、文章和评论的博客应用程序(不使用脚手架)。我希望评论既属于用户又属于文章。我的主要问题是:我不知道如何将当前文章的ID放入评论Controller。
大家好!我想知道Ruby中未使用语法ClassName.method_name调用的方法是如何工作的。我头脑中的一些是puts、print、gets、chomp。可以在不使用点运算符的情况下调用这些方法。为什么是这样?他们来自哪里?我怎样才能看到这些方法的完整列表? 最佳答案 Kernel中的所有方法都可用于Object类的所有对象或从Object派生的任何类。您可以使用Kernel.instance_methods列出它们。 关于没有类的Ruby方法?,我们在StackOverflow
我真的为这个而疯狂。我一直在搜索答案并尝试我找到的所有内容,包括相关问题和stackoverflow上的答案,但仍然无法正常工作。我正在使用嵌套资源,但无法使表单正常工作。我总是遇到错误,例如没有路线匹配[PUT]"/galleries/1/photos"表格在这里:/galleries/1/photos/1/edit路线.rbresources:galleriesdoresources:photosendresources:galleriesresources:photos照片Controller.rbdefnew@gallery=Gallery.find(params[:galle