尝试汇编反汇编器的输出(例如 objdump)[重复]

2024-03-30

可能的重复:
反汇编、修改然后重新组装 Linux 可执行文件 https://stackoverflow.com/questions/4309771/disassembling-modifying-and-then-reassembling-a-linux-executable

有人告诉我,汇编和反汇编不是相反的。显然,您无法反汇编程序,将输出直接放入汇编器中,并期望它正确运行,因为信息丢失了。

我的问题是,为什么信息会丢失?另外,丢失了什么信息?


反汇编程序(或其用户)通常不保留的一件重要的事情是指令编码。一些指令可以用多种不同的方式编码,例如:

mov rdx, -1为 48,BA,FF,FF,FF,FF,FF,FF,FF,FF(10 字节)或 48,C7,C2,FF,FF,FF,FF(7 字节)。

如果程序的其余部分在功能上某种程度上取决于上述指令的长度正好是 10(或 7)字节或取决于那些特定的字节值,并且汇编器选择汇编mov rdx, -1与原始程序中的不同,那么在反汇编+汇编之后,您会得到一个工作方式不同的不同程序。对于编码不明确的指令,汇编器不能使用指令助记符(mov rdx, -1),但其在原始程序反汇编中的确切编码(例如 48,BA,FF,FF,FF,FF,FF,FF,FF,FF)。

汇编器或链接器可能会做一些不同的事情(例如,在输出文件中对代码/数据进行额外的对齐、名称和顺序(节/段)不同),这通常不是问题,但是,再次,如果原始程序中对这些东西有一些不寻常的依赖关系,那么,重新组装的程序将会以不同的方式工作。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

尝试汇编反汇编器的输出(例如 objdump)[重复] 的相关文章

随机推荐