鱼C论坛

 找回密码
 立即注册
查看: 625|回复: 4

[已解决]函数参数指针

[复制链接]
发表于 2023-12-1 14:28:16 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
EAX = 003EF884 EBX = 10101010 ECX = 00202020 EDX = 01021005 ESI = 01021005 EDI = 01021005 EIP = 01022046 ESP = 003EF814 EBP = 003EF81C EFL = 00000217 


 
TestProc Proc dwParam1:DWORD,bwParam1:DWORD
01022034  push        ebp                                                 ;保存ebp的值,函数执行完毕后需要恢复这个值
01022035  mov         ebp,esp                                          ;把当前的堆栈指针给ebp,保存esp的值,函数执行完毕后需要恢复这个值
                ;参数在调用函数前已经存入堆栈,从[EBP+8]、[EBP+C]、……开始
01022037  h add         esp,0FFFFFFF8                              ; esp指向参数地址 【在执行第一条指令之前esp指向参数首地址】
                local loc1:dword ,loc2:dword   ;
                                
                mov ebx, dwParam1   
0102203A  mov         ebx,dword ptr [dwParam1]  
                mov loc1,ebx       
0102203D  mov         dword ptr [loc1],ebx  
                mov ecx,bwParam1
01022040  mov         ecx,dword ptr [bwParam1]  
                mov loc2,ecx
01022043  mov         dword ptr [loc2],ecx  
                                                
                ret
01022046  leave  
01022047  ret         8  
        
        invoke TestProc,10101010h,202020h
0102204A  push        202020h                             ;保存参数
0102204F  push        10101010h  
01022054  call        TestProc (01022034h)  
                
 

我的问题:
参数在调用函数前已经存入堆栈,从[EBP+8]、[EBP+C]、……开始
add         esp,0FFFFFFF8   这条指令应该是让esp指向参数首地址
可是0FFFFFFF8=-8h,    那么esp指向[EBP-8] 而不是[EBP+8]     ??






最佳答案
2023-12-1 15:21:33
加一个负数等于减一个正数
add esp, 0FFFFFFF8
add esp, -8
sub esp, 8
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-12-1 14:28:27 | 显示全部楼层
add esp, 0FFFFFFF8的目的是为了将esp的值减去8,使得它指向当前函数堆栈中的参数地址。在这个例子中,由于有两个DWORD类型的参数(每个占4个字节),所以需要将esp指针向上减少8个字节,以便正确访问这两个参数。

0xFFFFFF8是一个十六进制补码数,等于-8。当执行add esp, 0xFFFFFF8时,实际上是将esp的值减去8。通过这样的操作,esp会指向参数首地址,即第一个参数存储的位置。由于参数是从低地址向高地址依次存储的,所以esp指向的是最后一个参数的地址。

以上回复来自 -- ChatGPT(FishC官方接口),如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-12-1 15:21:33 | 显示全部楼层    本楼为最佳答案   
加一个负数等于减一个正数
add esp, 0FFFFFFF8
add esp, -8
sub esp, 8
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-12-6 12:13:19 | 显示全部楼层
这看起来是真的把我拉黑了,算了,无所谓了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-12-11 14:49:43 | 显示全部楼层
人造人 发表于 2023-12-6 12:13
这看起来是真的把我拉黑了,算了,无所谓了

谁把你拉黑了 ??
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-21 20:05

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表