编程中的可变参数函数、字符串处理及安全问题解析
1. 优化GCC 4.9 ARM64的绝对值函数
以下是优化GCC 4.9 ARM64的绝对值函数代码:
my_abs:
; sign-extend input 32-bit value to X0 64-bit register:
sxtw
x0, w0
eor
x1, x0, x0, asr 63
; X1=X0^(X0>>63) (shift is arithmetical)
sub
x0, x1, x0, asr 63
; X0=X1-(X0>>63)=X0^(X0>>63)-(X0>>63)
; (all shifts are arithmetical)
ret
此代码实现了将32位输入值符号扩展到64位寄存器X0,并计算其绝对值。具体步骤如下:
1. sxtw x0, w0
:将32位输入值符号扩展到64位寄存器X0。
2. eor x1, x0, x0, asr 63
:计算 X1 = X0 ^ (X0 >> 63)
,这里的移位是算术移位。
3. sub x0, x1, x0, asr 63
:计算 X0 = X1 - (X0 >> 63)
,最终得到绝对值。
2. 可变参数函数
像 printf()
和 sc