国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

MASM32連接程序時error A2006: undefined symbol : u

這篇具有很好參考價值的文章主要介紹了MASM32連接程序時error A2006: undefined symbol : u。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

為了檢測Windows操作系統是32位還是64位的,用MASM32編寫了一個調用Windows API函數GetNativeSystemInfo的程序(完整代碼附后),GetNativeSystemInfo函數會將指向SYSTEM_INFO結構體的地址存到GetNativeSystemInfo傳遞的參數中。

微軟官網中的STEM_INFO定義為:

typedef struct _SYSTEM_INFO {
  union {
    DWORD dwOemId;
    struct {
      WORD wProcessorArchitecture;
      WORD wReserved;
    } DUMMYSTRUCTNAME;
  } DUMMYUNIONNAME;
  DWORD     dwPageSize;
  LPVOID    lpMinimumApplicationAddress;
  LPVOID    lpMaximumApplicationAddress;
  DWORD_PTR dwActiveProcessorMask;
  DWORD     dwNumberOfProcessors;
  DWORD     dwProcessorType;
  DWORD     dwAllocationGranularity;
  WORD      wProcessorLevel;
  WORD      wProcessorRevision;
} SYSTEM_INFO, *LPSYSTEM_INFO;

SYSTEM_INFO中的wProcessorArchitecture存儲了已安裝操作系統的處理器體系結構。


訪問代碼為:???????????????

                 mov  eax, g_lpSI
                 mov  ax,  (SYSTEM_INFO ptr [eax]).DUMMYUNIONNAME.DUMMYSTRUCTNAME.wProcessorArchitecture
                 and  eax, 0ffffh
                 .if (eax==PROCESSOR_ARCHITECTURE_AMD64) || (eax==PROCESSOR_ARCHITECTURE_IA64) || (eax==PROCESSOR_ARCHITECTURE_ARM64)
                     mov eax, OFFSET g_sz64Bit
                 .else
                     mov eax, OFFSET g_sz32Bit
                 .endif

需要注意的兩點,一是wProcessorArchitecture是word型數據,只有16位。二是MASM32中沒有定義PROCESSOR_ARCHITECTURE_ARM64,在微軟網官上其值為12。

PROCESSOR_ARCHITECTURE_ARM64   equ 12     ;ARM64

但是在連接程序時總是提示 32or64.asm(54) : error A2006: undefined symbol : u

masm中出現a2006錯誤,MASM32,源碼解析,原創(chuàng)作品,windows,microsoft,MASM32,error A2006,未定義字符
第54行代碼就是
?

mov  ax,  (SYSTEM_INFO ptr [eax]).DUMMYUNIONNAME.DUMMYSTRUCTNAME.wProcessorArchitecture

里面并沒有使用符號u。

MASM32中的SYSTEM_INFO結構定義存在windows.inc中,居然跟微軟官網上的不同:

SYSTEM_INFO STRUCT
  wProcessorArchitecture        WORD       ?
  wReserved                     WORD       ?
  dwPageSize                    DWORD      ?
  lpMinimumApplicationAddress   DWORD      ?
  lpMaximumApplicationAddress   DWORD      ?
  dwActiveProcessorMask         DWORD      ?
  dwNumberOfProcessors          DWORD      ?
  dwProcessorType               DWORD      ?
  dwAllocationGranularity       DWORD      ?
  wProcessorLevel               WORD       ?
  wProcessorRevision            WORD       ?
SYSTEM_INFO ENDS

MASM32中的SYSTEM_INFO結構定義代碼中省略了微軟官網其中的DUMMYUNIONNAME聯合體和DUMMYSTRUCTNAME結構體,難怪使用.DUMMYUNIONNAME.DUMMYSTRUCTNAME.wProcessorArchitecture來訪問在連接時會出錯,奇怪的是出錯信息里沒有提示DUMMYUNIONNAME.DUMMYSTRUCTNAME未定義,而是莫明奇妙的u


將第54行代碼改為

mov  ax,  (SYSTEM_INFO ptr [eax]).wProcessorArchitecture

后順利完成連接,生成了EXE文件,但是更大的麻煩來了……

附完整·代碼:文章來源地址http://www.zghlxwxcb.cn/news/detail-726620.html

;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; 32or64.asm
;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

.586
.model     flat, stdcall
option     casemap:none
include    \masm32\include\windows.inc
include    \masm32\include\kernel32.inc
includelib \masm32\lib\kernel32.lib
include    \masm32\include\user32.inc
includelib \masm32\lib\user32.lib

