如何在内联汇编中声明一个字符缓冲区?
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]
到目前为止我有以下代码:
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]