如何解决获取作为参数传递的字符
我想在 NASM System V ABI x86-64(英特尔语法)中编写一个可以在 C 程序中使用的函数。
这是函数的原型:
char *rindex(const char *s,int c);
因此我按顺序检索参数 (const char *s
= rdi
,int c
= rsi
)
首先,我获取存储在寄存器 rsi
中的字符并将其放入 ah
:
segment .text
global rindex:function
rindex:
mov ah,byte [rsi] ;; get the character
[...]
不幸的是,这一行使我的程序崩溃:
rindex("hello world",'o') // segfault
为什么不可能获得字符,正确的方法是什么?
解决方法
我称“char”为您的第一个参数 (const char *s = rdi
),因为它是指向 char
的指针。您的第二个参数 (int c = rsi
) 是 int
。要访问由 s
指向的字符串的元素,您可以使用 mov ah,byte ptr [rdi]
。但是您的第二个参数不是指针,rsi
包含 c
的值。要读取它,您可以从 esi
读取,因为 int
的值适合 rsi
的低 32 位。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。