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

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

时间:2023-08-28 12:34:33浏览次数:40  
标签: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_程序代码

第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/7262186

相关文章

  • 20230516 java.lang.StringBuilder
    介绍java.lang.StringBuilderpublicfinalclassStringBuilderextendsAbstractStringBuilderimplementsjava.io.Serializable,Comparable<StringBuilder>,CharSequence此类提供与StringBuffer兼容的API,但不保证线程安全append方法总是在构建器的末尾添加这些字符;......
  • System.ArgumentNullException:“String 引用没有设置为 String 的实例。
      使用c#控制器,获取前端的字段值的时候出现该问题:System.ArgumentNullException:“String引用没有设置为String的实例。Arg_ParamName_Name” ......
  • String(字符串)
    String(字符串)字符串可以进行追加操作使用append命令127.0.0.1:6379>127.0.0.1:6379>setv1hello#添加一个键v1OK127.0.0.1:6379>EXISTSv1 #查看v1是否存在(integer)1127.0.0.1:6379>getv`1(nil)127.0.0.1:6379>getv1#读取v1的值"hello"127.0.0.1:6379>APPE......
  • 2023-08-26 关于JSON.stringify会过滤调undefined值的问题 ==》在格式化之前先用type
    今天传参给后端的时候就发现了这么个问题,明明对象里面有这个字段a,但是打印出来死活没有,去掉json格式化后才发现是该值a为undefined,遂百度,故得知该值会被过滤掉。被过滤掉的原因是因为undefined值不符合JSON.stringify的规范。......
  • 228. 汇总区间(stringstream)
    字符串处理:动态规划,双指针,栈,计数,字符串流 本题要将一个格式化的字符串容器作为答案,可利用双指针和stringstream来进行操作classSolution{public:vector<string>summaryRanges(vector<int>&nums){intn=nums.size();intl=0,r=0;......
  • stoi(),atoi() ,to_string
    stoi(),atoi(),to_string这三个函数都是对字符串处理的函数,前两者是将字符串转化为十进制int类型,最后一个是将十进制类型int、double等转化为string头文件都是:#include<cstring>stoi()和atoi()这两个功能虽然都是将字符串转化为int类型,但是还是有区别的,stoi的参数是con......
  • 关于js中的toLocaleDateString()方法
    toLocaleDateString()方法是JavaScriptDate对象的一个内建方法,它将日期转换为符合特定地区习惯的字符串格式。基本用法:如果没有传入任何参数,toLocaleDateString()会根据浏览器的默认语言环境返回一个日期字符串。例如:letdate=newDate();console.log(date.toLocaleDate......
  • java Object转String的4种实现方式
    1.情景展示在实际开发过程中,经常会遇到将Object类型强转成String类型。Object转String一共有几种实现方式?2.具体分析共有三种实现方式。3.解决方案以Map<String,Object>进行举例说明。Map<String,Object>map=newHashMap<>(3);map.put("k1","v1");map.put("k2",......
  • java开发中常见的String对象
    String对象加载场内存方式有两种,一种是直接使用“”号创建的加载内存时会会把该字符串直接加载到字符常量中去,并且后文中出现相同使用“”号定义的常量时不会再在内存中创建直接使用第一次创建的字符串,另一种直接使用构造器创建的会创建出一个新的字符串,String常见构造器有String(b......
  • error: undefined reference to `cv::imread(cv::String const&, int)' 解决方法
    方法1原文链接:https://blog.csdn.net/WhiteLiu/article/details/72901520编译时出现下列错误:undefinedreferenceto'cv::imread(cv::Stringconst&,int)'undefinedreferenceto'cv::String::deallocate()'undefinedreferenceto'cv::imread(cv::S......