;sssssssssssssssssssssssssssssssssssssss
;.const
;sssssssssssssssssssssssssssssssssssssss
;PROCESSOR_ARCHITECTURE_INTEL   equ 0      ;x86
;PROCESSOR_ARCHITECTURE_ARM     equ 5      ;ARM
;PROCESSOR_ARCHITECTURE_IA64    equ 6      ;基于 Intel Itanium 的
;PROCESSOR_ARCHITECTURE_AMD64   equ 9      ;x64 (AMD 或 Intel)
PROCESSOR_ARCHITECTURE_ARM64   equ 12     ;ARM64
;PROCESSOR_ARCHITECTURE_UNKNOWN equ 0ffffh ;未知體系結構。


_SYSTEM_INFO STRUCT
   UNION
     dwOemId DWORD ?
     STRUCT
        wProcessorArchitecture        WORD       ?
        wReserved                     WORD       ?
     ENDS
  ENDS
  dwPageSize                    DWORD      ?
  lpMinimumApplicationAddress   DWORD      ?
  lpMaximumApplicationAddress   DWORD      ?
  dwActiveProcessorMask         DWORD      ?
  dwNumberOfProcessors          DWORD      ?
  dwProcessorType               DWORD      ?
  dwAllocationGranularity       DWORD      ?
  wProcessorLevel               WORD       ?
  wProcessorRevision            WORD       ?
_SYSTEM_INFO ENDS

;sssssssssssssssssssssssssssssssssssssss
.data
;sssssssssssssssssssssssssssssssssssssss
g_szCaption               db    "Windows",0
g_sz32Bit                 db    "32位",0
g_sz64Bit                 db    "64位",0
g_szGetNativeSystemInfo   db    "GetNativeSystemInfo", 0
g_szkernel32Dll           db    "kernel32.dll", 0
g_szFailGetModuleHandle   db    "GetModuleHandle失敗", 0
g_szFailGetProcAddress    db    "GetProcAddress失敗", 0
g_lpfnGetNativeSystemInfo dword ?
g_lpSI                    dword ?  ; SYSTEM_INFO


;sssssssssssssssssssssssssssssssssssssss
.code
;sssssssssssssssssssssssssssssssssssssss
start:
      invoke GetModuleHandle, OFFSET g_szkernel32Dll
      .if    eax==NULL
             mov eax, OFFSET g_szFailGetModuleHandle
      .else
             invoke GetProcAddress, eax, OFFSET g_szGetNativeSystemInfo
             .IF eax==NULL
                 mov eax, OFFSET g_szFailGetProcAddress
             .ELSE
                 mov  g_lpfnGetNativeSystemInfo, eax
                 push OFFSET g_lpSI
                 call g_lpfnGetNativeSystemInfo
                 mov  eax, g_lpSI
                 mov  ax, (SYSTEM_INFO ptr [eax]).wProcessorArchitecture
                 and  eax, 0ffffh 
                 ;mov  eax, (_SYSTEM_INFO ptr [eax]).dwOemId
                 .if (eax==PROCESSOR_ARCHITECTURE_IA64) || (eax==PROCESSOR_ARCHITECTURE_AMD64) || (eax==PROCESSOR_ARCHITECTURE_ARM64)
                     mov eax, OFFSET g_sz64Bit
                 .else
                     mov eax, OFFSET g_sz32Bit
                 .endif
             .ENDIF
      .endif
      invoke MessageBox, NULL, eax, OFFSET g_szCaption, MB_OK
      invoke ExitProcess, NULL
end start

