压栈顺序是反向(从右往左)的,但正因为是反向压栈,所以第一个参数反而离栈顶(ESP)最近。

触及了汇编语言中“压栈方向”与“内存增长方向”最容易混淆的地方。

结论先行:你是对的,压栈顺序是反向(从右往左)的,但正因为是反向压栈,所以第一个参数反而离栈顶(ESP)最近。

为了让你彻底理解,我们拆解一下Call发生时栈内部到底发生了什么:

1. 压栈的过程 (从右往左)

假设 VB6 执行sum(a, b),在汇编层面,stdcall约定会按照代码中参数从右到左的顺序进行PUSH

  1. PUSH [Sum_result 地址]:这是隐藏的最后一个参数(用于接收返回值)。

  2. PUSH [b 的地址]:这是ByRef b

  3. PUSH [a 的值]:这是ByVal a

  4. PUSH [vb6_class_this]:这是隐藏的第一个参数(this指针)。

  5. CALL [函数地址]:执行CALL的瞬间,CPU 会自动把返回地址压入栈顶。


2. 内存布局 (执行时的状态)

由于栈在 x86 架构中是向低地址增长的(即越晚PUSH的数据,内存地址越小),所以当函数代码的第一行开始执行时,栈顶指针ESP指向的是最后进入的“返回地址”。

我们来看内存中的排列(假设当前ESP0x1000):

内存地址偏移量存储内容压栈顺序
0x1000[ESP]返回地址最后进入 (CALL 指令产生)
0x1004[ESP + 4]vb6_class_this倒数第二次进入 (第一个参数)
0x1008[ESP + 8]a倒数第三次进入 (第二个参数)
0x100C[ESP + 12]ptr b...
0x1010[ESP + 16]ptr Sum_result最早进入 (最后一个参数)

总结口诀:越是函数签名里靠左(前面)的参数,越是晚压栈,也就离栈顶越近。


3. 修改跳板逻辑的验证

因为我们要修改的是第一个参数 vb6_class_this,而它就在 [ESP + 4] 的位置。所以我们的汇编指令:

MOV DWORD PTR [ESP + 4], csharpClassPtr

是精准命中目标的。

4. 关于你提到的“无返回值”

在 VB6 里,你定义的是Function,但在底层,VB6 期望这个函数符合 COM 标准:

  1. 真正的返回值是通过EAX寄存器返回的HRESULT0代表成功)。

  2. 代码里的返回值是通过栈上最后一个参数ptr Sum_result指向的内存写入的。

如果你的 C# 函数定义为void,可能会导致EAX寄存器残留随机值,VB6 可能会误认为收到了一个错误代码(非 0),从而抛出“运行时错误”。

建议:C# 侧一定要返回0(int),哪怕你不需要计算结果。

C#

// C# AOT 侧 [UnmanagedCallersOnly(CallConvs = new[] { typeof(CallConvStdcall) })] public static int MyCsharpSum(IntPtr csharpClassPtr, int a, IntPtr b, IntPtr result) { // 逻辑... return 0; // 必须返回 0 (S_OK),否则 VB6 会报异常 }

下一步:

既然你是在做虚拟类挂载,是否需要我帮你写一个支持动态 Args 数量的跳板生成器?这样你只需要传入参数个数,它就能自动计算出 ptr Sum_result 在栈上的偏移位置。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1129283.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

慢 SQL 优化大全:从定位到实战,Spring Boot + Java 开发者必看!

视频看了几百小时还迷糊?关注我,几分钟让你秒懂! 在实际开发中,慢 SQL 是性能杀手的第一名!一个没加索引的 WHERE 条件,可能让接口从 10ms 变成 10s;一条全表扫描的 JOIN,可能直接拖…

CVE-2025-61618 NR调制解调器远程拒绝服务漏洞分析

CVE-2025-61618 - NR调制解调器拒绝服务 概述 漏洞时间线 描述 在NR调制解调器中,由于输入验证不当,可能导致系统崩溃。这可能导致远程拒绝服务,且无需额外的执行权限。 信息 发布日期: 2025年12月1日 上午8:15 最后修改日期&…

游戏素材生成实战:Z-Image-Turbo快速产出角色原画方案

游戏素材生成实战:Z-Image-Turbo快速产出角色原画方案 在游戏开发中,角色原画是构建世界观与视觉风格的核心环节。传统手绘流程耗时长、成本高,尤其在原型设计阶段,频繁迭代对美术资源的响应速度提出了极高要求。随着AI图像生成技…

设计客户咨询智能回复程序,基于常见问题规则库,自动匹配答案并回复。

客户咨询智能回复系统一、实际应用场景与痛点应用场景现代企业客户服务面临海量咨询:- 电商客服:订单查询、物流跟踪、退换货、商品咨询- 银行客服:账户查询、转账问题、信用卡服务、理财产品- 电信客服:套餐咨询、话费查询、故障…

从 “模板卡壳” 到 “一键成稿”:Paperzz 开题报告如何打通硕士开题的全流程

Paperzz-AI官网免费论文查重复率AIGC检测/开题报告/文献综述/论文初稿 paperzz - 开题报告https://www.paperzz.cc/proposal 一、硕士开题报告:不是 “走流程”,是 “研究能否落地的生死关” 对硕士研究生而言,开题报告不是 “随便填的模板…

一张手绘流程图,胜过10页PPT:制造业销售的现场说服力

在制造业的销售工作中,很多销售人员都习惯用精心制作的PPT来展示产品的优势、技术参数和成功案例,然而在实际拜访客户,尤其是面对车间主管、工程师等一线决策者时,很多时候一张简单的手绘流程图,比那些华丽的演示文稿更…

是否需要微调模型?M2FP预训练权重覆盖常见人体姿态场景

