导航:首页 > 源码编译 > 在线协同反编译

在线协同反编译

发布时间:2023-03-22 08:52:10

A. 用python2.7.1写的小程序可以反编译得到它的源代码吗

可以,网上有很多在线的反编译工具,给你发几个链接:
1、http://depython.com/index.php
2、https://github.com/eble/pyc2py
3、http://tool.lu/pyc/
不过好像第一个只适用于Python2.0-2.6,第二个适用于Python2.6,第三个应该可以反编译2.7,你可以都试一下。

B. 编译器的发展史

编译器
编译器,是将便于人编写,阅读,维护的高级计算机语言翻译为计算机能识别,运行的低级机器语言的程序。编译器将源程序(Source program)作为输入,翻译产生使用目标语言(Target language)的等价程序。源程序一般为高级语言(High-level language),如Pascal,C++等,而目标语言则是汇编语言或目标机器的目标代码(Object code),有时也称作机器代码(Machine code)。

一个现代编译器的主要工作流程如下:

源程序(source code)→预处理器(preprocessor)→编译器(compiler)→汇编程序(assembler)→目标程序(object code)→连接器(链接器,Linker)→可执行程序(executables)
目录 [隐藏]
1 工作原理
2 编译器种类
3 预处理器(preprocessor)
4 编译器前端(frontend)
5 编译器后端(backend)
6 编译语言与解释语言对比
7 历史
8 参见

工作原理
翻译是从源代码(通常为高级语言)到能直接被计算机或虚拟机执行的目标代码(通常为低级语言或机器言)。然而,也存在从低级语言到高级语言的编译器,这类编译器中用来从由高级语言生成的低级语言代码重新生成高级语言代码的又被叫做反编译器。也有从一种高级语言生成另一种高级语言的编译器,或者生成一种需要进一步处理的的中间代码的编译器(又叫级联)。

典型的编译器输出是由包含入口点的名字和地址以及外部调用(到不在这个目标文件中的函数调用)的机器代码所组成的目标文件。一组目标文件,不必是同一编译器产生,但使用的编译器必需采用同样的输出格式,可以链接在一起并生成可以由用户直接执行的可执行程序。

编译器种类
编译器可以生成用来在与编译器本身所在的计算机和操作系统(平台)相同的环境下运行的目标代码,这种编译器又叫做“本地”编译器。另外,编译器也可以生成用来在其它平台上运行的目标代码,这种编译器又叫做交叉编译器。交叉编译器在生成新的硬件平台时非常有用。“源码到源码编译器”是指用一种高级语言作为输入,输出也是高级语言的编译器。例如: 自动并行化编译器经常采用一种高级语言作为输入,转换其中的代码,并用并行代码注释对它进行注释(如OpenMP)或者用语言构造进行注释(如FORTRAN的DOALL指令)。

预处理器(preprocessor)
作用是通过代入预定义等程序段将源程序补充完整。

编译器前端(frontend)
前端主要负责解析(parse)输入的源程序,由词法分析器和语法分析器协同工作。词法分析器负责把源程序中的‘单词’(Token)找出来,语法分析器把这些分散的单词按预先定义好的语法组装成有意义的表达式,语句 ,函数等等。 例如“a = b + c;”前端词法分析器看到的是“a, =, b , +, c;”,语法分析器按定义的语法,先把他们组装成表达式“b + c”,再组装成“a = b + c”的语句。 前端还负责语义(semantic checking)的检查,例如检测参与运算的变量是否是同一类型的,简单的错误处理。最终的结果常常是一个抽象的语法树(abstract syntax tree,或 AST),这样后端可以在此基础上进一步优化,处理。

编译器后端(backend)
编译器后端主要负责分析,优化中间代码(Intermediate representation)以及生成机器代码(Code Generation)。

一般说来所有的编译器分析,优化,变型都可以分成两大类: 函数内(intraproceral)还是函数之间(interproceral)进行。很明显,函数间的分析,优化更准确,但需要更长的时间来完成。

