excel - Excel 4.0 宏不适用于 64 位 Excel,并且“VirtualAlloc”返回 8 字节中的 4 字节
问题描述
我正在尝试分析https://outflank.nl/blog/2018/10/06/old-school-evil-excel-4-0-macros-xlm中介绍的 Excel 4.0 宏示例。
在测试时,我注意到它在 32 位 Excel 上运行良好,但在 64 位上无法正常运行。
最终,我找到了原因,那就是:VirtualAlloc
函数总是返回 8 个字节中的 4 个字节。
这里的实现:
= REGISTER("Kernel32", "VirtualAlloc", "JJJJJ", "valloc", , 1, 9)
= valloc(0, 64 * 1024, 4096, 64)
如何解决?
解决方案
您已将返回类型声明为“J”,它只有 32 位/4 字节长。
您可以尝试“D”,它是 8 字节长,然后使用 mem 复制函数将其复制到一个 8 字节变量,或者您可以尝试放入一个 dummy 参数,并尝试从 dummy 恢复接下来的 4 个字节范围。
当您错误地声明外部调用时,Excel 不会崩溃,因为 Excel 在每次调用后都会进行堆栈检查,并确保堆栈已正确还原。
或者可能是 64 位 Excel 在 XLM 宏中支持 64 位长,使用一些新的类型声明——我还没有看到,但我想它值得一看。
推荐阅读
- android - 如果卸载应用程序,Firebase 从数据库中删除相关行
- ruby-on-rails - hidden_field_tag 无法传递布尔值
- ubuntu - 将wireshark中的特定字段uniq
- php - 在 laravel 集合中转换
- performance - 这是 CosmosDB 对整数属性的“之间”查询的预期查询性能吗
- postgresql - Postgres`createuser`命令不起作用
- spring-boot - 将sql文件放在spring boot应用程序中的哪个位置以生成H2数据库
- rebol - 红语言事件:结束的对称(未结束)?
- r - 替换列表的分组元素
- prolog - 从某个深度切割 Prolog 中的树