-3
我阅读有关Windows挂钩和Win32可执行程序的内部结构(https://en.wikipedia.org/wiki/Hooking#Windows),看到这个代码块:IMAGE_DOS_HEADER挂钩
PIMAGE_DOS_HEADER pImgDosHeaders = (PIMAGE_DOS_HEADER)module;
PIMAGE_NT_HEADERS pImgNTHeaders = (PIMAGE_NT_HEADERS)((LPBYTE)pImgDosHeaders + pImgDosHeaders->e_lfanew);
PIMAGE_IMPORT_DESCRIPTOR pImgImportDesc = (PIMAGE_IMPORT_DESCRIPTOR)((LPBYTE)pImgDosHeaders + pImgNTHeaders->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_IMPORT].VirtualAddress);
for (IMAGE_IMPORT_DESCRIPTOR *iid = pImgImportDesc; iid->Name != NULL; iid++)
我的C是有点生疏,我可能需要刷(指针总是让我困惑),但我认为这种方式的工作原理是创建一个名为iid
的IMAGE_IMPORT_DESCRIPTOR
指针。 iid
指向IMAGE_IMPORT_DESCRIPTOR
,并设置为等于名为pImgImportDesc
的对象。所以它看着pImgImportDesc
的Name
属性,如果它没有设置它会去下一个?所以基本上,它正在寻找最后一个?
还有任何关于书籍或视频的建议,以查看更多关于这种真正低级别事情的信息吗?读代码让我感到困惑。
它会去下一个,如果它是** **集。所以它遍布所有这些。 – rkapl
代码解析PE头。没有任何地方挂钩,也没有任何伸展的低水平。询问基本的C语法不是Stack Overflow的意思。 – IInspectable
感谢您的输入,但这不是低级别?我的意思是不处理PE头很低的水平,除非你将它与程序集进行比较(我真的在问,我对此并不熟悉)。对不起,我在任何类型的编程背景下的大部分背景都是高级的java/web开发,我只是想要解决这样的问题。我在这里看到很多问题处理某些事情的基本解释/语法。 – JimmySmithJR