- 浏览: 227136 次
- 性别:
- 来自: 广州
文章分类
最新评论
-
thebye85:
引用 另外一个需要注意的问题,就是SessionMap和隐藏对 ...
WebWork深度探索之Session -
lanxiaoshuang:
写的真好
说的都是概念——有关编程范式 -
lhz:
grep unique wc你需要的只是这么几个小工具而已
努力做个Pragmatic Programmer
昨天还在感叹自己面对Windows开发就像一个傻瓜,今天随便找了个突破口,期待能够将自己掌握的知识联系起来,结果就是一发不可收拾,越看越迷糊,越想越凌乱。不管怎么样,先将今天看到的新面孔记个流水帐吧。
首先,突破口就是WinMain函数的修饰符WINAPI。从WINDEF.H这个头文件中,我得知WINAPI实质上就是__stdcall。那么什么是__stdcall呢?
__stdcall属于Microsoft定义的函数修饰符,除了她之外,还有__fastcall、__cdecl和thiscall定义了函数被调用的方式,其中,thiscall不是关键字。以前关注的都是函数如何去定义,而函数调用都是很平常的事情,从来都没有去思考在函数调用的过程中,发生了什么事情。以下文字摘自MSDN,对于函数调用的过程中发生的事情做了描述:
All arguments are widened to 32 bits when they are passed. Return values are also widened to 32 bits and returned in the EAX register, except for 8-byte structures, which are returned in the EDX:EAX register pair. Larger structures are returned in the EAX register as pointers to hidden return structures. Parameters are pushed onto the stack from right to left.
The compiler generates prolog and epilog code to save and restore the ESI, EDI, EBX, and EBP registers, if they are used in the function.
译文:所有的实参在传递的时候都会被扩展为32位,返回值也是如此,并且会存储至EAX寄存器中(天啊,寄存器都来了)。如果返回的是8字节的结构体,那么她就会被存在EDX:EAX寄存器对中。如果是体积更大的结构体返回的话,那么EAX存放的将是一个指向结构体所在地址的指针。型参按照从右至左的顺序被推入栈中。
在ESI、EDI、EBX和EBP寄存器当中,如果她们在程序中被使用到的话,编译器会生成序言(prolog)和结语(epilog)代码来存储和恢复这些被使用的寄存器的内容。
再次回到刚刚提到的几种定义函数调用的修饰符上来。大家先看如下的函数定义和调用(以下代码和图片均来自MSDN):
void MyFunc( char c, short s, int i, double f )
{
}
MyFunc ('x', 12, 8192, 2.7183);
对于以上的函数定义,calltype用__fastcall、__cdecl等替代。那么,在函数调用的过程中,不同的修饰符下的内存结构如下图:
calltype = __cdecl
calltype = __stdcall 和 thiscall
calltype = __fastcall
最后,由prolog和epilog又引出了Naked Function Calls的概念。所谓Nake Function Calls就是由自己来写prolog和epilog,而不是由编译器来生成。而这里面还有很多的学问,譬如Nake Function Calls的限制,prolog和epilog应该如何写等等。以下就先给出一个Naked Function的例子吧(来自MSDN):
{
/**//* calculates i^j, assumes that j >= 0 */
/**//* prolog */
__asm {
push ebp
mov ebp, esp
sub esp, __LOCAL_SIZE
// store ECX and EDX into stack locations allocated for i and j
mov i, ecx
mov j, edx
}
{
int k=1; // return value
while (j-- > 0) k *= i;
__asm { mov eax, k };
}
/**//* epilog */
__asm
{
mov esp, ebp
pop ebp
ret
}
}
int main()
{
}
噢,我已经有点眩晕了。一天吃不成胖子,脑袋也装不下那么多的东西,就到这里吧。还是不要冷落WinMain,毕竟这才是主体,__stdcall只是一个修饰符而已啊。Oh, My God.
发表评论
-
在String的面前丢脸
2004-06-18 00:39 1264重返C++的世 ... -
Summary of function parameter
2004-07-14 02:33 1141对C++这位入 ... -
此Vector非彼Vector
2004-08-05 15:51 1046在学习STL的过程中,我发现了一个熟悉的面孔— ... -
模板——泛型和STL的基础
2004-08-07 01:01 1326所谓泛型,从字面上可以猜想,就是泛化的类型(型 ... -
让人头痛的Vector(提问篇)
2004-08-07 16:55 1229在写完了此Vector非彼Vector这篇随笔 ... -
我该怎样shuffle呢
2004-08-10 01:47 1180在STL的Algorithm中有着这样的一种算 ... -
WebWork初体验
2004-08-11 17:43 1290在这篇ASP.NET ... -
WebWork深度探索之盲人摸象
2004-08-12 23:54 1127昨天尝试着利用WebWork做了一个小功能[1 ... -
WebWork深度探索之号外
2004-08-14 09:03 1039昨天开始对WebWork进行了一些初步的探索[ ... -
WebWork深度探索之标签库
2004-08-15 00:28 1530由于WebWork本身提供了一套自定义的标签库 ... -
什么是Law of Demeter
2004-08-15 14:22 1231今天一如昨日,继续对WebWork进行小打小闹 ... -
所谓的Dumb Question
2004-08-15 17:16 1033为了能够更 ... -
WebWork深度探索之标签库(续)
2004-08-16 15:58 1128昨日对WebWork的标签库进行了小小的研究[ ... -
WebWork深入探索之初见端倪
2004-08-19 16:35 893使用WebWork进 ... -
建网站的小Tips
2004-08-20 23:58 1034这几天都在忙着做一个小网站,从网页美工到后台处 ... -
URL与RequestDispatcher
2004-08-21 23:58 1002今天照例继续自己的网站建设之旅,原本以为可以大 ... -
WebWork深度探索之Pitfall
2004-08-25 14:31 957在使用WebWork进行开发的过程中,她的种种 ... -
WebWork深度探索之Session
2004-08-26 15:38 1523昨天上午刚 ... -
搞笑的textarea标签
2004-08-31 18:17 1582很久没有用 ... -
两天四疑问
2004-09-03 10:56 9939月份的前两天,我仍然做着网站开发的工作。在开 ...
相关推荐
《摇摇晃晃的Gamy Wimey:Rust编程打造的Roguelite地牢探索之旅》 在游戏开发的世界里,Roguelite类型的游戏以其随机生成的地图、...通过深入研究这个项目,我们可以学习到如何用Rust创造出独特且引人入胜的游戏世界。
2. 词语运用:文段中的成语和词语运用,如“一概”、“一发不可收”(应改为“一发不可收拾”)、“遏制”、“肃然起敬”。其中,“一发不可收”和“一发不可收拾”虽只有一字之差,但含义却截然不同,使用时需注意...
一年前我认识了它---jQuery,从此就一发不可收拾。有人说:jQuery是毒药,会使人不思进取,放弃原生的JavaScript的学习。不过从我的经验看来,事实并不是这样,笔者正是由于jQuery,才对JavaScript这门语言感兴趣,...
不久 Knuth 觉得此书 涉及的领域应该扩大,于是越写越多,如滔滔江水连绵不绝,又如黄河泛 滥一发不可收拾。1965 年完成的初稿居然有 3000 页,全是手写的!据出版 商估计,这些手稿印刷出来需要 2000 页,出书的...
3. 词语运用:题目中的第2题考察了词语的准确运用,"一发不可收"在此处使用不当,应改为"一发不可收拾"。 4. 标点符号:第3题考察了标点符号的使用,指出引号内的句子如果作为主语成分,句内末尾不应有句号。 5. ...
4. 成语与熟语的运用:如“一发不可收拾”,要求学生能够正确理解成语的含义并运用到句子中,避免语境误用。 5. 语病辨析:题目考察学生对汉语语法的掌握,找出有语病的句子,如成分残缺、搭配不当、一面对两面等...
- 一发不可收/一发不可收拾 通过对这些成语的辨析,我们可以提高在实际运用中的准确性,从而在高考语文中取得更好的成绩。在即学即练环节,学生需要根据语境选择正确的成语,例如题目中的例句,通过分析语境,选出...
3. **词语使用**:通过辨析“中止”、“无所不至”、“一发不可收拾”和“鹅行鸭步”等成语在不同语境下的正确应用,考察学生的词汇理解和实际运用能力。例如,正确答案是A,“中止”表示停止某个行动,适合用于描述...
2. **词语搭配与应用**:如“一发不可收拾”、“黯然失色”等成语,要求学生能熟练运用到句子中,提高语言表达能力。 3. **阅读理解**:通过阅读短文,理解文章内涵,进行段落划分和主旨提炼,培养学生的阅读理解...
3. **成语运用**:试题中出现了一个成语运用的选择题,如“一泄千里”在语境中使用不当,应改为“一发不可收拾”。这检验学生的成语理解和应用能力。 4. **语病辨析**:通过选择题形式,让学生判断句子是否有语病,...
看了python画小猪佩奇之后,一发不可收拾! 为了满足小朋友的愿望和自己学习的目的,就搜集缩小的网络上关于python绘画的资源! 说明 本仓库主要是学习目的,代码并非都是原创,大部分来自于网络公开资源!如有违反...
这些题目不仅考察了学生对成语的准确理解,如“相濡以沫”、“一发而不可收拾”,还要求学生具备基本的语法分析能力,如辨析病句中的逻辑错误和结构问题。此外,还有语句排序题,这需要学生理解语段的整体逻辑,合理...
成语应用:"络绎不绝"用于形容人流量大,"一泄千里"用错,应改为"一发不可收拾";"各有千秋"表示各有特点,用于李白和杜甫的诗风对比合适;"乐此不疲"用在此处不合适,宜改为"乐在其中";"推波助澜"是贬义,用于...
- 词汇的准确使用对于表达清晰至关重要,如“一发而不可收拾”误用在“车市火爆”的场景中,正确的成语应该是“一发不可收拾”形容事情失控,而“车市火爆”并非失控状态。 - 成语“气冲牛斗”用于形容气势或怒气...
就这样开始而一发不可收拾,从最开始的结构搭建、输出设计便沉迷此中两个月,推出的前三个版本都不太稳定,要么是兼容不好,要么是数据处理的时逻辑顺序有问题,总之在最初的三个版本在大量项目的测风数据的测试下暴...
而“一发而不可收拾”则意味着事情失控,后果严重,难以挽回。 以上这些成语的辨析对于学生来说至关重要,它们在写作和日常交流中都有广泛应用。理解并正确使用这些成语,不仅能提升语言表达的精准性,还能彰显文化...
1993年,他开始了他的Linux之旅,从此一发不可收拾。目前,他是Linux Weekly News的联合创始人和执行编辑,居住在美国科罗拉多州的博尔德市,与妻子和两个孩子共享天伦之乐。 ### Alessandro Rubini Alessandro ...
与“一发而不可收”(形容事物发展势头无法控制,通常用于正面情境)相混淆。 9. **不可理喻**:形容人态度蛮横或无知,无法用道理说服。误用时可能误解为“无法理解”。 10. **不瘟不火**:形容戏曲表演恰到好处...
26. **一发而不可收拾**:事情发生后,局面失控,难以挽回。 27. **石破天惊**:形容事物或言论新颖、惊人,如同石头破碎,声音震撼天空。 28. **对簿公堂**:在法庭上对质,进行法律诉讼。 29. **一针见血**:...