关于问题答案的快速问题:ESI和EDI寄存器的用途?
srcp [srcidx++] = argv [j]; C code translates too
8B550C mov edx,[ebp+0C]
8B0C9A mov ecx,[edx+4*ebx]
894CBDAC mov [ebp+4*edi-54],ecx
47 inc edi
Run Code Online (Sandbox Code Playgroud)
我参加了一个集会课,并且知道了基础知识,而不是寻找什么mov方法,但是我很困惑,因为它是什么+0C,所以+4*ebx和ebp+4*edi-54陈述是为了什么.他在帖子中解释了这一点,但我仍然不理解.
该ebp+12有argv,但为什么它由12会增加吗?
的ebx是j,偏偏是,乘以4,然后加到ebp?
他说"第三条指令使用edi乘以4并加上ebp偏移量0x54(位置srcp)"; 为什么它必须乘以4?他还说添加了偏移 ; 为什么-54不在+54代码中呢?
只是有点困惑.
我正在阅读Windows Hooking和Win32可执行文件的内部(https://en.wikipedia.org/wiki/Hooking#Windows),并看到了这段代码:
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++)
Run Code Online (Sandbox Code Playgroud)
我的C有点生疏,我可能需要刷新(指针总是让我困惑),但我认为这样做的方法是创建一个IMAGE_IMPORT_DESCRIPTOR名为的指针iid.iid指向an IMAGE_IMPORT_DESCRIPTOR,并设置为等于名为的对象pImgImportDesc.所以,在看pImgImportDesc的Name财产,如果没有设置它会去下一个?所以基本上,它正在寻找最后一个?
还有任何书籍或视频的建议,以了解更多关于这样的真正低级别的事情?阅读代码让我感到困惑.