编译器分析(compiler analysis)的对象是前端生成并传递过来的中间代码,现代的优化型编译器(optimizing compiler)常常用好几种层次的中间代码来表示程序,高层的中间代码(high level IR)接近输入的源程序的格式,与输入语言相关(language dependent),包含更多的全局性的信息,和源程序的结构;中层的中间代码(middle level IR)与输入语言无关,低层的中间代码(Low level IR)与机器语言类似。 不同的分析,优化发生在最适合的那一层中间代码上。

常见的编译分析有函数调用树(call tree),控制流程图(Control flow graph),以及在此基础上的 变量定义-使用,使用-定义链(define-use/use-define or u-d/d-u chain),变量别名分析(alias analysis),指针分析(pointer analysis),数据依赖分析(data dependence analysis)等等。

上述的程序分析结果是编译器优化(compiler optimization)和程序变形(compiler transformation)的前提条件。常见的优化和变新有:函数内嵌(inlining),无用代码删除(Dead code elimination),标准化循环结构(loop normalization),循环体展开(loop unrolling),循环体合并,分裂(loop fusion,loop fission),数组填充(array padding),等等。 优化和变形的目的是减少代码的长度,提高内存(memory),缓存(cache)的使用率,减少读写磁盘,访问网络数据的频率。更高级的优化甚至可以把序列化的代码(serial code)变成并行运算,多线程的代码(parallelized,multi-threaded code)。

机器代码的生成是优化变型后的中间代码转换成机器指令的过程。现代编译器主要采用生成汇编代码(assembly code)的策略,而不直接生成二进制的目标代码(binary object code)。即使在代码生成阶段,高级编译器仍然要做很多分析,优化,变形的工作。例如如何分配寄存器(register allocatioin),如何选择合适的机器指令(instruction selection),如何合并几句代码成一句等等。

编译语言与解释语言对比
许多人将高级程序语言分为两类: 编译型语言 和 解释型语言 。然而,实际上,这些语言中的大多数既可用编译型实现也可用解释型实现,分类实际上反映的是那种语言常见的实现方式。(但是,某些解释型语言,很难用编译型实现。比如那些允许 在线代码更改 的解释型语言。)

历史
上世纪50年代,IBM的John Backus带领一个研究小组对FORTRAN语言及其编译器进行开发。但由于当时人们对编译理论了解不多,开发工作变得既复杂又艰苦。与此同时,Noam Chomsky开始了他对自然语言结构的研究。他的发现最终使得编译器的结构异常简单,甚至还带有了一些自动化。Chomsky的研究导致了根据语言文法的难易程度以及识别它们所需要的算法来对语言分类。正如现在所称的Chomsky架构(Chomsky Hierarchy),它包括了文法的四个层次:0型文法、1型文法、2型文法和3型文法,且其中的每一个都是其前者的特殊情况。2型文法(或上下文无关文法)被证明是程序设计语言中最有用的,而且今天它已代表着程序设计语言结构的标准方式。分析问题(parsing problem,用于上下文无关文法识别的有效算法)的研究是在60年代和70年代,它相当完善的解决了这个问题。现在它已是编译原理中的一个标准部分。

有限状态自动机(Finite Automaton)和正则表达式(Regular Expression)同上下文无关文法紧密相关,它们与Chomsky的3型文法相对应。对它们的研究与Chomsky的研究几乎同时开始,并且引出了表示程序设计语言的单词的符号方式。

人们接着又深化了生成有效目标代码的方法,这就是最初的编译器,它们被一直使用至今。人们通常将其称为优化技术(Optimization Technique),但因其从未真正地得到过被优化了的目标代码而仅仅改进了它的有效性,因此实际上应称作代码改进技术(Code Improvement Technique)。

