由于我的上一个问题因糟糕的代码风格和拼写错误而被关闭,我对其进行了审查并再次寻求帮助。
我正在尝试解析 PE 格式的 .exe 文件。这是我的代码的一部分
#include "PE_resolve.h"
#define SIZEOF_SECTION_HEADER 0x28
/*load filebuffer into Imagebuffer*/
int Read_2_ImageBuffer(void **p_filebuffer, void **p_Imagebuffer,long filesize);
/*helper function*/
inline void * Get_NT_POS(void **p_filebuffer);
inline void * Get_FileHeader_POS(void **p_filebuffer);
inline void * Get_Opt_FileHeader_POS(void **p_filebuffer);
int main(){
return 0;
}
int Read_2_ImageBuffer(void **p_filebuffer, void **p_Imagebuffer,long filesize){
/*allocate memory for imagebuffer*/
void *Opt_PE_Header = Get_Opt_FileHeader_POS(p_filebuffer); //THE ERROR LINE
DWORD SizeOfImage = *(DWORD*) ((BYTE *)Opt_PE_Header + 0x38);
*p_Imagebuffer = malloc(SizeOfImage);
if(*p_Imagebuffer == NULL){
printf("can't allocate enough heap memory\n");
exit(EXIT_FAILURE); …Run Code Online (Sandbox Code Playgroud) 我定义了一个类来包装原始指针,因此该指针可以自动删除。这是我的代码
#include <iostream>
class Entity
{
private:
std::string e_name;
public:
Entity():e_name("unknown"){}
void whoami() {
std::cout << e_name;
}
};
class ScopePointer
{
private:
Entity *_e;
public:
ScopePointer(Entity *e) : _e(e) {}
~ScopePointer() { delete _e; }
Entity *operator->() { return _e; }
};
int main(int argc, char *argv[])
{
ScopePointer p(new Entity());
p->whoami();
}
Run Code Online (Sandbox Code Playgroud)
它运作良好,但我完全不明白如何p->whoami();运作。我的意思是 ScopePointer 中的运算符 -> 重载应该像下面这样工作
p.operator->()->whoami();or p->->whoami();
Run Code Online (Sandbox Code Playgroud)
第一个->应该返回 Entity* ,下一个应该->返回类方法。为什么只有一个 -> 可以使其工作?