到了這里,關于MASM32連接程序時error A2006: undefined symbol : u的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • MDK編譯報錯Error: L6218E: Undefined symbol SystemInit (referred from startup_stm32f10x_md.0)

    MDK編譯報錯Error: L6218E: Undefined symbol SystemInit (referred from startup_stm32f10x_md.0)

    .ObjectsSTM32_MD.axf: Error: L6218E: Undefined symbol SystemInit (referred from startup_stm32f10x_md.o). Not enough information to list image symbols. Not enough information to list load addresses in the image map. Finished: 2 information, 0 warning and 1 error messages. “.ObjectsSTM32_MD.axf” - 1 Error(s), 0 Warning(s). Target not created.

    2024年02月16日
    瀏覽(22)
  • 【Linux】symbol lookup error: undefined symbol + nm指令定位錯誤

    一、undefined symbol錯誤 今天在運行模塊執(zhí)行文件時,出現了如下報錯 \\\"symbol lookup error\\\"、\\\"undefined symbol\\\",提示 cos_getfile_mcd 可執(zhí)行文件在加載 .so 文件時,出現了無法找到符號的錯誤,并給出了具體錯誤:_ZN20CCosGetfileTimerInfoC2Ev 符號未定義。 那么如何定位該錯誤呢?一般可以先

    2024年02月08日
    瀏覽(14)
  • Android Studio里的C/C++返回: ld: error: undefined symbol

    Android Studio里的C/C++進行編譯時返回: ld: error: undefined symbol 的錯誤,進行了解決。 編譯環(huán)境突然出現了這個問題,嘗試解決,終于找到一個解決辦法:卸載 ndkVersion = \\\"23.1.7779620\\\" ,再進行重新安裝 。 I removed both NDK versions from Android Studio - Tools - SDK Manager - SDK Tools, reinstalled them

    2024年02月03日
    瀏覽(21)
  • 安裝openssl報錯:openssl: symbol lookup error: openssl: undefined symbol: EVP_mdc2, version OPENSSL_1_1_0

    首先,安裝網上教程對openssl進行了安裝 如果Linux系統沒網,可現在windows上下載壓縮文件,再傳到Linux系統 直接在瀏覽器輸入 https://www.openssl.org/source/openssl-1.1.1t.tar.gz 就可以下載下來 然后進行安裝 安裝完成后執(zhí)行 驗證是否安裝成功,結果報錯。 網上找了一大推,什么文件復

    2024年01月23日
    瀏覽(19)
  • Keil5報錯:Error: L6218E: Undefined symbol Image$$ARM_LIB_STACK$$ZI$$Limit

    Keil5報錯:Error: L6218E: Undefined symbol Image$$ARM_LIB_STACK$$ZI$$Limit

    Keil5在創(chuàng)建STM32工程文件后編譯報錯: Error: L6218E: Undefined symbol Image$$ARM_LIB_STACK$$ZI$$Limit (referred from startup_armcm4.o). 此處考慮到是鏈接問題,首先點擊“魔術棒” → 在“Target”標簽下 → 勾選“Use MicroLIB” → 點擊”O(jiān)K“,重新編譯。 此時工程報錯: Error: L6218E: Undefined symbol __

    2024年04月22日
    瀏覽(68)
  • Keil 5下出現Error: L6218E: Undefined symbol Delay(unsigned) (referred from main.o).的解決方法

    Keil 5下出現Error: L6218E: Undefined symbol Delay(unsigned) (referred from main.o).的解決方法

    ????????今天在給stm32f407vgt6點燈時,想實現循環(huán)閃爍,于是想從以前的工程中移植一個delay延時函數,移植后編譯時發(fā)現出現錯誤: Error: L6218E: Undefined symbol Delay(unsigned) (referred from main.o).的解決方法 ????????在確定了頭文件Include路徑的包含和.c文件的添加后,想起之前

    2024年02月12日
    瀏覽(33)
  • HAL庫 編譯錯誤:XXX.axf: Error: L6218E: Undefined symbol xxx (referred from xxxx.o)的可能原因之一及解決方法

    HAL庫 編譯錯誤:XXX.axf: Error: L6218E: Undefined symbol xxx (referred from xxxx.o)的可能原因之一及解決方法

    我在學習STM32 HAL庫版本時遇到了這種編譯問題 ?由于是剛開始學習STM32代碼跟例程是一樣的,所以代碼不可能出錯。我去網上尋找答案看到了 (7條消息) (已解決)STM32報錯Error: L6218E: Undefined symbol assert_param (referred from misc.o)._老龍QAQ的博客-CSDN博客 于是按照他的方法試驗了一下

    2024年02月11日
    瀏覽(153)
  • 如何用MASM32開發(fā)Windows應用程序

    如何用MASM32開發(fā)Windows應用程序

    提醒:以下內容僅做參考,可自行發(fā)散。在發(fā)布作品前,請把不需要的內容刪掉。 IT技術日異月異,無論是初學者還是有經驗的專業(yè)人士,都需要與時俱進,不斷學習新技術。在學習一門新的IT技術時,都需要采取一種系統性的學習方法。作為一名技術er,當我想用MASM32開發(fā)

    2024年02月08日
    瀏覽(24)
  • Visual Studio+MASM32寫匯編程序——安裝和環(huán)境配置說明

    Visual Studio+MASM32寫匯編程序——安裝和環(huán)境配置說明

    寫在前面: 如果你之前使用的是Visual Studio 2022(其他版本不清楚,如果是2017版本應該也是行的,如果有uu成功,也可以分享自己的經驗),那么建議你立即卸載重新安裝(血淚教訓,網上能找到的教程基本上都不能解決問題)。 2022版本可能會出現的問題: MSB3721 命令“ml6

    2024年01月18日
    瀏覽(38)
  • Undefined symbols for architecture arm64

    Undefined symbols for architecture arm64

    解決問題之前,先了解清晰涉及到的知識點: iOS支持的指令集包含:armv6、armv7、armv7s、arm64,在項目TARGETS----Build Settings---Architecturs 可以修改對應的指令集,目前Standard Architectures(arm64, armv7)? XCode中可設置: 1、Architectures將制定項目將支持哪些指令集 2、Build Active Architecture

    2024年02月08日
    瀏覽(24)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包