首页
社区
课程
招聘
[求助]为什么编译器会使用栈外的内存?
发表于: 2012-6-26 08:01 4274

[求助]为什么编译器会使用栈外的内存?

2012-6-26 08:01
4274
如图:


调试时发现这个内存地址刚好位于栈外。
我自己觉得这可能是调用约定的问题,但是不知道怎么改,我的源码大致是这样写的:
pfncreateFile createfile=(pfncreateFile)pMyGetProcAddressA(hkernel32,"CreateFileA");
hfile=createfile(filepath,GENERIC_READ,NULL,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);

我看了一下,编译出来的代码,使用的是c调用方式。请问在这种写法基本不变的情况下,该怎么让api使用stdcall的约定?

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

上传的附件:
收藏
免费 0
支持
分享
最新回复 (4)
雪    币: 272
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
WIAPI和stdcall多了关键寄存器的保护而已
你截图截完整一点吧,看不清楚
2012-6-26 11:05
0
雪    币: 257
活跃值: (67)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
3
你看ebp-188h是否小于esp
要是小于的话,可能就是传说中的堆栈溢出
就该考虑局部变量占用字节是否太大
C默认调用方式是__cdecl
但API几乎都是__stdcall调用方式
你可以把自己的函数名前面加上__stdcall
就是__stdcall调用方式
2012-6-26 12:38
0
雪    币: 257
活跃值: (67)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
4
mov  dword  ptr  [ebp-188h],eax
cmp  dword  ptr  [ebp-188h],-1
这2句汇编不是脱裤子放屁吗?
既占内存又降低运行效率
直接 cmp  eax,-1 多好?
LZ是不是没有开启编译器优化?
2012-6-26 12:44
0
雪    币: 62
活跃值: (40)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
5
。。。我已经自己解决了。没错,是调用约定的问题。
2012-6-26 19:32
0
游客
登录 | 注册 方可回帖
返回
//