郁闷, 关于BCB的编译器...

alloutoflove 2006-05-24 03:01:02
新建一工程, 然后代码如下:
//---------------------------------------------------------------------------

#include <vcl.h>
#include <shlobj.h>
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;

BOOL IsEnabled()
{
SHELLFLAGSTATE shfs;
SHGetSettings( &shfs, SSF_DESKTOPHTML );
return shfs.fDesktopHTML;
}
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
BOOL bRet = IsEnabled();
}
//---------------------------------------------------------------------------

大家试一下在Full Debug和Release都编译运行试一下... 可以发现Full Debug下会报AV错, 这个问题把偶搞晕了1个多小时...后来只好动用 OllyDBG看了,结果发现Full Debug和Release情况下IsEnabled()函数的汇编代码:
Release:
PUSH ECX
PUSH 200
LEA EAX,DWORD PTR SS:[ESP+4]
PUSH EAX
CALL <JMP.&SHELL32.SHGetSettings>
MOV AL,BYTE PTR SS:[ESP]
SHL EAX,19
SAR EAX,1F
POP EDX
RETN

Full Debug:
PUSH EBP
MOV EBP,ESP
PUSH ECX
PUSH 200
LEA EAX,DWORD PTR SS:[EBP-2]
PUSH EAX
CALL <JMP.&SHELL32.SHGetSettings>
MOV AL,BYTE PTR SS:[EBP-2]
SHL EAX,19
SAR EAX,1F
POP ECX
POP EBP
RETN

懂汇编的兄弟应该能看出在Full Debug模式下编译出来的汇编代码中EBP在栈中的值被华丽地修改了...


发这个帖子的意思是想提醒大家在工程运行报AV错的时候可以检查一下是不是在Release模式下...
偶是在BCB6 + upd4下测试的, 有条件和兴趣的朋友可以在2006中试一下.
...全文
336 12 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
sfengnet 2006-05-25
  • 打赏
  • 举报
回复
接分
勉励前行 2006-05-25
  • 打赏
  • 举报
回复
高兴地接这个分了.
alloutoflove 2006-05-25
  • 打赏
  • 举报
回复
谢楼上各位!

这种情况算个特例吧,SHELLFLAGSTATE是个位结构.如果是普通的最小数据为字节的结构应该不会出现这样的问题.
ribut9225 2006-05-25
  • 打赏
  • 举报
回复
ding
老之 2006-05-25
  • 打赏
  • 举报
回复
:)
daydayup234 2006-05-25
  • 打赏
  • 举报
回复
Release改
Full Debug
BlueDeepOcean 2006-05-24
  • 打赏
  • 举报
回复
的确应当注意类似的问题,感谢楼主。接分!
sydt 2006-05-24
  • 打赏
  • 举报
回复
To:alloutoflove (andrew)
明天发个帖子关于注册码问题,还得麻烦兄台出手!详细信息我会在新帖中说明!!!
铖邑 2006-05-24
  • 打赏
  • 举报
回复
顶一个
CACACACACA 2006-05-24
  • 打赏
  • 举报
回复
好人呀,送分又提醒
cczlp 2006-05-24
  • 打赏
  • 举报
回复
xie
安馨安旭 2006-05-24
  • 打赏
  • 举报
回复
还没遇到过这个问题,不过谢谢楼主的提醒。

551

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder 茶馆
社区管理员
  • 茶馆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