def*_*def 6 x86 assembly flags cpu-registers
在反汇编中,我经常看到正在使用字符串操作指令而不考虑方向标志(DF)的状态,如下所示:
or ecx, 0FFFFFFFFh
xor eax, eax
mov edi, ebp
repne scasb
Run Code Online (Sandbox Code Playgroud)
CLD或者STD在函数开始后没有找到指令,也没有其他可能影响DF标志的指令.
那么,编译器在程序启动后,假定程序运行时,假定程序运行时保持预定义状态,并且在程序运行时保持不变?
这是由您使用的平台的 ABI 指定的。该系统V英特尔386 ABI(章寄存器和堆栈帧)说:
在进入函数之前和退出函数时,方向标志必须设置为“正向”(即零)方向。
相同的要求保留在AMD64 ABI(Dropbox 链接,因为 x86-64.org 已关闭)(第3.2.1节寄存器和堆栈帧):
该方向标志
DF在%rFLAGS寄存器中必须明确的函数进入和返回(设置为“向前”的方向)。
所以,是的,用户空间代码可以安全地假设它DF设置为零。
| 归档时间: |
|
| 查看次数: |
478 次 |
| 最近记录: |