结构如下
typedef struct _PROCESS_INFORMATION {
HANDLE hProcess;
HANDLE hThread;
DWORD dwProcessId;
DWORD dwThreadId;
} PROCESS_INFORMATION, *LPPROCESS_INFORMATION;
struct PLAYER
{
/* 0x0/0 */ struct PROCESS_INFORMATION *ProcessInformation;
/* 0x4/4 */ unsigned long dword4;
/* 0x8/8 */ unsigned long dword8;
/* 0xC/12 */ unsigned long dwordC;
//... Lots of fields here
}
这是TerminateProcess
的原型(prototype)
BOOL WINAPI TerminateProcess(
_In_ HANDLE hProcess,
_In_ UINT uExitCode
);
我尝试了下面所有 3 个方法,但都失败了。
unsigned int v102; //exit code.
struct PLAYER *player; // eax@9
TerminateProcess(player->ProcessInformation->hProcess, v102);
TerminateProcess(player->ProcessInformation.hProcess, v102);
TerminateProcess(*(player->ProcessInformation)->hProcess, v102);
箭头->
适用于PLAYER结构指针
的其他成员,但如果struct
PLAYER内的成员是指向另一个成员的指针struct 然后我遇到编译器问题。
以上三个问题都给我带来了编译器问题。
也许我必须在 struct PLAYER
中使用 *LPPROCESS_INFORMATION
或者我必须使用 struct _PROCESS_INFORMATION *
因为我真的很讨厌使用 typedef
的
(是的,我一周前才开始使用 C,我通常使用 Java/C#/VB.NET 编写代码,所以这对我来说是全新的。)
编辑:似乎我发现了我使用愚蠢的 typedef
的问题,难怪我遇到了这么多问题。这些 typedef 消除了类型的使用,在本例中是 struct
所以我的结构非常困惑..
修复是替换
/* 0x0/0 */ struct PROCESS_INFORMATION *ProcessInformation;
与
/* 0x0/0 */ struct _PROCESS_INFORMATION *ProcessInformation;
现在我可以不间断地使用美丽的箭头
player->ProcessInformation->hProcess
这是正确的吗?
最佳答案
player->ProcessInformation->hProcess
是正确的。祝你好运!
关于持有指向另一个结构的指针的 C 结构如何访问该内部结构指针的成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23258699/