C++通过其指针和偏移量从类中读取

标签 c++ pointers reverse-engineering offset disassembly

Ida pro 以伪代码生成这一行,我有工作类指针和反向工程类,但我不想直接从类文件中读取某些内容。

IDA Pro 中的示例:

*(_DWORD *)(v3 + 9649) = 1;

// Alignment: 1
class CVehicle
{
    DWORD modelid; // 0
    float pos[3]; // 4
    WORD player; // 16
}

CVehicle *pVehicle;

我知道,如果我想获得播放器,那么我需要这样做:

pVehicle->player

但是如果我想通过偏移获取播放器怎么办?因为有时我需要按偏移量读取,因为我没有对整个类进行逆向工程。示例

*(WORD*)(pVehicle + 16) // That should work, should return player, but will crash. Why?

最佳答案

假设我理解您在帖子中所说的内容,我会这样做:

标题:

#pragma pack(push, 1)
class CPlayer
{
public:
    unsigned char Unknown00[9649];
    char Unknown9649;
};

class CVehicle
{
public:
    DWORD modelid; // 0
    float pos[3]; // 4
    CPlayer *pPlayer; // 16
};
#pragma pack(pop)

代码:

char SomethingIWant;
CVehicle *pVehicle; // set previously
CPlayer *pPlayer = nullptr;

if (pVehicle)
   pPlayer = pVehicle->pPlayer;
if (pPlayer)
   SomethingIWant = pPlayer->Unknown9649;

然后,您可以随时填写类(class)并发现更多信息。

(免责声明:上面的代码假定 pVehicle->pPlayer 为 nullptr 或有效。否则,将需要更多代码来正确验证 pPlayer 是否有效。)

关于C++通过其指针和偏移量从类中读取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26976784/

相关文章:

dll - 如何调用 DLL 的非导出函数?

c++ - Eigen 运算符在内部如何解释为 MKL 函数?

c++ - 比较给定字符串上的元素

c++ - 正则表达式选择扩展

可以直接将值赋给指针吗?

windows - x86 逆向挑战中的打包和加密部分,没有触发熵启发式

android - 在不使用 qmake 的情况下在 Android 的 Qt 应用程序上使用自定义 AndroidManifest?

c - 使用指向 FILE 类型的 const 指针是个好主意吗?

c - 函数转换和 C 中函数参数列表的内部表示

c++ - exe导入dll序号与DLL导出函数名比较?