gpt4 book ai didi

assembly - 尝试组装反汇编器的输出(例如 objdump)

转载 作者:行者123 更新时间:2023-12-03 23:32:39 30 4
gpt4 key购买 nike

这个问题在这里已经有了答案:




8年前关闭。




Possible Duplicate:
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)。

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

关于assembly - 尝试组装反汇编器的输出(例如 objdump),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8510129/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com