如何在内联汇编中声明一个字符缓冲区?

How to declare a char buffer in inline assembly?

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

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  
}

我想在不使用 DB 的情况下在 asm 中声明一个 char 数组,那看起来怎么样?

我是这样做的:

  push 0x6F
  push 0x6c6c6548
  push esp
  call DWORD ptr printf
  add esp, 12 

也可以这样:

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

在调用 do_print 时,我们将 return 地址实际上是缓冲区的起始地址 "Hello..",在汇编程序中如此简单,改为 pop rcx弹出 [esp]