我正在尝试向本地主机发出请求。我想知道我的消息的长度,但无法弄清楚我做错了什么。 输出如下:
helloS helloS helloS helloS helloS helloS helloS helloS helloS helloS helloS helloS helloS helloS helloS helloS./run.sh: line 1: 10066 Segmentation fault: 11
代码在这里。 但更换时
adr x0, _msg
bl _strlen
到
mov x0, #5
一切正常。
问题是您的
_send
实现不会保留 x30
。
当您硬编码
mov x0, #5
时,该函数中没有任何内容会破坏 x30
。但是当你调用 _strlen
时,就会将 x30
设置为 str x0, [sp, #4]
的地址,这意味着调用 _send
之后的 _strlen
部分将一遍又一遍地运行,每次都会增加 sp
16 个字节,直到到达堆栈顶部并命中未映射的内存。
修复方法是在调用
x30
之前将 _strlen
溢出到堆栈,然后从那里重新加载它。