首页
社区
课程
招聘
[旧帖] [求助]call指令压入栈的七个字节的东东分别是什么? 0.00雪花
发表于: 2011-8-27 14:44 1732

[旧帖] [求助]call指令压入栈的七个字节的东东分别是什么? 0.00雪花

2011-8-27 14:44
1732
各占多少个字节??? 我以为是这样的: 一个字节的不知道是什么,两个字节的cs,四个字节的ip
共七个字节。请问请问?????

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

收藏
免费 0
支持
分享
最新回复 (12)
雪    币: 38
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
以及压入的先后顺序???我在书里找不到这七个字节啊??是七个吧,于渊的书里就只有cs和ip就没了,这两个加起来不是6个字节吗?
2011-8-27 15:06
0
雪    币: 39
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
堆栈中,都是以4字节为大小的。你仔细观察下。
当调用函数的时候,首先将函数的参数压栈,最后将函数的返回值压栈。

7个字节是怎么来的哦?求指教
2011-8-27 15:57
0
雪    币: 22
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
为什么下载要钱@@@@@
2011-8-27 15:57
0
雪    币: 38
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
我写了个程序,反汇编,看到有个模块是这样的,它取最后一个压入栈的参数是:
mov eax,[ebp+8]
所以ebp之上的7个字节不就是call指令压入的东西喽。
加之cs是十六位,ip是32位,所以加起来不就是6个字节喽
所以我就不知道压入栈的是什么鬼东西了啊?
我在分析一个模块的时候,它就是用了里面这些鬼东西其中的一个不知道干什么了,所以问起来了。。。
望解答啊。。。。
假如是四个四个字节对齐的话,那么为什么取最后一个参数是mov eax,[ebp+8] ???
2011-8-27 16:50
0
雪    币: 38
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
有不对的望指正啊,多谢
2011-8-27 17:01
0
雪    币: 38
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
我一时忘了ebp也要四个字节保存的,所以压入栈的是四个字节的ip。。。。。。。
2011-8-27 17:34
0
雪    币: 34
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
如何学习!!
2011-8-27 19:36
0
雪    币: 39
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
我原来那个也有笔误,应该是先压参数(如果有),然后压函数的返回地址。ebp+8,这个8是个偏移量。。。
堆栈是向下增长的,当push的时候,就减小,pop的时候就增大。举个例子,比如有个函数int WINAPI foo(int a, int b),那么在调用这个函数的时候,堆栈的情况就是这样的:

0x00400010    ->函数的返回地址
0x0040000c    ->参数a
0x00400008   ->参数b

我也是新手,如有错误,还请指教
2011-8-28 16:45
0
雪    币: 13
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
1:字节计数是从0开始,所以根据MOV EAX [EBP+8]得到前面应该还有8个字节,不是7个.
2:由于CALL指令压入返回地址,堆栈指针减4 .进入被CALL程序后,先结构堆栈,POP EBP ; MOV EBP,ESP;堆栈指针再减4(假设没有局部变量,如果有的话,那就还要SUB ESP,n了,n是4的倍数).你说现在要取得最后一个参数是不是因该MOV EAX [EBP+8]呀?(如果有局部变量则MOV EAX [EBP+n+8])
现在知道前面8个字节是什么东西了吧?如果汗不知道得话我告诉你:[EBP+4]里的数是上一个栈结构的首地址,[EBP]里的是返回地址.不知道搂主所说的CS,ip是什么.能否说详细点?
2011-8-28 20:58
0
雪    币: 494
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
call  是一个指数把,只一个CALL,长度是不固定的,应该根据跳转距离和寻址方式判定。
在那本书是指数为了解释这个指令是怎样执行的,才分解成多指令的。
不知道对不对。
2011-8-28 21:23
0
雪    币: 39
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
[QUOTE=atgameover;995270]1:字节计数是从0开始,所以根据MOV EAX [EBP+8]得到前面应该还有8个字节,不是7个.
2:由于CALL指令压入返回地址,堆栈指针减4 .进入被CALL程序后,先结构堆栈,POP EBP ; MOV EBP,ESP;堆栈指针再减4(假设没有局部变量,如果有的话,那就还要SUB ESP,...[/QUOTE]

估计他是看的16位的汇编,CS是代码段,ip是当前指令指针
2011-8-30 10:54
0
雪    币: 154
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
看眼三楼的图,很直观
http://bbs.pediy.com/showthread.php?t=31840
2011-8-30 11:33
0
游客
登录 | 注册 方可回帖
返回
//