码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • MASM32v11编程调用Process32First失败: 程序发出命令,但命令长度不正确


    一位网友发来邮件反映说用MASM32写GUI版的netstat-NetViewG.exe不能在Windows 10上运行。

    试了一下,NetViewG.exe在Windows 10上运行确实会给出一个出错提示,不能在窗口里显示协议统计信息和当前 TCP/IP 网络连接信息。

    原因是NetViewG.exe是2008年写的,所使用的API函数 AllocateAndGetTcpExTableFromStack和AllocateAndGetUdpExTableFromStack, 从Windows 7开始iphlpapi.dll已经不再支持,也就是说NetViewG.exe只能在Windows XP上正常运行。

    利用周末空闲更新一下吧。

    找了一下,只找到NetViewC.exe的的源代码。

    重新汇编连接NetViewC,遇到提示:

    R:\masm32\works\netView>\MASM32\BIN\Buildc.bat 3
    Microsoft (R) Macro Assembler Version 6.14.8444
    Copyright (C) Microsoft Corp 1981-1997.  All rights reserved.

     Assembling: 3.asm

    ***********
    ASCII build
    ***********

    3.asm(256) : error A2006: undefined symbol : Process32First
    3.asm(269) : error A2006: undefined symbol : Process32Next
    _
    Assembly Error
    请按任意键继续. . .


    这两个函数是在MASM32中是在kernel32.inc定义的,怎么会没定义?

    打开kernel32.inc查找:

    Process32FirstW PROTO STDCALL :DWORD,:DWORD
    IFDEF __UNICODE__
      Process32First equ
    ENDIF


    Process32NextW PROTO STDCALL :DWORD,:DWORD
    IFDEF __UNICODE__
      Process32Next equ
    ENDIF


    怎么只有Unicode版本的,没有ANSI版本的?

    那就用Unicode版本的看看,汇编连接顺利完成,但程序运行到Process32First()时返回FALSE,增加以下showErrMsg()来获取出错信息:

    showErrMsg proc
        local dwMsgId: dword
        local lpBuf  : dword

        invoke GetLastError
        mov    dwMsgId,eax
        INVOKE FormatMessage, FORMAT_MESSAGE_ALLOCATE_BUFFER \
                + FORMAT_MESSAGE_FROM_SYSTEM, NULL, dwMsgId, 0\
                , ADDR lpBuf, 0, NULL
        invoke StdOut, lpBuf
        invoke LocalFree, lpBuf
        ret
    showErrMsg endp

    得到的出错信息是:

    程序发出命令,但命令长度不正确


    估计是用Unicode版本引发的。

    上MASM32论坛一看,已经有国外网友rsala发现了这个问题,他指出:MASM32 V11版本中的kernel32.inc、Kernel32.lib和kernl32p.inc、kernl32p.lib中的Module32First / Module32Next and Process32First / Process32Next这两对函数信息存在bug。按照Microsoft MSDN,这两对函数的ANSI版本不是Module32FirstA / Module32NextA nor Process32FirstA / Process32NextA,而是 Module32First / Module32Next and Process32First / Process32Next,在程序中调用以上两对函数的ANSI版时将会出现问题。

    热心的网友并且提供了修正的kernel32.inc、Kernel32.lib和kernl32p.inc、kernl32p.lib文件下载,CSDN上的下载地址如下:

    MASM32v11版本中kernel32.inc和Kernel32.lib修正版。-C++文档类资源-CSDN文库

    MASM32v11中的kernl32p.inc和kernl32p.lib存在bug,这是修正后的版本。-C++文档类资源-CSDN文库

  • 相关阅读:
    数据治理-度量指标
    Dubbo: 基于SpringBoot+Dubbo的Provider/Consumer的实践
    基因组组装---Nanopore数据评估(nanoqc和NanoPlot)
    Python错题集-8:AttributeError(找不到对应的对象的属性)
    python -- PyQt5(designer)中文详细教程(四)事件和信号
    MySQL之临时表
    详解MeerEVM:MeerDAG共识下的智能合约执行引擎
    看板系统如何异地电脑手机访问?主机内网ip端口映射域名外网访问
    java计算机毕业设计web企业档案管理系统源码+mysql数据库+系统+lw文档+部署
    Python之面向对象
  • 原文地址:https://blog.csdn.net/Purpleendurer/article/details/126081342
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号