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

How do I get a string from assembly register and store in a variable in C++?

本文关键字:存储 变量 C++ 串并 字符串 汇编 寄存器 字符 获取      更新时间:2023-10-16

我知道寄存器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_t,而不是char
  • ECX通常持有CCD_ 3。我真诚地怀疑你关于登记册内容的信息
  • 这不是在C++中比较字符串的方式。您使用strcmp和co。特别是您需要wcscmp。此外,这不是将YODA作为unicode字符串编写的方式,您需要L"YODA"

试试这个:

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

}

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