看过《神奇的const修改过程》这篇帖子的朋友也应该和我有同样的疑问
我昨天晚上做了下跟踪发现有趣的事儿
还记得上面的代码吧,里面的i的值即被强行修改了
这里看看我的反汇编情况
这里是整个main函数的反汇编代码 由于写上了源代码所以很容易看懂
这里就直接步入主题看关键代码
004017DE 把ebp-8的地址传给edx // LEA 是 有效地址传送指令
004017E1 把edx的值传入ebp-0Ch //ebp-0Ch就是指针p的装的内存地址
004017E4 把ebp-0Ch的值传入eax
004017E7 把63h传入eax //63h是16进制,转换10进制是99,
cout 是从后往前载入的。所以第一个载入的是endl
最后,这里应是关键,由于最开始给常量i赋值的时候通过变量tmp中转了一下
应该就是导致为什么最后读取常量i的值的时候是读取的eax中的值 ,而不是直接读取的值