使用C ++和Assembly x64传递字符串参数

时间:2014-06-29 22:30:04

标签: c++ assembly 64-bit

我有这个代码

#include <iostream>
#include <conio.h>

using namespace std;
extern "C" char * DDD(char * h, int j);

int main()
{
char * g = "RRRR";
cout << "HELLO Says " << DDD(g, strlen(g)) << endl;
_getch();
return 0;
}

和这个

.data
gh db 'Y'
.code
DDD proc
lea rbx, [rcx]
push rbx
a20:
mov al, gh
mov byte ptr [rbx], al
inc rbx
dec rdx
cmp rdx, 0
jnz a20
pop rbx
mov rax, rbx
ret
DDD endp
end

我正在做的是将RRRR替换为YYYY。

我得错了
mov byte ptr [rbx], al

它表示访问冲突。

我是装配新手,我只是想知道如何解决它。修改汇编代码也很受欢迎。

感谢。

1 个答案:

答案 0 :(得分:3)

“RRRR”字符串存储在只读存储器中。您应该用char g[] = "RRRR";之类的内容替换它的声明,以便能够写入它。