c++ - 替代运算符 - 导致内联汇编错误
问题描述
我正在开发一个用 C++ 编写的项目,该项目涉及将源代码注入到已编译(并正在运行)的进程中,因此在某些情况下,我需要编写内联汇编。这个简短的介绍是为了避免任何评论告诉我可能不应该使用内联汇编。
所以,至于我的实际问题,我发现 C++ 有替代运算符,其中一些,特别是and和or让我想起了很多 Python,一种我觉得在语法方面非常令人愉快的编程语言。
我知道使用这些替代运算符当然不是最佳实践,应该避免,但这是一个个人项目,因此其他人的代码可读性不会太困扰我。
我的项目是使用 MSVC 编译器编译的,我的第一个观察是这些替代运算符似乎没有默认定义。经过一番研究,我发现启用它们的一种方法是包含<ciso646>
. 所以任务完成了,我想。
但是在编译时,我发现我的内联汇编代码片段现在导致编译错误,因为它们包含诸如or和and之类的 asm 指令。是的,内联汇编是用小写的。因此,可能的解决方法是将我所有的内联汇编代码片段大写,但由于我不太喜欢 ALL CAPS RAGE STYLE,所以我在这里询问是否有任何其他解决方法来解决这个问题。
这是导致问题的内联汇编的示例
__declspec (naked) Unit* __fastcall D2CLIENT_GetClientUnit(int nGUID, DWORD dwType)
{
/*
push dwType
mov eax, nGUID & 0x7F
mov edx, ((dwType << 9) + D2CLIENT_6FBBA608)
call D2CLIENT_6FB54E20
*/
__asm
{
push edx
mov eax, ecx
shl edx, 0x09
and eax, 0x7F
add edx, [D2CLIENT_6FBBA608]
call D2CLIENT_6FB54E20
retn
}
}
谢谢
解决方案
推荐阅读
- python - 这个语法有歧义吗?生产应用程序对明确语法有影响吗?
- python - Keras多对多分类LSTM错误:无法挤压dim[2],预期维度为1,得到3 [[node categorical_crossentropy/
- git - 'origin/develop' 似乎不是 git 存储库。无法从远程存储库中读取
- pgadmin - pg_dump 服务器版本 12.3;ph_dump 版本 10.13
- regex - 如何在谷歌文档的谷歌脚本中替换字母列表的所有元素
- vba - MS Access/VBA 使用未绑定的列表框内容重命名文件
- javascript - 网站中的搜索栏无法按预期工作
- python - 获取自己插件的 bl_info/version
- rdf - 如何在 protegè 中将外部 rdf 文件导入到我的本体中?
- django - 改变了外键的关系 | Django 模型