首页 > 编程语言 >解决MASM32代码汇编出错: error A2181: initializer must be a string or single item

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

时间:2023-09-04 18:04:58浏览次数:36  
标签:string MIB MODULE initializer TCP6ROW A2181 OWNER DWORD TCP6TABLE


最近用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

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

第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(<>)

这次代码顺利汇编完成

标签:string,MIB,MODULE,initializer,TCP6ROW,A2181,OWNER,DWORD,TCP6TABLE
From: https://blog.51cto.com/endurer/7353791

相关文章

  • 通过class字节码了解StringBuilder拼接字符串效率高的原因
    挺久没具体去看了,随手记一下吧。Stringstr="";for(inti=0;i<10;i++){str+=i;}这样的拼法,实际上从分析class的字节码来看,是在循环里面newStringBuffer对象,相当的耗。通过这样的分析,给新人解释,是最有效的了。还能提升一些了解java底层知识的兴趣。——《Java编程思......
  • string
    StringString全局对象是一个用于字符串或一个字符序列的构造函数。字符串字面量采取以下形式:'stringtext'"stringtext""中文/汉语""español""English""हिन्दी""العربية""português""বাংলা""русский&......
  • 【Azure Service Bus】使用Spring Cloud integration示例代码,为多个 Service Bus的连
    问题描述查看ServiceBus的Java示例代码,发现使用SpringCloudIntegration,配置Application.yaml可以连接到两个ServiceBus。但代码中没有使用ConnectionString属性配置服务连接。 那么,是否可以直接在此添加connection-string配置后,不用修改代码就可以连接到ServiceBus服务......
  • 【Azure Service Bus】使用Spring Cloud integration示例代码,为多个 Service Bus的连
    问题描述查看ServiceBus的Java示例代码,发现使用SpringCloudIntegration,配置Application.yaml可以连接到两个ServiceBus。但代码中没有使用ConnectionString属性配置服务连接。 那么,是否可以直接在此添加connection-string配置后,不用修改代码就可以连接到ServiceBu......
  • 记录:阅读 C# 中string的源码
    stringUnsafe.AddUnsafe.Add是string中一个常用的方法,它不是用于向某个对象添加元素的,而是用于计算字符在内存中的偏移位置。Split是如何运行的string的split操作是直接进行内存操作实现的,这样可以在不创建大量新字符串副本的情况下,从原始字符串中提取子字符串。它使用......
  • js 压缩库 LZString,压缩率大约 10%
    1//Copyright(c)2013Pieroxy<[email protected]>2//Thisworkisfree.Youcanredistributeitand/ormodifyit3//underthetermsoftheWTFPL,Version24//FormoreinformationseeLICENSE.txtorhttp://www.wtfpl.net/5//6......
  • python f-string
    python|f-string_cuckooman的博客-CSDN博客>>>a='hello'>>>b=12.23456>>>f'{a}''hello'>>>F'{a}'#f支持大写和小写混用'hello'>>>f'{a=}'#直接以a=的形式打印......
  • IDEA cant resolve symbol String
    问题:在做新项目时报IDEAcantresolvesymbolString(IDEA不能识别String类型)      一脸懵,不光这个这样,其他的第三方的包也没法导进来猜测:刚开始以为是maven依赖没用导进来,后来发现String类竟然也不行,     于是猜测是JDK的问题,重新设置了一下JDK,发现也不......
  • StringBuilder类分享(2)
    一、StringBuilder说明StringBuilder是一个可变的字符序列。这个类提供了一个与StringBuffer兼容的API,但不保证同步,即StringBuilder不是线程安全的,而StringBuffer是线程安全的。显然,StringBuilder要运行的更快一点。这个类被设计为在字符串缓冲区所在的地方作为StringBuffer的临时......
  • TStringList 常用方法与属性
    TStringList常用方法与属性:2var3List:TStringList;4i:Integer;5begin6List:=TStringList.Create;7List.Add('Strings1');{添加}8List.Add('Strings2');9List.Exchange(0,1);{置换}10List.Insert(0......