使用两个字节(intel)使eax = 1

时间:2011-07-27 00:11:42

标签: assembly

这个问题可能听起来很奇怪,但是需要将代码注入二进制文件。

你能想到一种方法,使eax等于1,而不依赖于携带标志或其他内容,其他寄存器等内容吗?

但仅限2个字节。 3很容易,可以通过多种方式完成,但可以用2?

完成

2 个答案:

答案 0 :(得分:5)

我怀疑你的意思是2个字节,而不是2个操作码。如果你真的是指2个操作码,那么可以想到以下3字节的替代方案:

  xor eax, eax
  inc eax

  sub eax, eax
  inc eax

我无法立即想到一个双字节序列,它会做同等的事情 - 我怀疑没有。

答案 1 :(得分:2)

mov $1, %eax
nop

对你好吗? :)

如果你真的意味着两个字节,而不是两个操作码,那么你可能很难处理这些限制。我会查看周围的代码,着眼于是否有任何可以利用的东西(例如,在其他代码中间执行代码等)。或者找到一种获得更多代码空间的方法。