当分析问题变得好懂起来时,人们就在开发程序上花费了很大的功夫来研究这一部分的编译器自动构造。这些程序最初被称为编译器的编译器(Compiler-compiler),但更确切地应称为分析程序生成器(Parser Generator),这是因为它们仅仅能够自动处理编译的一部分。这些程序中最着名的是Yacc(Yet Another Compiler-compiler),它是由Steve Johnson在1975年为Unix系统编写的。类似的,有限状态自动机的研究也发展了一种称为扫描程序生成器(Scanner Generator)的工具,Lex(与Yacc同时,由Mike Lesk为Unix系统开发)是这其中的佼佼者。

在70年代后期和80年代早期,大量的项目都贯注于编译器其它部分的生成自动化,这其中就包括了代码生成。这些尝试并未取得多少成功,这大概是因为操作太复杂而人们又对其不甚了解。

编译器设计最近的发展包括:首先,编译器包括了更加复杂算法的应用程序它用于推断或简化程序中的信息;这又与更为复杂的程序设计语言的发展结合在一起。其中典型的有用于函数语言编译的Hindley-Milner类型检查的统一算法。其次,编译器已越来越成为基于窗口的交互开发环境(Interactive Development Environment,IDE)的一部分,它包括了编辑器、连接程序、调试程序以及项目管理程序。这样的IDE标准并没有多少,但是对标准的窗口环境进行开发已成为方向。另一方面,尽管近年来在编译原理领域进行了大量的研究,但是基本的编译器设计原理在近20年中都没有多大的改变,它现在正迅速地成为计算机科学课程中的中心环节。

在九十年代,作为GNU项目或其它开放源代码项目的一部分,许多免费编译器和编译器开发工具被开发出来。这些工具可用来编译所有的计算机程序语言。它们中的一些项目被认为是高质量的,而且对现代编译理论感性趣的人可以很容易的得到它们的免费源代码。

大约在1999年,SGI公布了他们的一个工业化的并行化优化编译器Pro64的源代码,后被全世界多个编译器研究小组用来做研究平台,并命名为Open64。Open64的设计结构好,分析优化全面,是编译器高级研究的理想平台。

编译器是一种特殊的程序,它可以把以特定编程语言写成的程序变为机器可以运行的机器码。我们把一个程序写好,这时我们利用的环境是文本编辑器。这时我程序把程序称为源程序。在此以后程序员可以运行相应的编译器,通过指定需要编译的文件的名称就可以把相应的源文件(通过一个复杂的过程)转化为机器码了。

编译器工作方法
首先编译器进行语法分析,也就是要把那些字符串分离出来。然后进行语义分析,就是把各个由语法分析分析出的语法单元的意义搞清楚。最后生成的是目标文件,我们也称为obj文件。再经过链接器的链接就可以生成最后的可执行代码了。有些时候我们需要把多个文件产生的目标文件进行链接,产生最后的代码。我们把一过程称为交叉链接。

C. 怎么制作帮助文档

