You need to enable JavaScript to run this app. NASM汇编如何复用现有writeStr函数实现单字符打印函数writeChar
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.21 01:06:02