二进制数
,跟数据没区别,当CS,EIP指向哪,哪里就是程序,而汇编语言之所以叫最底层的语言,是因为,
汇编的每一个语法,都应对了一串二进制的指令,这也就是
反汇编
的原理,所以
NO1.一、
反编译
exe程序
就是
把
exe
还原为汇编语言吗?,这句话,不能叫还原,应该叫解释,“解释”的东西,没还原的那么逼真,比如,在汇编
源程序
中所有的标号和注释,进行编译后,变成二进制可执行文件后,在反汇编,标号就变成数字了,而注释更是没了.....
二、除了
还原为
汇编语言,还能
反编译为
其他
高级语言
吗?不能,高级语言的语法是建立在大量的计算机
二进制代码
之上的,比如你C语言随便调用一个子函数,到了二进制中,他是先压栈,参数(编译后参数从右往左压,每个语言还不一样),然后就是call
子函数,子函数运行后,他还要清理堆栈,所以你一个句简单的高级语言,其实蕴含了大量的代码,而高级语言编译后的程序,就脱离了他的开发环境,楼上说的会引起你误会,Java的中间码,可以用他自带的反编译工具,因为Java不是
编译器
,而是
解释器
,所以他不编译,只是解释他的中间码
NO2.所有的exe都可以反汇编,但是你要注意,不只exe这种pe格式,linux下可执行文件是elf,所以你在反汇编的时候,要注意可执行文件的文件的头,而早期的DOS只是纯二进制代码,没有
头文件
,这个很重要,你要反汇编什么格式,就要选择相应的工具
NO3
.exe反汇编,当然是OD,不过,我对OD不熟悉,好像他只支持WIN下的反汇编
有,反编译为汇编,不过因为 Linux 大部分为开源软件,不如找源代码……所以,我没注意过怎么反汇编。一般经常调试程序的人都会这个。
另外,好像 gcc 编译时可以生成过渡代码,现在也有看过度代码的,好像和汇编类似。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)