【发布时间】:2023-03-30 20:15:01
【问题描述】:
我正在编写一个程序来练习一些逆向工程技术。以下是 x86 (Intel) 汇编代码的相关行:
mov, eax [ebp - 20]
cdq
idiv ecx
通过我的输入(网络套接字),我可以在执行这些组装行之前控制进入eax 和ecx 的字节。
我的问题是:我可以使用什么最小值(正或负)来导致除法溢出(除法溢出不是“除以零”错误,而是返回的结果大于32 位,因此不适合eax(返回寄存器)。
提前感谢您的帮助!
【问题讨论】:
-
没有这样的输入,所有的结果都会适合。实际上也许
-2^31 / -1不会:) -
@harold 我想我想将 minimum 定义为最小的正值或负值 s.t.发生溢出。作为一个完全错误和人为的例子:如果 0xff/3 和 0xff/2 都导致溢出,我会认为 0xff/2 是最小值。
-
@Jester 我将不得不考虑您的建议,但是在将 64 位数量除以 32 位数量时肯定会发生除法溢出。但是,乘法并非如此。
-
除了这是一个 32 位除法。对 64 位符号扩展除法执行,但仍然是 32 位除法。