解决MASM32代码汇编出错: error A2181: initializer must be a string or single item

简介: 解决MASM32代码汇编出错: error A2181: initializer must be a string or single item

最近用MASM32编程更新SysInfo,增加对IPv6连接信息的收集,使用到了

typedef struct _MIB_TCP6ROW_OWNER_MODULE {
  UCHAR         ucLocalAddr[16];
  DWORD         dwLocalScopeId;
  DWORD         dwLocalPort;
  UCHAR         ucRemoteAddr[16];
  DWORD         dwRemoteScopeId;
  DWORD         dwRemotePort;
  DWORD         dwState;
  DWORD         dwOwningPid;
  LARGE_INTEGER liCreateTimestamp;
  ULONGLONG     OwningModuleInfo[TCPIP_OWNING_MODULE_SIZE];
} MIB_TCP6ROW_OWNER_MODULE, *PMIB_TCP6ROW_OWNER_MODULE;

typedef struct _MIB_TCP6TABLE_OWNER_MODULE {
  DWORD                    dwNumEntries;
  MIB_TCP6ROW_OWNER_MODULE table[ANY_SIZE];
} MIB_TCP6TABLE_OWNER_MODULE, *PMIB_TCP6TABLE_OWNER_MODULE;

使用继续更新完善: C++ 结构体代码转MASM32代码

将它们转换为MASM32的定义:

;typedef struct _MIB_TCP6ROW_OWNER_MODULE {
;  UCHAR         ucLocalAddr[16];
;  DWORD         dwLocalScopeId;
;  DWORD         dwLocalPort;
;  UCHAR         ucRemoteAddr[16];
;  DWORD         dwRemoteScopeId;
;  DWORD         dwRemotePort;
;  DWORD         dwState;
;  DWORD         dwOwningPid;
;  LARGE_INTEGER liCreateTimestamp;
;  ULONGLONG     OwningModuleInfo[TCPIP_OWNING_MODULE_SIZE];
;} MIB_TCP6ROW_OWNER_MODULE, *PMIB_TCP6ROW_OWNER_MODULE;
 
MIB_TCP6ROW_OWNER_MODULE STRUCT
  ucLocalAddr     UCHAR 16 dup (?) 
  dwLocalScopeId  DWORD ?
  dwLocalPort     DWORD ?
  ucRemoteAddr  UCHAR 16 dup (?)
  dwRemoteScopeId DWORD ?
  dwRemotePort  DWORD ?
  dwState         DWORD ?
  dwOwningPid     DWORD ?
  liCreateTimestamp LARGE_INTEGER <>
  OwningModuleInfo  ULONGLONG TCPIP_OWNING_MODULE_SIZE dup(?)
MIB_TCP6ROW_OWNER_MODULE ENDS

PMIB_TCP6ROW_OWNER_MODULE typedef ptr MIB_TCP6ROW_OWNER_MODULE

;typedef struct _MIB_TCP6TABLE_OWNER_MODULE {
;  DWORD                    dwNumEntries;
;  MIB_TCP6ROW_OWNER_MODULE table[ANY_SIZE];
;} MIB_TCP6TABLE_OWNER_MODULE, *PMIB_TCP6TABLE_OWNER_MODULE;
 
MIB_TCP6TABLE_OWNER_MODULE STRUCT
  dwNumEntries DWORD  ?
    table        MIB_TCP6ROW_OWNER_MODULE ANY_SIZE dup(<?>)
MIB_TCP6TABLE_OWNER_MODULE ENDS 

PMIB_TCP6TABLE_OWNER_MODULE typedef ptr MIB_TCP6TABLE_OWNER_MODULE

但是程序代码在汇编时出错:

error A2181: initializer must be a string or single item

image.png 第175行代码就位于MIB_TCP6TABLE_OWNER_MODULE 结构体定义代码中:

MIB_TCP6TABLE_OWNER_MODULE STRUCT                          ;173
  dwNumEntries DWORD  ?                                   ;174
    table        MIB_TCP6ROW_OWNER_MODULE ANY_SIZE dup(<?>) ;175
MIB_TCP6TABLE_OWNER_MODULE ENDS                             ;176

这个定义 与  MASM32编写TcpStatC再进阶 显示PID和对应进程说明符 中的

 
MIB_TCPTABLE_OWNER_MODULE struct
    dwNumEntries DWORD ?
    table        MIB_TCPROW_OWNER_MODULE ANY_SIZE dup(<?>)
MIB_TCPTABLE_OWNER_MODULE ends