使用QuickCHM软件轻松编译CHM格式的文件
谈起CHM格式的文件,可能无人不晓,因为几乎所有的软件,现在都用CHM格式的文档制作软件帮助文件。另外,有很大一部分电子图书也是用CHM格式编译的。其实,编译CHM格式的文件很简单,下面就为大家介绍一款制作CHM文件的利器——QuickCHM。
软件名称:QuickCHM
软件大小:1460KB
下载地址:http://www.skycn.com/soft/6785.html
在介绍QuickCHM之前,有必要对CHM的格式作个简单说明。CHM文件格式是微软1998年推出的基于HTML的帮助文件系统,它代替了早先的WinHelp帮助系统,能在Windows 98或NT及以上版本的操作系统中直接运行。
编译CHM
QuickCHM未注册时,只能编辑最多20个节点的项目,在制困州作CHM文件前,最好把要编译进CHM中的文件编辑成HTML网页文件,CHM格式的文件支持所汪尺此有的网页元素,所以你可以随心所欲地在Dreamweaver等网页编辑软件中编辑HTML文件。QuickCHM自带一个简易的网页编辑器,利用它可以编辑一些简单的网页,一般的做法是在Dreamweaver中做好网页,然后在QuickCHM中进行局部的修改。
需要注意的是编译进CHM文档中的文件最好都放在同一个文件夹中。
启动QuickCHM,在菜单栏执行“文件→新建”命令,新建一个“hhp”项目。切换到“目录”页,在菜单栏执行“主题→导入→添加文件夹”,导入待编译的文件夹中的文件,注意,在弹出的“添加文件夹”对话框中,可以使用过滤器,防止图片等某些类型的文件进入目录。在默认的情况下,进入目录中的各节点即主题都是以网页标题显示的(如图1),也可以在“系统选项”中设置为以文件名显示。接下来的任务,就是编辑目录和网页,下面就以这两个方面作简单的介绍。
编辑目录:
目录的编辑主要是重命名主题,修改主题图标,排序主题,嵌套主题,新建主题和删除主题,这些都可以利用右键快捷菜单和“目录”页上的按钮完成。
编辑网页:
QuickCHM集成了一个所见即所得的网页编辑器,利用QuickCHM提供的网页编辑工具箱(如图1),可以完成大部分的网页操作。切换到“源文件”页,可以对HTML源代码进行直接修改。和多数网页编辑软件一样,切换到“预览”页,可以对当前网页实时预览。

图1
利用同样的方法,还可以给帮助系统做一个“索引”页。
目录和网页编辑完成以后,就可以输出CHM文档了,不过在输出前也可以把它保存为一个“.hhp”项目,以便日后继续编辑。点击工具栏上的“编译”按钮,编译完成,如图2所示,这是利用上述的方法制作的“瑞星杀毒软件2004版”的帮助系统,从图中可以看出,这个帮助系统的“面板”上只有“目录”页,没有“索引”页。

图2
事实上,CHM文件的这个阅读平台即“浏览窗体”的所有部分都可以在“编译”前进行修改和定制,若你做进CHM帮助系统的各网页间都能相互导航,我们甚至可以隐藏或关闭整个“面板”。
在菜单栏上执行“选项→项目选项”命令,弹出“参数”对话框,如图3所示,在这里可以设定“主页”、“默认页”,显示或隐藏工具栏按钮和标题,显示或隐藏面板及面板上的目录、索引等,在这里还可以设定目录的表现方式和整个窗体的外观,添加“闪屏”(启动时一个一闪而过的图片,相当于软件的启动画面)等,当然了,以上的所有设置必须在“编译”前设置才能看到效果。

图3
反编译CHM
QuickCHM不仅能把HTML网页、文本文件、图片等编译为一个CHM文件, 而且还能反编译一个CHM文件,也就是说,利用QuickCHM,可以释放CHM文件中的HTML文件、文本文件、图片文件等资源,并且它能够恢复源文件的全部目录结构和文件名,以便帮助我们得到源文件进行资料恢复或二次编辑。
启动QuickCHM,在菜单栏执行“文件→反编译”,在弹出的对话框中选择要进行反编译的CHM文件以及反编译得到的HTML文件和图片等其它文件资源的保存位置,点击“确定”,反编译即可完成,同时保存HTML文件和图片等其它文件的文件夹被困迅打开。
可以看到,需要还原文件已经出现在这个文件夹中了。

D. Eclipse怎么在线安装JD-Eclipse反编译插件

一、Eclipse在线安装JD-Eclipse反编译插件

1、在eclipse的help—》Install New Software...中添加新软件开发,添加它的源:
name:jd-eclipse_update_site
address:jd.benow.ca/jd-eclipse/update
出现上面的界面,说明简差衡已经安装过了。
2、选择出现的资源,一路next安装,最后重启;
3、在窗口 —》 首选项(preference) —》 常规 —》庆档 编辑器(editor) —》 文件关联拦做 中设置,将*.class 和 *.class without source的默认的相关联编辑器改为class file editor。

