Loading... ## 如何如何使用.asm文件 ``` ; 把 .asm 文件添加到工程一次 ; 右键单击文件-属性-常规- ; 项类型:自定义生成工具 ; 从生成中排除:否 ; 然后复制下面命令填入 ; 命令行: ml /Fo $(IntDir)%(fileName).obj /c /Cp %(fileName).asm ; 输出: $(IntDir)%(fileName).obj;%(Outputs) ; 链接对象: 是 ``` ``` .386 .model flat, c public GetPc32 ;.data .code ;此为代码区 GetPc32 PROC ;GetPc 获取的地址必须使用硬编码 这里只把 EAX 减去硬编码大小 mov eax,[esp] and eax,0FFFFF000h ret GetPc32 endp GetImageBase32 PROC assume fs:nothing mov eax, fs:[30h] mov eax,[eax+08h] ret GetImageBase32 endp GetLdrModuleBase32 PROC ;LDR链表 assume fs:nothing push esi mov esi, dword ptr fs : [30h] ; esi = PEB的地址 mov esi, [esi + 0Ch] ; esi = 指向PEB_LDR_DATA结构的指针 pop esi ret GetLdrModuleBase32 endp ;获取Kernel32Base GetKernel32Base32 PROC push esi assume fs:nothing mov esi, dword ptr fs : [30h] ; esi = PEB的地址 mov esi, [esi + 0Ch] ; esi = 指向PEB_LDR_DATA结构的指针 mov esi, [esi + 1Ch] ; esi = 模块链表指针InInit...List mov esi, [esi] ; esi = 访问链表中的第二个条目 mov esi, [esi + 08h] ; esi = 获取Kernel32.dll基址(注1) mov eax, esi pop esi ret GetKernel32Base32 endp ;内存拷贝 Memcpy32 PROC push ebp mov ebp,esp sub esp,50h mov ecx, [ebp+10h] ; 第三个参数大小 mov esi, [ebp+0ch] ; 第二个参数 源地址 mov edi, [ebp+8h] ; 第一个参数 目标地址 rep movsb; add esp,50h mov esp,ebp pop ebp ret ; Memcpy32 endp ;设置内存位0 SetMemZero32 PROC push ebp mov ebp,esp sub esp,50h mov edi,[ebp+8h] xor eax,eax mov ecx,[ebp+0ch] cld rep stosb add esp,50h mov esp,ebp pop ebp ret; SetMemZero32 endp end ``` 最后修改:2022 年 04 月 22 日 © 允许规范转载 赞 0 如果觉得我的文章对你有用,请随意赞赏