首页
社区
课程
招聘
[求助]请问哪位知道以下汇编语言的含义
发表于: 2008-9-9 18:48 4723

[求助]请问哪位知道以下汇编语言的含义

2008-9-9 18:48
4723
;获得KERNEL32地址及所需的API函数地址
mov   eax,[esp+10h] ;//取Kernel32返回地址
and   ax,0f000h
mov   esi,eax   ;//得到Kernel.PELoader代码位置(不精确)
LoopFindKernel32:
sub   esi,1000h
cmp   word ptr[esi],'ZM' ;//搜索EXE文件头
jnz   short LoopFindKernel32
GetPeHeader:
movzx edi,word ptr[esi+3ch]
add   edi,esi
cmp   word ptr[edi],'EP' ;//确认是否PE文件头

我主要不明白以下几点:esp+10h是什么意思?为什么要加10H?and   ax,0f000h的目的何在?请各位大侠予以指点

[课程]Linux pwn 探索篇!

收藏
免费 0
支持
分享
最新回复 (3)
雪    币: 182
活跃值: (55)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
2
从你提供的资料分析,[esp+10h]是所在函数外部传进的参数可能性较大但也不能排除是否局部变量另还不排除是否是返回堆栈值,至于第几个参数,要看前面的代码了。
and   ax,0f000h目的在于把16进制数比如0x12345678最后3位清0.则为0x12345000
2008-9-9 19:32
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
Immunity SEGMENT PARA USE32 'Immunity'
assume cs:Immunity,ds:Immunity
vstart:
push ebp
push esp
call nstart
nstart:
;;;;;;;;;;;;;
pop ebp
sub ebp,offset nstart
;病毒中常用的一种方法。得到一个偏移差。
;程序后面用到的所有变量都需要加上个这偏移差
;------------------------------------(上面的)--
assume fs:nothing    ;设置SEH,发生异常可以直接返回原入口.
lea ebx, SEH[ebp]
push ebx
push fs:[0]
mov fs:[0],esp
mov OldEsp[ebp],esp

;=========================
; * 更改程序入口地址 *
cmp old_base[ebp],0
jnz gonext
mov old_base[ebp],400000h
gonext:
cmp old_in[ebp],0
jnz change
mov old_in[ebp],1000h
change:
mov eax,old_base[ebp]
mov des_base[ebp],eax
mov eax, old_in[ebp]
mov des_in[ebp],eax
;变量定义的的意思见后方
;程序开始执行时,当前程序的原入口地址会放到old_base+old_in中
;由于程序中old_base_in有别的用途,因此将此地址存放到
;des_base_in,以便最后跳回原程序入口。
;------------------------------------上面的部分是前面的代码
;获得KERNEL32地址及所需的API函数地址
mov   eax,[esp+10h] ;//取Kernel32返回地址
and   ax,0f000h
2008-9-9 20:14
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
还请高人多多指点迷津
2008-9-9 20:14
0
游客
登录 | 注册 方可回帖
返回
//