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段。