我正在重写 ASM 中的一些 C 函数以进行练习。我的memset
函数设置RAX
为寄存器中传递的相同地址RDI
。但是 gcc 正在使用指令扩展AL
' 值。CDQE
char super[] = "suuuuuuuuuuper";
res = memset(super, 't', 4);
printf("memset = {%s} (%p) res = %p\n", super, super, res);
输出 :
memset = {ttttuuuuuuuper} (0x7fffffd30250) res = 0xffffffffffd30250
如果我尝试访问存储在res
. 我可以只编辑二进制文件并CQDE
用两条NOP
指令替换调用,它将完美运行。
但我想知道是否还有其他东西,例如避免调用的 GCC 标志?