C/C++
文章平均质量分 70
ENO_REZ
01001010001010100101010101010100101010000101010110001010101010100101010101
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
C++编译时 函数调用约定 与 函数名修饰约定规则
函数调用约定(Calling convention)决定以下内容: 1) 函数参数的压栈顺序 2) 由调用者还是被调用者把参数弹出栈 3) 产生函数名修饰的方法 __cdecl C/C++程序的默认调用规范由 调用方 清空堆栈 产生的可执行文件较大函数的参数个数可变.可变参数函数需要 __cdecl 约定__stdcall = WINAPI宏由 被调方 清空堆栈 产生的可执行文原创 2008-01-29 22:10:00 · 1880 阅读 · 0 评论 -
[Visual C++语言参考]结构化异常处理(SEH)
Windows 95 、 Windows 98 和 Windows 2000(以前的Windows NT)支持一种健壮的处理程序异常的方法,称之为"结构化异常处理(SEH)",这种方法与操作系统密切相关,同时直接在编程语言中被支持。 [微软编译器特定]语法:try-except语句: __try { //程序代码 } __except(表达翻译 2008-02-01 20:22:00 · 1383 阅读 · 0 评论 -
[VS 2005 IDE : C++Complier] Microsoft-Specific Modifiers' Usage
__based{ 该关键字主要用来解决一些和共享内存有关的问题,它允许指针被定义为从某一点(指针)开始算的32位偏移值, 而不是内存中的绝对位置. 每当用__based指针处理数据,CPU为其加上基地址,以指向真正的位置. 指针vpBuffer在之后代码中指向一段被分配的内存,则llist相对于vpBuffer重新予以定位. // based_pointers1.cpp // c原创 2008-01-29 21:17:00 · 1378 阅读 · 0 评论 -
[C/C++] 可变参数表(Variable Arguments)
C/C++支持可变长度的函数参数表,程序员可以通过指针运算并提领来获取函数的任意个参数。由于C/C++默认的__cedcl调用规范规定:函数参数的压栈和弹出操作都经由主调方进行,所以被调函数其实并不不需要知晓参数数量。为了使用这种可变参数函数调用,需要在参数表末尾添加三个句点形成的省略号“...” void g(int a,char* c,...); 省略号之前的逗号是可选的,并不影原创 2008-03-08 19:46:00 · 3034 阅读 · 0 评论 -
[资料]I386平台的内存布局
众所周知,I386是32位体系结构。因此对于绝大多数I386平台的C++编译器而言,sizeof(int)=sizeof(long)=sizeof(void*)=4。当然C++标准对此没有任何保证,我们也不应该试图编写依赖于此的代码。 32位指针的可寻址空间为4GB。为充分利用这么大的寻址空间,也是为了支持其它更先进的技术比如多任务技术或者动态链接库技术,WinNT使用虚拟内存技术,给与转载 2008-03-08 19:51:00 · 1487 阅读 · 0 评论 -
[C/C++] 函数调用的栈分配
当调用(call)一个函数时,主调函数将声明中的参数表以逆序压栈,然后将当前的代码执行指针(eip)压栈,跳转到被调函数的入口点。 进入被调函数时,函数将esp减去相应字节数获取局部变量存储空间。被调函数返回(ret)时,将esp加上相应字节数,归还栈空间,弹出主调函数压在栈中的代码执行指针(eip),跳回主调函数。再由主调函数恢复到调用前的栈。原创 2008-03-08 19:55:00 · 7482 阅读 · 4 评论 -
汇编栈操作指令的替代形式
push ebp相当于:add esp,4mov dword ptr[esp],ebppop ebp相当于:mov ebp,dword ptr[esp]sub esp,4call func_address相当于:push eipjmp func_addressret相当于add esp,4jmp dword ptr[esp-4]带参数的ret指令原创 2008-03-09 14:05:00 · 1606 阅读 · 1 评论 -
仅通过崩溃地址找出源代码的出错行
I386平台C函数调用边界的栈分配 当调用一个函数时,主调函数将参数以声明中相反的顺序压栈,然后将当前的代码执行指针(eip)压栈,然后跳转到被调函数的入口点。在被调函数中,通过将ebp加上一个偏移量来访问函数参数,以声明中的顺序(即压栈的相反顺序)来确定参数偏移量。被调函数返回时,弹出主调函数压在栈中的代码执行指针,跳回主调函数。再由主调函数恢复到调用前的栈。 函数的返回值不同于函转载 2008-03-08 19:55:00 · 1647 阅读 · 0 评论
分享