首页
社区
课程
招聘
[学习]邪恶的 ENTER 指令
发表于: 2008-7-22 10:37 6318

[学习]邪恶的 ENTER 指令

2008-7-22 10:37
6318
; PSEUDO-CODE OF ENTER INSTRUCTION
;
; ENTER STORAGE, LEVEL
;
; PUSH  EBP
; FRAME_PTR = ESP
; IF ( LEVEL > 0 )
; {
;   DO ( LEVEL - 1 ) TIMES
;   {
;     SUB   EBP, 4
;     PUSH  DWORD PTR [EBP]
;   }
;   PUSH  FRAME_PTR
; }
; EBP = FRAME_PTR
; SUB   ESP, STORAGE
;
; LEVEL == 0            -- Non-nested stack frame
;
; PUSH  EBP
; MOV   EBP, ESP
; SUB   ESP, STORAGE
;
; EBP-STORAGE   ->      Dynamic storage
; [EBP]         =       Previous EBP
; EBP+4         ->      Previous stack
; [EBP+4]       =       Return address
; [EBP+8]       =       Arg0
; [EBP+C]       =       Arg1
; ...
;
; LEVEL == 1..31        -- Nested stack frame
;
; EBP-(LEVEL-1)*4-4-STORAGE
;               ->      Dynamic storage
; [EBP-(LEVEL-1)*4-4]
;               =       FRAME_PTR (EBP)
; ...
; [EBP-8]       =       Previous [EBP-8]
; [EBP-4]       =       Previous [EBP-4]
; [EBP]         =       Previous EBP
; [EBP+4]       =       Return address
; [EBP+8]       =       Arg0
; [EBP+C]       =       Arg1
; ...
;
; A variable can passthrough from lower nesting level to higher nesting level as COPY
;
                        .386
                        .model  flat, stdcall
                        .code
start:                  call    nesting_1                       ; demo for a single variable passthrough
                                                                ; grab more variable is ok if you give a higher level
                        retn
; level 1
nesting_1:              enter   4, 1                            ; allocate a variable X can passthrough the whole call-chain
                        mov     dword ptr [ebp-4], 78787878h    ; markup it
                        call    nesting_2
                        leave
                        retn
; level 2
nesting_2:              enter   0, 2
                        add     dword ptr [ebp-4], 10101010h    ; we got copy of X and increase it to 88888888h
                        call    nesting_3
                        leave
                        retn
; level 3
nesting_3:              enter   4, 3
                        add     dword ptr [ebp-4], 22222222h    ; -> AAAAAAAAh
                        int     3                               ; have a look: `dd [ebp-4]`
                        leave
                        retn
                        end     start


[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 0
支持
分享
最新回复 (12)
雪    币: 208
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
看不懂。。。
2008-7-22 10:55
0
雪    币: 299
活跃值: (25)
能力值: ( LV10,RANK:170 )
在线值:
发帖
回帖
粉丝
3
[QUOTE=;]...[/QUOTE]
enter指令是专门为子程序的在堆栈中开辟局部变量空间设立的指令,优点是占用空间小,缺点是慢,除了病毒外俺很少能看到有正常程序使用这一指令。
2008-7-22 11:13
0
雪    币: 134
活跃值: (84)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
4
确实很少见,一般看见那个程序用enter我就害怕。明显是嵌入汇编了,定然很邪恶。
2008-7-22 11:18
0
雪    币: 6075
活跃值: (2236)
能力值: (RANK:1060 )
在线值:
发帖
回帖
粉丝
5
enter xxx, 0跟push ebp mov ebp, esp sub esp, xxx一样,就是慢5~10倍
nested stackframe没见过有人用
2008-7-22 11:24
0
雪    币: 63
活跃值: (17)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
6
果然邪恶
2008-7-22 11:33
0
雪    币: 207
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
7
果然很邪恶
123456
2008-7-22 22:39
0
雪    币: 249
活跃值: (10)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
8
有什么好邪恶的
2008-7-23 00:44
0
雪    币: 2316
活跃值: (129)
能力值: (RANK:410 )
在线值:
发帖
回帖
粉丝
9
道者看道,魔者看魔。
我非道非魔。
2008-7-23 08:37
0
雪    币: 372
活跃值: (31)
能力值: ( LV12,RANK:410 )
在线值:
发帖
回帖
粉丝
10
进来学习一下。。。
2008-7-23 08:51
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
这个指令有点意思
2008-7-23 10:11
0
雪    币: 2067
活跃值: (82)
能力值: ( LV9,RANK:180 )
在线值:
发帖
回帖
粉丝
12
DOS时代较常见
2008-7-23 10:15
0
雪    币: 25
活跃值: (477)
能力值: (RANK:20 )
在线值:
发帖
回帖
粉丝
13
11111111111
2008-7-23 10:35
0
游客
登录 | 注册 方可回帖
返回
//