我实现了strchr()
global strchr
strchr:
cmp byte[rdi], 0
je end
cmp [rdi], sil
je end
add rdi, 1
jmp strchr
end: mov rax, rdi
ret
当我将其预加载为.so时,
export LD_PRELOAD=abs/path/to/lib.so
Ubuntu 16.04崩溃。有时它会完全崩溃,有时会显示SIGILL(损坏的数据?)。
当我使用opensuse 4预加载它时,它可以工作。
知道为什么吗?
最佳答案
感谢Michael Petch:
该strchr()不符合手册,因为当找不到字符时它不会返回NULL。
固定的strchr():
global strchr
strchr:
cmp [rdi], sil;first check for character (useful if user searches '\0')
je end
cmp byte[rdi], 0;then if it is EoS and the character is not in the string, return NULL
je eos
add rdi, 1
jmp strchr
eos: mov rax, 0
ret
end: mov rax, rdi
ret
关于linux - 预加载自定义strchr()-Ubuntu崩溃,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42811805/