反编译器 反编译出来的汇编代码 和 原来的汇编代码有什么区别吗

用JD-GUI和JAD反编译了几个class文件结果JAD说鈈能完全反编译,JD-GUI则给出了一大堆汇编代码这是什么情况??要怎么样才能变成j…

编译、汇编、反编译、反汇编、偽指令区别

编译、汇编、反编译、反汇编、伪指令区别

编译就是把高级语言变成计算机

可以识别的二进制语言利用编译程序从源语言编寫的源程

序产生目标程序的过程。

汇编大多是指汇编语言汇编程序。把汇编语言翻

译成机器语言的过程称为汇编在汇编语言中,用助記符

代替操作码用地址符号

代替地址码。这样用符号代替机器语言的二进制码就把机

器语言变成了汇编语言。于是汇编语言亦称为符號语言用

汇编语言编写的程序,机器不能直接识别要由一种程序将

汇编语言翻译成机器语言,这种起翻译作用的程序叫汇编程

序汇編程序是系统软件中语言处理的系统软件。

反汇编:将可执行的文件中的二进制经过分析转变

反编译:将可执行的程序经过分析转变为高級语言

的源代码格式一般完全的转换不太可能,编译器的优化等

用于告诉汇编程序如何进

行汇编的指令,它既不控制机器的操作也不被汇编成机器代

码只能为汇编程序所识别并指导汇编如何进行。

int32_t是中定义的类型之一;它是一个32位寬的有符号整数类型具有2的补码表示,没有填充位

反编译器似乎采用了尽可能短的路径,而没有真正理解如何编写惯用的C代码代码夲身甚至可能不是有效的 C ,因为我认为它可能不符合C的严格别名要求

g2地址的值转换为int32_t;然后将值4 * v1添加到其中;并将生成的整数强制转换为指姠int32_t的指针。这是一种人为的写作方式

或者;如果g2已经被声明为int32_t的数组那么写

总而言之,代码将g2的地址转换为指向int32_t的指针然后将指针指定給 v1 (0-基于)int32_t在连续int32_t s的数组中,其中第一个是该指针的一个v2

直接 - 但不可移植的代码(在64位处理器中不起作用!)代码

我不确定你的问题是什么,但我会尝试帮助回答解释说当程序员写东西时,他或她知道的每一行都有一个目的 - 例如如果他们想写一条消息,他们可能会调鼡变量“myMessage”但是,此信息不包含在最终结果中因此,反编译器不会将其称为“myMessage”并且只会分配一个内存地址(用&引用表示)或随機变量名称(用上面的v表示)。通过一些详细的检查你可以弄清楚代码的这一部分具体做了什么,但没有像“myMessage”这样的提示你可能必須先处理并绘制整个程序才能真正理解它。

你只能说它需要4乘以v1,然后将它加到变量g2的地址结果是存储在v2中的32位地址。因为这里没有提到g2甚至是什么的参考那么你可能会开始在我的答案中看到基本原理。由于它是32位(4字节)这可以解释乘以4,也许v1是一个计数器

我要回帖

 

随机推荐