c++ - IDA Pro - 将 HIBYTE、LOBYTE 和 __OFSUB__ 宏重写为 C++
问题描述
我能够挂钩一个函数,现在我正在尝试重写它的代码,但是我在翻译由 IDA Pro 的伪代码生成的一些宏时遇到了问题
LOBYTE(v8) = v8 & 3;
LOBYTE(v12) = 0;
HIBYTE(v12) = *result;
v21 = __OFSUB__(v24 + 1, 30);
LOBYTE 和 HIBYTE 被 Visual Studio 检测到,但是当我复制粘贴它们时出现此错误
错误(活动)E0137 表达式必须是可修改的左值
我试图将其重写为这样的东西
乐天(v8);v8 = v8 & 3;
然后错误消失了,但它似乎不能正常工作。至于offsub,它根本没有被检测为有效的宏。
你有什么想法我该怎么做吗?
解决方案
LOBYTE
并且HIBYTE
是执行一些位移逻辑的宏,因此您可以从unsigned short
. 因此,例如,如果您有一个unsigned short
with value 0xAB93
,则可以这样获取特定字节:
unsigned char lo = LOBYTE(0xAB93);
unsigned char hi = HIBYTE(0xAB93);
lo
将持有价值0x93
并将hi
持有价值0xAB
您想使用单独的宏来组合这些值。例如:
unsigned short both = MAKEWORD(lo,hi);
推荐阅读
- graphql - 使用 request-promise 将数据发布到 graphql 服务器
- python - 重新采样 Python 熊猫排除某些字段
- excel - vba中的Instr不使用公式单元格
- php - 随着时间的推移,慢慢地用 Vue 替换 Laravel 刀片文件,但它变得混乱
- javascript - setTimeout 发送多个表单 5 分钟
- asterisk - 星号伊莎贝尔汽车公园
- javascript - 父参数可以带子参数吗?
- java - Android X 上的 DelayedConfirmationView
- c++ - 从 Qml 中的 QSqlTableModel 中删除单行时视图不一致
- reactjs - this.setState 在我的箭头函数中不起作用