NASM汇编如何复用现有writeStr函数实现单字符打印函数writeChar
NASM汇编实现复用writeStr的writeChar函数
实现思路
已有的writeStr函数接收字符串地址、字符串长度两个参数,单字符打印的核心是构造一个仅包含目标字符的临时内存缓冲区,将缓冲区地址和长度1作为参数传入writeStr即可复用已有逻辑。
从你给出的writeStr代码可以匹配到参数规则:32位Linux下write系统调用中ecx对应字符串地址、edx对应字符串长度,你的writeStr里ecx取[ebp+12]、edx取[ebp+8],说明调用writeStr时遵循CDECL调用约定,参数从右向左压栈,即先压字符串地址、再压字符串长度。
完整实现代码
writeChar: push ebp mov ebp, esp ; 读取传入的单个字符参数 mov eax, [ebp+8] ; 将字符压入栈作为临时单字符缓冲区,此时esp就是缓冲区的首地址 push eax ; 按writeStr的参数要求压参:先压缓冲区地址,再压长度1 push esp push 1 call writeStr ; 清理栈上的临时数据和调用writeStr的参数,共3个4字节数据,总计12字节 add esp, 12 leave ret
调用示例
如果要打印字符'A',按如下方式调用即可:
push 'A' call writeChar add esp, 4 ; 平衡调用writeChar的参数栈
内容的提问来源于stack exchange,提问作者Giangtiny
相关产品推荐
相关产品推荐

