我正在玩逆向工程软件。我有基本的编码经验,但只有顶级语言,如java和python。
我已经与IDA pro解组了一些exe来解决流结构问题,并使用Hex Workshop编辑十六进制代码并重新编译。所以,我有所有这些机制,可以成功创建我编辑的exe。
对于命令是什么以及它们如何工作,是否有任何良好的指南?我的google-fu找不到任何东西。我甚至不确定他们叫什么。它与我习惯的编码有很大不同,我正在努力解析它。
我说的是jz,jnz,eax,lea,mov,cmp等等。我可以找到一些对单个命令的分散引用,这些引用有些帮助,但还不足以做有用的事情。我正在寻找关于整个主题的好的入门读物。我可以通过一些事情来了解并了解他们的工作以及如何改变他们做我想做的事情。
感谢。
答案 0 :(得分:1)
jz
,mov
等...这些被称为指令,而不是命令(eax
除外,它是寄存器< / em>的)。
您正在编辑的字节称为操作码,这些是处理器从内存中取出并解码为指令的内容。
示例:当您看到
时.text:00428E4A 8B F0 mov esi, eax
描述该行的正确方法是:地址0x00428E4A是操作码8B F0。这些操作码被解码为mov
指令,源操作数为eax
寄存器,目标操作数为esi
寄存器。
这里的细节信息的确切来源是Intel® 64 and IA-32 Architectures Software Developer Manuals。具体来说,您需要第2卷,指令集参考,A-Z。
答案 1 :(得分:0)
您需要确定编译EXE的CPU。然后你谷歌搜索这个CPU的汇编语言。在不太常见的情况下,如果找不到它,则需要搜索CPU的数据表。