通過簡單快速的設定編譯x64位彙編

來源:互聯網
上載者:User

最近在寫64位彙編,設定編譯命令是件繁瑣而又重複的勞動。網上也有不少文章介紹怎麼樣編譯64位彙編的,但都覺得複雜,有的還需要下載其他的彙編軟體,最囧的是:有篇文章給出的下載下來的檔案乾脆就直接是木馬!

既然我們使用VS系列,就不要捨近求遠了。使用MS提供的ml64,安全放心,也無相容性問題。下面開始說明怎麼樣設定:

一、在vc的安裝目錄下,找到“VCProjectDefaults/masm.rules”,複製出來,改個名字,用記事本等純文字編輯器開啟

二、masm.rules的前面幾行的內容如下:

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <VisualStudioToolFile
  3.     Name="Microsoft Macro Assembler"
  4.     Version="8.00"
  5.     >
  6.     <Rules>
  7.         <CustomBuildRule
  8.             Name="MASM"
  9.             DisplayName="Microsoft Macro Assembler"
  10.             CommandLine="ml.exe /c [AllOptions] [AdditionalOptions] /Ta[inputs]"
  11.             Outputs="[$ObjectFileName]"
  12.             FileExtensions="*.asm"
  13.             ExecutionDescription="Assembling..."
  14.             >

替換ml.exe為ml64.exe,然後把名稱,副檔名修改成你喜歡的,下面是我的修改:

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <VisualStudioToolFile
  3.     Name="Macro Assembler x64"
  4.     Version="8.00"
  5.     >
  6.     <Rules>
  7.         <CustomBuildRule
  8.             Name="MASM x64"
  9.             DisplayName="Macro Assembler x64"
  10.             CommandLine="ml64.exe /c [AllOptions] [AdditionalOptions] /Ta[inputs]"
  11.             Outputs="[$ObjectFileName]"
  12.             FileExtensions="*.asm64"
  13.             ExecutionDescription="Assembling..."
  14.             >

儲存,關閉檔案。

三、在方案總管裡,右鍵點中你的項目,出來一個菜單;選擇“自訂建置規則...”,在彈出的對話方塊上,點“尋找現有的...”,開啟你剛才編輯的.rules檔案。然後你就應該在“可用的規則檔案”列表裡看到你剛才修改的名字和副檔名(我的叫做asm64),在其左邊的檢查框裡勾上,關閉這個視窗。

四、建立一個文字檔,改名成“檔案名稱.你喜歡的副檔名”,如我的就叫做“1.asm64”,然後把這個檔案加入到工程裡。不出意外,VS就自動根據副檔名選擇了你剛才修改的規則;如果出了意外,則單獨對“1.asm64”進行設定:在方案總管裡,右鍵點中這個檔案,選擇屬性;然後在對話方塊裡左邊選擇“配製屬性/常規”,然後在工具裡選擇你剛才命名的規則。如我的叫做“Macro Assembler x64”。點“確認”按鈕關閉這個對話方塊。

五、在“1.asm64”檔案裡寫上正確的彙編,編譯之。不出意外,64位彙編已經正確串連到你的程式裡了。

六、開啟“1.asm64”檔案的屬性對話方塊,應該能看到不少設定選項,慢慢琢磨吧。

 

show一段64位彙編代碼:

 

  1. INCLUDE listing.inc
  2. pdata   SEGMENT
  3. ___real_value_1 DD 03f800000r
  4.     DD  03f800000r
  5.     DD  03f800000r
  6.     DD  03f800000r
  7. ___real_value_negation DD 080000000H
  8.     DD  080000000H
  9.     DD  080000000H
  10.     DD  080000000H
  11. pdata   ENDS
  12. ;void MulAdd(D3DMATRIX & Out,const D3DMATRIX & m1,FLOAT f,const D3DMATRIX & m2)
  13. ;{
  14. ;   register FLOAT * pOut = (FLOAT *)&Out;
  15. ;   register const FLOAT * pIn1 = (FLOAT *)&m1;
  16. ;   register const FLOAT * pIn2 = (FLOAT *)&m2;
  17. ;   for(register int i=15;i>=0;--i)
  18. ;       pOut[i] = pIn1[i] * f + pIn2[i];
  19. ;}
  20. PUBLIC ?MulAdd@@YAXAEAU_D3DMATRIX@@AEBU1@M1@Z
  21. _TEXT   SEGMENT
  22. ?MulAdd@@YAXAEAU_D3DMATRIX@@AEBU1@M1@Z  PROC
  23.     shufps xmm2,xmm2,0
  24.     
  25.     movups xmm0,[rdx]
  26.     movups xmm1,[r9]
  27.     mulps xmm0,xmm2
  28.     addps xmm0,xmm1
  29.     movups [rcx],xmm0
  30.     
  31.     movups xmm0,[rdx+16]
  32.     movups xmm1,[r9+16]
  33.     mulps xmm0,xmm2
  34.     addps xmm0,xmm1
  35.     movups [rcx+16],xmm0
  36.     movups xmm0,[rdx+32]
  37.     movups xmm1,[r9+32]
  38.     mulps xmm0,xmm2
  39.     addps xmm0,xmm1
  40.     movups [rcx+32],xmm0
  41.     movups xmm0,[rdx+48]
  42.     movups xmm1,[r9+48]
  43.     mulps xmm0,xmm2
  44.     addps xmm0,xmm1
  45.     movups [rcx+48],xmm0
  46.     
  47.     ret 0
  48.     
  49. ?MulAdd@@YAXAEAU_D3DMATRIX@@AEBU1@M1@Z  ENDP
  50. _TEXT   ENDS

祝各位同仁_WIN64旅程愉快!

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.