是否需要微调模型?M2FP预训练权重覆盖常见人体姿态场景 📖 项目简介:M2FP 多人人体解析服务 在计算机视觉领域,人体解析(Human Parsing) 是一项细粒度的语义分割任务,目标是将人体图像中的每个像…

Paperzz 打头阵:7 款 AI 开题报告工具,把 “开题焦虑” 变成 “一键通关”

Paperzz-AI官网免费论文查重复率AIGC检测/开题报告/文献综述/论文初稿 paperzz - 开题报告https://www.paperzz.cc/proposal 当 “开题报告改 5 版还被导师打回”“PPT 排版熬到凌晨” 成为学术入门的 “标配难题”,AI 工具正在把 “开题” 从 “体力战” 变成 “…

cuda不可用时的选择:M2FP CPU版填补无卡场景空白

cuda不可用时的选择:M2FP CPU版填补无卡场景空白 在深度学习应用日益普及的今天,GPU 已成为多数视觉模型推理的标配硬件。然而,在实际落地过程中,大量边缘设备、开发测试环境或低成本部署场景中并不具备独立显卡支持,甚…

Z-Image-Turbo风格关键词库整理:摄影/油画/动漫全覆盖

Z-Image-Turbo风格关键词库整理:摄影/油画/动漫全覆盖 阿里通义Z-Image-Turbo WebUI图像快速生成模型 二次开发构建by科哥 运行截图本文为Z-Image-Turbo WebUI的风格化提示词系统深度解析与实战指南。基于阿里通义实验室发布的Z-Image-Turbo模型,结合Dif…

智慧健身房落地案例:M2FP驱动AI教练动作对比功能

智慧健身房落地案例:M2FP驱动AI教练动作对比功能 在智能健身设备快速迭代的今天,如何实现精准、实时且低成本的人体动作分析,成为智慧健身房系统设计的核心挑战。传统姿态估计算法多依赖关键点检测,在多人场景下易受遮挡、光照变化…

M2FP是否依赖CUDA?答案是否定的,纯CPU环境完美运行

M2FP是否依赖CUDA?答案是否定的,纯CPU环境完美运行 🧩 M2FP 多人人体解析服务 (WebUI API) 项目背景与核心价值 在当前计算机视觉领域,人体解析(Human Parsing) 是一项关键的细粒度语义分割任务&#xff0…

低成本实现虚拟换装:M2FP镜像部署+Flask WebUI快速集成

低成本实现虚拟换装:M2FP镜像部署Flask WebUI快速集成 🧩 M2FP 多人人体解析服务 (WebUI API) 项目背景与技术价值 在虚拟试衣、AR换装、数字人生成等应用场景中,精准的人体语义分割是核心前置能力。传统方案依赖昂贵的GPU服务器和复杂的环境…

Paperzz 开题报告:把 “开题焦虑” 变成 “1 小时出 PPT + 报告” 的学术爽感

Paperzz-AI官网免费论文查重复率AIGC检测/开题报告/文献综述/论文初稿 paperzz - 开题报告https://www.paperzz.cc/proposal 开题阶段的崩溃,往往是 “报告写不明白,PPT 逻辑混乱” 的双重夹击 —— 既要凑够研究背景、文献综述、研究方法的内容&#…

【毕业设计】SpringBoot+Vue+MySQL 教师工作量管理系统平台源码+数据库+论文+部署文档

摘要 随着高校规模的不断扩大和教学管理的日益复杂化,教师工作量管理成为高校教务工作中的重要环节。传统的手工记录和Excel表格管理方式效率低下,容易出错,且难以实现数据的实时共享和统计分析。教师工作量涉及教学、科研、社会服务等多个维…

paperzz 开题报告:从文字到 PPT,1 个工具搞定开题答辩的 “全流程武器”

Paperzz-AI官网免费论文查重复率AIGC检测/开题报告/文献综述/论文初稿 paperzz - 开题报告https://www.paperzz.cc/proposal 开题答辩是学术研究的 “第一道关卡”—— 既要拿出逻辑严谨的开题报告,又得准备清晰直观的 PPT,不少研究者光是打磨这两项材…

华为鸿蒙HarmonyOS:超越iOS,中国第二大操作系统的崛起之路

开发者平台 在科技飞速发展的今天,操作系统的竞争日益激烈。近日,全球知名研究机构Counterpoint发布的最新数据引发了业界的广泛关注——华为自主研发的鸿蒙HarmonyOS在中国市场的份额实现了惊人的增长,从2023年一季度的8%飙升至2024年一季度…

地址数据对齐难?阿里开源MGeo镜像+单卡4090D快速部署解决显存瓶颈

地址数据对齐难?阿里开源MGeo镜像单卡4090D快速部署解决显存瓶颈 在城市计算、物流调度、地图服务等场景中,地址数据的实体对齐是构建统一空间知识图谱的关键环节。然而,中文地址存在表述多样、缩写习惯差异、层级结构不一致等问题——例如“…

Z-Image-Turbo汉服人物造型生成实践

Z-Image-Turbo汉服人物造型生成实践 项目背景与技术选型动机 近年来,AI图像生成技术在文化创意领域展现出巨大潜力,尤其在传统服饰复原、数字人设创作等方向。汉服作为中华传统文化的重要载体,其视觉表达对细节、色彩和构图有极高要求。传统…

Z-Image-Turbo电竞赛事宣传:战队海报、对战场景图创作

Z-Image-Turbo电竞赛事宣传:战队海报、对战场景图创作 阿里通义Z-Image-Turbo WebUI图像快速生成模型 二次开发构建by科哥 在AI内容生成技术飞速发展的今天,视觉创意的生产效率正被重新定义。阿里通义实验室推出的 Z-Image-Turbo 模型,作为…