留言与评论(共有 0 条评论) |
发布时间:2020-04-12 08:49:28
反汇编是指将非汇编目标代码转变成汇编的过程.
你所看到的反汇编代码,其实是由C编译器将C语言代码直接编译成汇编代码的,并非由机器码反汇编成汇编.
这样做在调试阶段有非常大的意义,比如你写的代码,语法上一点错误都没有,但是逻辑上有了错误,往往你要找到这个逻辑错误是很难的,这时候在调试的时候单步执行反汇编代码就变的很有意义了,给你举个例子:将变量十进制码转成16进制,十进制码放在变量tmp中,如果代码这样写:
d=(tmp>>4)*10+tmp&0x0F;
假如你输入tmp变量存储的是十进制的23(存储为0x23),然后使用上句准换为16进制,那么d应该等于0x17,但实际上代码的结果却是0x07,原因就是虽然上句代码语法上没有错误,但是逻辑上有错,运算符'+'的优先级是大于运算符'&'的,这就造成了运算结果出错,结合反汇编代码可以很容易查出这类错误.
反汇编和C代码中都可以设置断点,但调试反汇编可以获得更高的精度,因为一句C代码可能有数十条汇编代码组成,在C代码单步执行一次,可能执行了十几条汇编代码,而在反汇编界面单步调试,每次只执行一句汇编代码(滥竽充数一下???)
我1993年毕业时的毕业设计就是基于SCO Unix操作系统的C语言反编译器,因此而获得上海交大计算机系优秀毕业设计奖。我们一共三个同学,我负责编码,另一个负责c语言库函数识别模块,还有一个负责测试。这两位同学都在美国。在那之前,我和另一个同学也设计了一个自定义高级语言的编译器。反编译系统设计的难点在于反优化和库函数识别。由于编译器在编译时进行了大量的优化,因此会导致反编译出来的结果难以看懂。当然,反汇编是反编译的预处理过程,这个没有什么技术含量。
有,不过反C,反JAVA之类的通称反编译
能提出这个问题的人是人才
此汇编非彼汇编啊兄弟
汇编语言是一门语言
反汇编这个词里面的汇编 只是一个动作 并不是代表汇编语言。
C需要预编译 编译 汇编 链接4个步骤,这里的汇编表示的是一个过程,就是把汇编语言转换为机器语言的过程,不是汇编语言。
反汇编就是将这个过程逆向而已!
反C是什么操作?,C语言是个名词,咋还能反?。题主多学习学习。
机器码和汇编是一一对应的,所以可以反汇编。
c的话实际编译中是先变编译成汇编,然后才是机器码。反向编译基本不可能了。
C语言直接运行,汇编语言需要对源代码进行汇编成机器认识后才能运行,而需要程序升级修改的时候,就需要反汇编才能修改源代码,,
不清楚,没研究。
留言与评论(共有 0 条评论) |
全站搜索