一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

在C\\C++中嵌入?yún)R編

 不負(fù)斯土 2011-09-01

在C\\C++中嵌入?yún)R編  

2009-10-12 22:44:17|  分類: C++ |  標(biāo)簽: |字號(hào) 訂閱

怎么樣在C\\C++中嵌入?yún)R編呢?下面我們用三篇文章來(lái)說(shuō)明這個(gè)問(wèn)題。

1. 按照默認(rèn)設(shè)定創(chuàng)建一個(gè)控制臺(tái)程序TestAsm,在Project/Setting的General的Microsoft Foundation Class使用的是: not    using mfc
   #include <stdio.h>
   char format[] = \"%s %s\\n\";
   char hello[] = \"Hello\";
   char world[] = \"world\";
   int main( void )
   {
       __asm
      {
          mov  eax, offset world
          push eax
          mov  eax, offset hello
          push eax
          mov  eax, offset format
          push eax
          call printf
          pop  ebx
         pop  ebx
         pop  ebx
      }
      return 0;
    }
    上面代碼對(duì)應(yīng)在調(diào)試時(shí)對(duì)應(yīng)的匯編代碼為:

10:      __asm
11:      {
12:         mov  eax, offset world
00401068   mov         eax,offset world (00422a40)
13:         push eax
0040106D   push        eax
14:         mov  eax, offset hello
0040106E   mov         eax,offset hello (00422a38)
15:         push eax
00401073   push        eax
16:         mov  eax, offset format
00401074   mov         eax,offset format (00422a30)
17:         push eax
00401079   push        eax
18:         call printf
0040107A   call        printf (004011f0)
19:         pop  ebx[Page]
0040107F   pop         ebx
20:         pop  ebx
00401080   pop         ebx
21:         pop  ebx
00401081   pop         ebx
22:      }

編譯完成后,執(zhí)行程序,得到預(yù)期結(jié)果: Hello world

2. 還是上面的例子,設(shè)置Project/Setting的General的Microsoft Foundation Class使用的是: using mfc in shared dll
   還是上面的代碼程序,在調(diào)試的時(shí)候,得到的匯編代碼如下:
   10:      __asm
11:      {
12:         mov  eax, offset world
00401068   mov         eax,offset world (00414420)
13:         push eax
0040106D   push        eax
14:         mov  eax, offset hello
0040106E   mov         eax,offset hello (00414418)
15:         push eax
00401073   push        eax
16:         mov  eax, offset format
00401074   mov         eax,offset format (00414410)
17:         push eax
00401079   push        eax
18:         call printf
0040107A   call        __imp__printf (004150a8)
19:         pop  ebx
0040107F   pop         ebx
20:         pop  ebx
00401080   pop         ebx
21:         pop  ebx
00401081   pop         ebx

22:      }

 

比較一下同一段代碼在使用using mfc in shared dll 和not using mfc的時(shí)候,出現(xiàn)的匯編代碼的不同,主要是在調(diào)用函數(shù)printf的時(shí)候,有不同,分別為: call        __imp__printf (004150a8) 和call        printf (004011f0)[Page]
在執(zhí)行使用using mfc in shared dll 編譯生成的執(zhí)行文件時(shí),會(huì)出現(xiàn)異常,得不到正常的結(jié)果.
但如果把call printf換成 call DWORD PTR[printf],程序有可以正常運(yùn)行了. 這就是同一個(gè)函數(shù)因?yàn)槭褂昧瞬煌膸?kù)而出現(xiàn)的不同的結(jié)果。
因此進(jìn)行了如下總結(jié):
1. 使用靜態(tài)編譯和不使用mfc編譯的時(shí)候,通過(guò)call ****,直接調(diào)用c的函數(shù)庫(kù)函數(shù).
2. 如果使用動(dòng)態(tài)庫(kù)進(jìn)行編譯,則應(yīng)該call DWORD PTR[****]去調(diào)用函數(shù)。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多

    午夜国产精品福利在线观看| 国产三级黄片在线免费看| 精品老司机视频在线观看| 少妇人妻一级片一区二区三区| 91爽人人爽人人插人人爽| 老司机亚洲精品一区二区| 91久久精品在这里色伊人| 国产老女人性生活视频| 亚洲av秘片一区二区三区| 成人午夜激情免费在线| 亚洲国产av国产av| 日韩精品在线观看一区| 熟女高潮一区二区三区| 日韩视频在线观看成人| 国产成人精品综合久久久看| 欧美国产在线观看精品| 日韩综合国产欧美一区| 91人妻人人做人碰人人九色| 国产中文字幕一二三区| 亚洲男人的天堂色偷偷| 国产av一区二区三区麻豆| 日韩成人中文字幕在线一区| 亚洲高清一区二区高清| 亚洲一区二区三区福利视频| 99久只有精品免费视频播放| 好吊视频有精品永久免费| 最近的中文字幕一区二区| 欧美自拍偷自拍亚洲精品| 日韩专区欧美中文字幕| 国产免费无遮挡精品视频 | 日韩精品一级一区二区| 好吊日在线观看免费视频| 国产黑人一区二区三区| 久热久热精品视频在线观看| 日韩欧美国产精品自拍| 亚洲欧美日本国产不卡| 91亚洲精品综合久久| 亚洲国产欧美精品久久| av在线免费观看一区二区三区| 欧洲自拍偷拍一区二区| 精品女同在线一区二区|