是类似的,所以先检查了MIB_TCP6ROW_OWNER_MODULE 结构体代码定义,没有发现问题。

table        MIB_TCPROW_OWNER_MODULE ANY_SIZE dup(<?>)

这行代码本身。结构体一般有多个成员, 初始值 <?> 这种写法,用一个?号可能不妥。

于是把代码改成

table        MIB_TCPROW_OWNER_MODULE ANY_SIZE dup(<>)


这次代码顺利汇编完成。

目录
打赏
0
0
0
0
57
分享
相关文章
C++ String揭秘:写高效代码的关键
在C++编程中,字符串操作是不可避免的一部分。从简单的字符串拼接到复杂的文本处理,C++的string类为开发者提供了一种更高效、灵活且安全的方式来管理和操作字符串。本文将从基础操作入手,逐步揭开C++ string类的奥秘,帮助你深入理解其内部机制,并学会如何在实际开发中充分发挥其性能和优势。
【YashanDB 知识库】导入数据时报错:YAS-00008 type convert error:literal does not match format string
【YashanDB 知识库】导入数据时报错:YAS-00008 type convert error:literal does not match format string
【YashanDB知识库】导入数据时报错:YAS-00008 type convert error:literal does not match format string
【YashanDB知识库】导入数据时报错:YAS-00008 type convert error:literal does not match format string
从代码到k8s部署应有尽有系列-java源码之String详解
本文详细介绍了一个基于 `gitlab + jenkins + harbor + k8s` 的自动化部署环境搭建流程。其中,`gitlab` 用于代码托管和 CI,`jenkins` 负责 CD 发布,`harbor` 作为镜像仓库,而 `k8s` 则用于运行服务。文章具体介绍了每项工具的部署步骤,并提供了详细的配置信息和示例代码。此外,还特别指出中间件(如 MySQL、Redis 等)应部署在 K8s 之外,以确保服务稳定性和独立性。通过本文,读者可以学习如何在本地环境中搭建一套完整的自动化部署系统。
92 0
神秘代码世界惊现高效秘籍!究竟是什么让汇编语言编程如此强大?快来一探究竟!
【8月更文挑战第31天】《代码之美:探索高效汇编语言编程的最佳实践》介绍了汇编语言在系统内核、嵌入式系统及高性能应用中的不可替代作用。书中强调了深入理解处理器架构、提升代码可读性、优化算法与数据结构及有效利用寄存器等最佳实践的重要性。通过具体示例,如在 x86 架构下实现高效的加法函数,展示了如何运用这些技巧编写出既高效又可靠的汇编代码,充分展现了汇编语言的独特魅力及其在现代软件开发中的价值。
91 0
【震撼揭秘!】程序员绝不会告诉你的秘密:掌握汇编语言调试,轻松从软件故障中全身而退——透视代码底层,成为Bug猎人!
【8月更文挑战第31天】《调试的艺术:如何利用汇编语言追踪和解决软件问题》探讨了使用汇编语言进行高效调试的方法。无论是初学者还是资深开发者,面对棘手的 bug 时,高级语言的信息往往不足。文章通过具体示例展示如何通过汇编代码定位问题,如 C 语言中数组求和函数的崩溃问题。借助 `gcc -S` 生成的汇编代码和 GDB 调试器,可以深入理解程序行为,从而更准确地解决问题。掌握这一技能,将使你在复杂问题面前更加从容。
104 2
【原创】DOS下TSR程序的汇编演示代码2--黑屏保护程序
【原创】DOS下TSR程序的汇编演示代码2--黑屏保护程序
【原创】DOS下TSR程序的汇编演示代码1--自动按键程序
【原创】DOS下TSR程序的汇编演示代码1--自动按键程序
|
8月前
|
51单片机汇编语言流水灯代码
51单片机汇编语言流水灯代码
205 1
Xamarin 竟在游戏开发领域大胆探索,跨平台优势与强大功能结合,开启游戏开发新潮流!
【8月更文挑战第31天】《Xamarin在游戏开发领域的探索》介绍了Xamarin作为跨平台开发框架,在移动游戏开发中的应用。它利用C#语言的优势,提供高效的开发体验,并结合各平台图形库实现高质量画面。本文还展示了Xamarin如何简化游戏逻辑处理、支持多线程编程及与Unity等工具集成,提升游戏质量和开发效率。此外,Xamarin还支持热更新和多平台发布,进一步优化游戏维护流程。
99 0

热门文章

最新文章

下一篇
oss创建bucket
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等