E. 自己可以编译安卓源码吗

用最新的Ubuntu 16.04,请首先确保自己已经安装了Git.没安装的同学可以通过以下命令进行安装:

sudo apt-get install git git config –global user.email “[email protected]” git config –global user.name “test”

其中[email protected]为你自己的邮箱.

简要说明

android源码编译的四个流程:1.源码下载;2.构建编译环境;3.编译源码;4运行.下文也将按照该流程讲述.

源码下载

由于某墙的原因,这里我们采用国内的镜像源进行下载.
目前,可用的镜像源一般是科大和清华的,具体使用差不多,这里我选择清华大学镜像进行说明.(参考:科大源,清华源)

repo工具下载及安装

通过执行以下命令实现repo工具的下载和安装

mkdir ~/binPATH=~/bin:$PATHcurl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repochmod a+x ~/bin/repo

补充说明
这里,我来简单的介绍下repo工具,我们知道AOSP项目由不同的子项目组成,为了方便进行管理,Google采用Git对AOSP项目进行多仓库管理.在聊repo工具之前,我先带你来聊聊多仓库项目:

我们有个非常庞大的项目Pre,该项目由很多个子项目R1,R2,...Rn等组成,为了方便管理和协同开发,我们为每个子项目创立自己的仓库,整个项目的结构如下:


这里写图片描述

执行完该命令后,再使用make命令继续编译.某些情况下,当你执行jack-admin kill-server时可能提示你命令不存在,此时去你去out/host/linux-x86/bin/目录下会发现不存在jack-admin文件.如果我是你,我就会重新repo sync下,然后从头来过.

错误三:使用emulator时,虚拟机停在黑屏界面,点击无任何响应.此时,可能是kerner内核问题,解决方法如下:
执行如下命令:

  • ./out/host/linux-x86/bin/emulator -partition-size 1024 -kernel ./prebuilts/qemu-kernel/arm/kernel-qemu-armv7

  • 通过使用kernel-qemu-armv7内核 解决模拟器等待黑屏问题.而-partition-size 1024 则是解决警告: system partion siez adjusted to match image file (163 MB >66 MB)

    如果你一开始编译的版本是aosp_arm-eng,使用上述命令仍然不能解决等待黑屏问题时,不妨编译aosp_arm64-eng试试.

    结束吧

    到现在为止,你已经了解了整个android编译的流程.除此之外,我也简单的说明android源码的多仓库管理机制.下面,不妨自己动手尝试一下.

    F. 我用OD反编译了一个小软件,怎么把JP强制跳过啊,在线等,谢谢

    如果想直接跳过,改je为jmp。如果指令长度不够,把test eax,eax和第二句的je一起改,修改的时候选中nop填充。
    看样子你这个是创建线程后判断返回句柄看是否成功,一般创建线程都会成功的吧。。。

    阅读全文

    与在线协同反编译相关的资料

    热点内容
    大连桶装水溯源码售价 浏览:300
    php怎么跳转到电脑 浏览:413
    如何在电脑上创建新网络连接服务器 浏览:61
    c语言编译之后如何运行 浏览:566
    mfc多线程编程视频 浏览:410
    c编译的中文怎么写 浏览:91
    单片机连接蜂鸣器电路 浏览:844
    程序员买房前后对比照 浏览:988
    cmdjava中文乱码 浏览:947
    窗口app哪个好 浏览:731
    xzforandroid 浏览:577
    程序员那么可爱歌曲完整版 浏览:906
    为什么购买pdf 浏览:45
    操作系统代码编译 浏览:483
    程序员东北大学 浏览:426
    编译忽略空字符 浏览:118
    多店铺阿里云服务器教程 浏览:379
    单片机求初值 浏览:421
    安卓机如何在电脑备份图片 浏览:927
    ca证书加密机价格 浏览:799