这种装配比较在数学上是否可行

  • 本文关键字:数学上 是否 比较 assembly
  • 更新时间 :
  • 英文 :


试图反汇编一个汇编程序,我被某个比较分支难住了。

本质上我有这个:

mov $0x2, %ebx
lea 0xffffffe0(%ebp), %esi
mov %ebx, %eax
add 0xfffffff8(%esi, %ebx, 4), %eax
cmp %eax, 0xfffffffc(%esi, %ebx, 4)
je 8048d59

所以最初 ebx 的值为 2。

然后 %esi 在帧中 %ebp 下方指向 8 个块(单词,值为 32)。 这是一个输入值,我称之为 X

然后 %eax 获取值 2。

然后 add 函数执行:eax = 2 + [X + 8] - 8

所以 X + 2

现在 cmp 线路执行:[X + 8] - 4

所以 X + 4

现在希望我对这里语法的理解是错误的,因为上次我检查 X+4 永远不会等于 X +2

-8-4适用于地址,而不是值。将您的工具切换到英特尔语法,它将更具可读性:

mov    ebx,0x2
lea    esi,[ebp-0x20]
mov    eax,ebx
add    eax,DWORD PTR [esi+ebx*4-0x8]
cmp    DWORD PTR [esi+ebx*4-0x4],eax
je     0x8048d6d

因此,它正在检查是否x[1]==x[0]+2

最新更新