C++ 如何从汇编寄存器中获取字符串并将其存储在C++;?
我知道寄存器ECX包含一个UNICODE字符串,即“YODA” <>我想从ECX寄存器中获取完整的字符串并将其存储在C++变量中登记。然后我想将变量与字符串“YODA”进行比较,以确认它是我所期望的 我有以下代码: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
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