C++中byte*能否与int相加?对应Python实现方法是什么?
问题1:C++中是否支持byte*类型与int类型做加法运算?
支持,这是C/C标准定义的指针算术规则。
Ghidra反编译结果中的byte通常映射为C/C的unsigned char类型,占1字节内存。指针和整数相加时,会按照指针指向类型的大小自动计算偏移:实际偏移字节数 = 整数值 * 指向类型的大小,因此pbVar12 + 0x10等价于给pbVar12存储的内存地址直接加16字节,之后将偏移后的地址强转为ulong*类型赋值给puVar24。
问题2:该运算在Python中应该如何实现?
根据使用场景分为两种实现方式:
- 仅计算偏移地址(逆向分析纯数值计算场景):直接对存储地址的整数做加法即可
# pb_var12为byte指针对应的地址整数值,示例为0x7ff000a000 pb_var12 = 0x7ff000a000 pu_var24 = pb_var12 + 0x10
- 模拟C++指针操作读写内存场景:可以借助
ctypes库实现
import ctypes # 构造pbVar12指针对象,示例指向地址0x7ff000a000 pb_var12 = ctypes.cast(0x7ff000a000, ctypes.POINTER(ctypes.c_ubyte)) # 偏移0x10后强转为ulong*类型 pu_var24 = ctypes.cast(ctypes.addressof(pb_var12.contents) + 0x10, ctypes.POINTER(ctypes.c_ulong))
内容的提问来源于stack exchange,提问作者Meendufski
相关产品推荐
相关产品推荐

