首页
社区
课程
招聘
[原创]这句话对吗。[EBP+x] 就是Push压入的参数, 而[EBP-x]就是局部变量
发表于: 2020-3-31 11:38 3024

[原创]这句话对吗。[EBP+x] 就是Push压入的参数, 而[EBP-x]就是局部变量

2020-3-31 11:38
3024
反汇编种的局部变量 和 参数 ,[EBP+x] 就是Push压入的参数, 而[EBP-x]就是局部变量
以上这句话对吗?

PVOID pAAA
PVOID pBBB 
__asm
{
pushad
pushfd
push   dword ptr  pAAA  
push    dword ptr pBBB
call      0xXXXXXXX
popfd
popad
}

XXXXXXX 函数CALL 内部 发现  如下
mov edi,dword ptr ss:[ebp+0xC]    // [ebp+0xC]   就是  pAAA  
mov esi,dword ptr ss:[ebp+0x8]     //  [ebp+0x8]  就是  pBBB    


[培训]科锐逆向工程师培训第53期2025年7月8日开班!

最后于 2020-3-31 11:41 被TX杀手编辑 ,原因:
收藏
免费 0
支持
分享
最新回复 (7)
雪    币: 7108
活跃值: (6671)
能力值: ( LV5,RANK:65 )
在线值:
发帖
回帖
粉丝
2
32位下,常规操做下,是可以这样理解,但是这个并不是绝对的
2020-3-31 12:05
0
雪    币: 15735
活跃值: (19038)
能力值: ( LV12,RANK:300 )
在线值:
发帖
回帖
粉丝
3
请摒弃局部变量这种说法,在汇编中所有的“变量”不过是栈中的一个数值而已(也有一些情况下是在堆中),只不过这次压入的是从EBP(栈底指针)向上数第x个位置的数值或是这个值指向的另外一个值
2020-3-31 12:47
0
雪    币: 3
活跃值: (1056)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
gamehack 32位下,常规操做下,是可以这样理解,但是这个并不是绝对的
谢谢
2020-3-31 13:40
0
雪    币: 3
活跃值: (1056)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
pureGavin 请摒弃局部变量这种说法,在汇编中所有的“变量”不过是栈中的一个数值而已(也有一些情况下是在堆中),只不过这次压入的是从EBP(栈底指针)向上数第x个位置的数值或是这个值指向的另外一个值
无论是  [ebp+0xC]   还是  [ebp-0xC]   不要刻意去 区分  是 外部传入的参数 还是内部临时申请的局部变量, 都把它看成是一个内存地址 对吗

但是我区分是为了更好的 读懂反汇编。。都简单的理解为内存地址,理解起来会比较晦涩啊
最后于 2020-3-31 14:00 被TX杀手编辑 ,原因:
2020-3-31 13:41
0
雪    币: 1931
活跃值: (472)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
常规是这么理解,不过还有根据esp寻址的,所以说不准
2020-3-31 15:45
0
雪    币: 3742
活跃值: (1193)
能力值: ( LV5,RANK:65 )
在线值:
发帖
回帖
粉丝
7
一般程序内的变量,局部变量在寄存器或栈,全局变量在.data段或.bss段,
然后栈中参数传递的时候会涉及到栈帧的概念,了解下会比较好理解这个吧,
对于函数调用的传参,一般32位是压栈,64位寄存器多会使用六个寄存器,再多余的才会使用栈,
32位,函数调用先压栈传参,然后call的时候会把返回地址压栈,进入函数运行,函数开头那几个`push  ebp; mov ebp,esp;`就保存原ebp,ebp指向被调用这个函数的栈帧栈底,后面`sub esp,xxx`就吧栈顶拉高,形成了一个栈帧空间了,其内的位置就是储存一些这个函数内的局部变量了,这样找个图看看或者调下标一标就发现,ebp后面的都是原来压入栈的参数,为加号,局部变量就是栈帧内部了,是减号,(这个地方要注意栈是逆向生长的哦),大致意思是如此,
ida中就使用负数标记,一般使用`var_`前缀就是变量,`arg_`前缀就是参数,然后使用[ebp+var_xx]/[ebp+arg_xx]这样,还有记录esp偏移,用[esp+xx+var_xx]/[esp+xx+arg_xx]的情况,其实是一个道理,这里esp+xx和ebp应该是一致指向栈底。可以看看ida里一般一个函数前面会标注,var_xx 是负数多少,arg_xx是正数多少,
可以看看加密解密四 - 第四章,关于汇编这些,然后再去看汇编就舒服很多了,
2020-3-31 16:51
0
雪    币: 3
活跃值: (1056)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
令则 一般程序内的变量,局部变量在寄存器或栈,全局变量在.data段或.bss段, 然后栈中参数传递的时候会涉及到栈帧的概念,了解下会比较好理解这个吧, 对于函数调用的传参,一般32位是压栈,64位寄存 ...
谢谢
2020-3-31 17:05
0
游客
登录 | 注册 方可回帖
返回