首页 > 解决方案 > 如何在内联汇编中声明一个字符缓冲区?

问题描述

到目前为止,我有以下代码:

char* s;
s = new char[10];

__asm
{       
    mov ebx, s
    mov byte ptr[ebx], 0x48       ;'H'
    mov byte ptr[ebx + 1], 0x65   ;'e'
    mov byte ptr[ebx + 2], 0x6C   ;'l'
    mov byte ptr[ebx + 3], 0x6C   ;'l'
    mov byte ptr[ebx + 4], 0x6F   ;'o'
    mov byte ptr[ebx + 5], 0x0A   ; 'new line'
    mov byte ptr[ebx + 6], 0;
    mov eax, ebx
    push eax
    call DWORD ptr printf
    pop ebx  
}

我想在 asm 中声明一个不使用 DB 的 char 数组,那会是什么样子?

标签: carraysassemblyvisual-c++inline-assembly

解决方案


也可以这样:

call do_print
db "Hola...Hello", 0Ah,0
do_print:
call DWORD ptr printf
pop rcx

在调用 do_print 时,我们将实际上是缓冲区“Hello..”的起始地址放入堆栈返回地址,在汇编程序中如此简单,改为 pop rcx 而不是 pop [esp]


推荐阅读