小编Jim*_*hJR的帖子

为什么这个C代码产生这个程序集

关于问题答案的快速问题: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代码中呢?

只是有点困惑.

x86 assembly 32-bit

2
推荐指数
1
解决办法
133
查看次数

IMAGE_DOS_HEADER挂钩

我正在阅读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财产,如果没有设置它会去下一个?所以基本上,它正在寻找最后一个?

还有任何书籍或视频的建议,以了解更多关于这样的真正低级别的事情?阅读代码让我感到困惑.

c++ hook winapi

-3
推荐指数
1
解决办法
400
查看次数

标签 统计

32-bit ×1

assembly ×1

c++ ×1

hook ×1

winapi ×1

x86 ×1