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

C++ 如何从汇编寄存器中获取字符串并将其存储在C++;?,c++,assembly,inline-assembly,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); } el

我知道寄存器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中。
我该怎么办?

仅几行代码就出现了大量令人惊讶的问题:

  • 你说它是一个unicode字符串,但你却告诉编译器它不是。Unicode字符的类型为
    wchar\u t
    ,而不是
    char
  • ECX通常持有此。我真诚地怀疑你关于登记册内容的信息
  • <>这不是你在C++中比较字符串的方式。您可以使用strcmp和co。尤其需要
    wcscmp
    。另外,这不是将
    YODA
    作为unicode字符串编写的方式,您需要
    L“YODA”
试试这个:

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


charc[5]={}也许?当然,std::string(c)=“YODA”
。您的代码将指向
“YODA”
的指针与c进行比较,c是一个不同的指针,可能永远不会相同。
ecx
是否包含0x594F441(或其某些排列)或指向字符串的指针?是的,harold包含,它指向内存中具有字符串的一个点。然后您需要使用
strcmp
std::string(c)==“YODA”)[或者可能是
std::wstring
wstrcmp
)我更新了代码,但仍然不工作。我更新了代码,仍然没有按预期运行。这对我来说毫无意义。特别是因为我已经说过,这很可能不是您在ECX上拥有的。我在上面提到过,ECX指向内存中存储unicode值的位置YODA…您可以在调用
\u asm
指令的位置显示内存转储以及寄存器。您可以在赋值后显示
c
的内容,以及相关位置的内存转储。“代码不工作”和“我已经说过ECX指向字符串”充其量是无用的噪音,最糟糕的是孩子气的发脾气。
 if (lstrcmp(c, L"this" == 0)
          //your code here