现在的位置: 首页 > 综合 > 正文

个人保存

2013年06月20日 ⁄ 综合 ⁄ 共 1360字 ⁄ 字号 评论关闭

mutable

  mutable 可以用来指出,即使结构或者类变量为const,其某个成员也可以被修改   例如   struct data   {   char name[30];   mutable int accesses;   ....   };   const data veep = {"david";,0,}   strcpy(veep.name,"Jimmy");// not allowed   veep.accesses++; // allowed   veep 的const限定符禁止程序修改veep的成员,但access成员的mutable说明符表示access不受这种限制

一般情况下,ebp+x引用函数的参数,ebp-x引用局部变量

lea eax,dword ptr ss:[esp-8]
LEA是取有效地址指令
LEA EAX,DWORD PTR SS:[ESP-8]是把SS:[ESP-8]这个内存单元相对于SS段的偏移地址送入EAX寄存器吧?
从物理上看是将esp-8的值送给eax,从逻辑上看就是取变量的地址。

负数的表示方式:补码,取反加一。 
补码这个简单,只要记住100000000=0和x-0=x就行
所以 [ebp+FFFFFE44]也即[EBP-1BB]

汇编中的[] 相当于 C中的* (取成员),取堆栈中向上偏移1BB的成员(因为堆栈的地址值向下是大,往上是小,把ESP向上移就得用减
堆栈地址,压栈是减地址,出栈是加地址,这样说

2.栈在汇编代码中表示成PUSH POP,用的是ESS段,SP寄存器
而堆不是,是在内存中读写,EDS段,

堆和栈合起来才是堆栈,堆是从低到高扩展的,栈是从高到低扩展的

c++ + c++ 注意++指令时值一个运算符结束后+1,这里运算符+首先运算,然后C++。

http://mircool.blogbus.com/logs/45465527.html

http://mircool.blogbus.com/logs/45518110.html
http://blog.163.com/chuyuxinanyi/blog/static/26905761200972143125642/

http://taoyi.bokee.com/580652.html

http://www.8885.net/html/34/434-3683.html

http://dev.csdn.net/htmls/74/74204.html
http://hi.baidu.com/sunshine_1127/blog/item/9a0aff388fb8c92fb8998ff3.html

0c0h??

http://taoyi.bokee.com/580652.html
上面这个链接,说明了win32  api 调用的堆栈平衡和c的不一样,c是调用函数后面平衡,win32 api则是调用函数内部进行堆栈平衡

http://blog.csdn.net/zhuchunjian/archive/2008/10/03/3014699.aspx

ebp和esp默认是ss段,所以根本不用显式说明。eax,ebx,ecx,edx,edi,esi默认是ds段,eip默认是cs段。

 

 

 

http://blog.chinaunix.net/u2/76263/showart_1273552.html

抱歉!评论已关闭.