starnet 阅读(1215) 评论(4)

#include "stdafx.h"
#include "stdio.h"

void main()
{
 int i=10;
 int a = i;
 
 printf("i= %d\n",a);
 //ÏÂÃæ»ã±àÓï¾äµÄ×÷ÓþÍÊǸıäÄÚ´æÖÐiµÄÖµ£¬µ«ÊÇÓÖ²»ÈñàÒëÆ÷ÖªµÀ
 __asm {
  mov dword ptr [ebp-4], 20h
 }
 
 int b = i;
 printf("i= %d\n",b);
}     

这段代码的debug和release输出结果是不一样的!
详情google “volatile”关键字!(转)


评论列表
周星星
re: 喜欢在C/C++代码中使用汇编得小心点用

#include <stdio.h>

void foo( const void* )
{
}

int main()
{
    int i=10;
    foo( &i ); // 确保i不被优化掉

    //// 只需要在debug和release下各运行一次,获得各自不同的偏移
    //int offset;
    //{
    //    // 获得EBP,及i的偏移
    //    int xebp;
    //    __asm mov xebp, ebp;
    //    offset = xebp - (int)&i;
    //
    //    printf( "%d\n", offset );
    //}
   
    int a = i;
    printf("i= %d\n",a);

#ifdef _DEBUG
    __asm mov dword ptr [ebp-8], 20h
#else
    __asm mov dword ptr [ebp-4], 20h
#endif

    int b = i;
    printf("i= %d\n",b);

    return 0;
}

周星星
刚才foo中漏写了一句,重来
#include <stdio.h>

int main()
{
int i=10;
printf( "", &i ); // 确保i不被优化掉

// 只需要在debug和release下各运行一次,获得各自不同的偏移
//int offset;
//{
// // 获得EBP,及i的偏移
// int xebp;
// __asm mov xebp, ebp;
// offset = xebp - (int)&i;
//
// printf( "%d\n", offset );
//}

int a = i;
printf("i= %d\n",a);

#ifdef _DEBUG
__asm mov dword ptr [ebp-8], 20h
#else
__asm mov dword ptr [ebp-4], 20h
#endif

int b = i;
printf("i= %d\n",b);

return 0;
}
VC大虾
诚招VC程序员写书
优厚的稿酬,诚招VC技术人员参与VC技术书籍出版。
通过该书籍,作者可以得到如下报酬:
1、丰厚的稿酬。
2、书籍著作的署名权。
3、对作者和书进行宣传,提高作者在技术圈子里的名气。
可异地兼职,如果您有这方面的兴趣和能力,请与我联系。

Email:jxsdhl@hotmail.com
QQ:614723657

发表评论
切换编辑模式