gpt4 book ai didi

c - 指向结构 C 指针的指针

转载 作者:太空宇宙 更新时间:2023-11-04 04:50:48 25 4
gpt4 key购买 nike

大家好,我可能很难解释这一点,但我会尽力而为。

我正在创建一个将被注入(inject)到程序中的 DLL。为了从 DLL 内部访问我想要的数据,我将数据映射到一个“基地址”,其中是指向另一个地址的指针。从那里我必须将该地址递增 0x34 才能访问我的数据。我想我可以使用结构来发挥我的优势,但它似乎没有用。问题是我似乎无法弄清楚如何增加第二个地址以获得指向我的数据的最终指针。

我有的是这个

typedef unsigned char BYTE;

typedef struct
{
DWORD Some_Int;
//big struct of DWORDS simulating what is in the applicaiton.
//shortened for posting
}DATA;

typedef struct
{
BYTE Unknown[0x34];
DATA *p_data;
}VARBASE;


DWORD WINAPI function()
{
VARBASE *Stats = (VARBASE*)0x00BBC9CC;
char lol[1000];

sprintf(lol, "stats pointer: %p | DATA pointer: %p", Stats, Stats->p_data);
SomeFunction(lol); //wrapper for MessageBoxA()

return NULL;
}

Stats 指向正确的地址,但我无法读取 0x34 字节的数据(或增加指针 0x34)以获得指向我的数据集的第二个指针。当我使用这个当前代码时,p_data 被设置为 0000155A 或类似的东西,当它应该在 0A0*** 范围内时,这会在读取时导致段错误。我知道我的数学是正确的,因为我已经在像 CheatEngine 这样的内存映射器中打开了应用程序,我可以专门添加基指针 -> 地址 + 0x34 -> 来自 CheatEngine 内部的我的数据。

有没有比使用基本结构指向我的数据更简单的方法来解决这个问题?基本上它的 pointer->pointer+0x34->data 而我面临的问题是我无法增加第二个指针并设置它以便我可以访问我的数据。

最佳答案

您是否知道结构的两个成员之间可能存在填充?这是“我如何以错误的方式做某事?”的一个示例。也许您最好告诉我们您的程序要解决什么问题

如果您确定 0x00BBC9CC + 34 适当对齐以指向 DWORD *,那么为什么不直接跳到该点:DWORD * *some_int = 0x00BBC9CC + 34;..?顺便说一句,你从哪里得到这个地址?不幸的是,Win32 C 程序员很少实际编写 C 程序。

关于c - 指向结构 C 指针的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15696692/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com