【问题标题】:Where do registers AL and AX overflow to?寄存器 AL 和 AX 溢出到哪里?
【发布时间】:2020-02-01 12:03:58
【问题描述】:

请告诉我以下汇编(伪)代码的结果是什么?
我们已经将寄存器EAX的所有位都设置为0,因此我们也将AHALAX设置为0。但是当我减去AL的最低位时,我们将取两者的补码和加法,给我们一堆 1,后跟一个 0。

XOR eax, eax
SUB al 0x01

总而言之,我的问题是,在执行上面的代码时,只是AL会充满1s,还是会延续到AX和@987654329 @

【问题讨论】:

    标签: assembly x86 cpu-registers integer-overflow ctf


    【解决方案1】:

    add/sub 的进位进入 CF,EFLAGS 中的进位标志。

    sub al, 1 的操作数是 AL,而不是 EAX。 EAX 的高 24 位不受 8 位操作数大小的指令影响。

    如果您想将整个 EAX 翻转为全一,则需要使用 sub eax, 1。 (或not eax,或dec eax)。 sub al, 1 是一条不同的指令,不同之处在于它只影响 AL(和 EFLAGS),而不影响 AL 之外的任何位。


    给我们一堆 1,然后是一个 0。

    没有。在 2 的补码中,-1 由一个设置了所有位的数字表示。例如,在 8 位中是 0xFF,在 32 位中是 0xFFFFFFFF。底部有一个0 位,它将代表-2

    AL 会满是 1,还是会延续到 AX 和 EAX。

    只是 AL。您可以自己尝试一下(如果您仍然感到困惑,请询问结果的解释)。

    【讨论】:

    • 谢谢,我的Assembly很差,所以我尝试在CTF中反转,我没有设法编译和检查。
    猜你喜欢
    • 1970-01-01
    • 2014-10-16
    • 2019-09-06
    • 2020-04-18
    • 1970-01-01
    • 1970-01-01
    • 2016-01-26
    • 1970-01-01
    相关资源
    最近更新 更多