0
我正在重寫ASM中的一些C函數來練習。 我的memset
函數將RAX
設置爲與RDI
寄存器中傳遞的地址相同。 但gcc用CDQE
指令擴展了AL
的值。函數調用後gcc打破rax值
char super[] = "suuuuuuuuuuper";
res = memset(super, 't', 4);
printf("memset = {%s} (%p) res = %p\n", super, super, res);
輸出:
memset = {ttttuuuuuuuper} (0x7fffffd30250) res = 0xffffffffffd30250
,如果我嘗試訪問存儲在res
的地址,然後會出現分段錯誤。 我可以編輯二進制文件,並用兩條NOP
指令替換CQDE
調用,它將完美運行。
但我想知道是否還有其他的東西,比如GCC標誌來避免這種調用?
非常感謝,我正準備嘗試! –