如何从汇编寄存器中获取字符串并将其存储在C ++中的变量中?

时间:2015-02-14 18:42:06

标签: c++ assembly inline-assembly

我知道ECX寄存器中有一个UNICODE字符串,它是" YODA"。

我想从ECX寄存器中获取完整的字符串并将其存储在C ++变量中。然后我想将变量与字符串" YODA"进行比较。只是为了确认这是我的期望。

我有以下代码:

wchar_t* c;
__asm mov c, ecx

    if (wcscmp(c, L"YODA") == 0)
    {
        MessageBox(0, L"Found", L"Found", MB_ICONEXCLAMATION);
    }
    else
    {
        MessageBox(0, c, L"Not Found", MB_ICONEXCLAMATION);
    }

然而,它似乎没有正确地将字符串插入c中。 我该怎么办?

2 个答案:

答案 0 :(得分:2)

只需几行代码就会出现大量问题:

  • 你说它是一个unicode字符串,但是你告诉编译器它不是。 Unicode字符的类型为wchar_t,而不是char
  • ECX通常持有this。我真诚地怀疑您关于登记册内容的信息。
  • 这不是你如何比较C ++中的字符串。您使用strcmp和co。特别需要wcscmp。另外,您不希望将YODA写为unicode字符串,而是L"YODA"

答案 1 :(得分:-1)

试试这个:

WCHAR c[256];
__asm 
{
 [ecx], ecx
mov [c], ecx

}

 if (lstrcmp(c, L"this" == 0)
          //your code here