c - 如何在内联汇编中声明一个字符缓冲区?
问题描述
到目前为止,我有以下代码:
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 数组,那会是什么样子?
解决方案
也可以这样:
call do_print
db "Hola...Hello", 0Ah,0
do_print:
call DWORD ptr printf
pop rcx
在调用 do_print 时,我们将实际上是缓冲区“Hello..”的起始地址放入堆栈返回地址,在汇编程序中如此简单,改为 pop rcx 而不是 pop [esp]