问题标签 [masm64]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
65 浏览

assembly - 在 MASM64 中是否有将 16 位立即数压入堆栈的指令?

在 masm64 中,如果我编写指令 Push 0,它将在堆栈中推送一个 64 位立即数(即 esp=esp-8)。

所以如果我只想推一个 16 位立即数来设置 EFLAGS,我不知道只好写机器码,比如:

该程序有效,但我想知道 MASM64 中是否有此指示。谢谢你。

0 投票
1 回答
272 浏览

c# - 如何在 C# 中调用 x64 汇编程序

我正在做一个项目,目前有以下结构:

  1. C# WPF 项目包含用户界面以及对外部方法的调用。
  2. 包含算法的 C++ DLL 项目。
  3. 包含算法的 ASM DLL 项目。

为简单起见,我们假设该算法不带参数并返回两个预定义数字的总和。

这是C++(第二个)项目中的函数签名和实现:

以下是我在 C# 中调用函数的方式:

这工作得很好——在 C# 中调用函数返回值 3,一切正常,没有抛出异常。

但是,我现在正在努力在 C# 代码中调用 ASM 过程。我已经看到(并在一定程度上测试了自己)不可能直接在 C# 代码中调用 MASM DLL。但是,我听说可以在 C++ 中调用 ASM 并在 C# 中调用该函数。

1.我的第一个问题是——实际上可以直接在 C# 中调用 ASM 代码吗?当我尝试这样做时,我得到一个异常,基本上说二进制代码不兼容。
2、我曾尝试使用C++间接调用ASM DLL,虽然没有异常,但返回的值是“随机的”,就像在内存中留有余数一样,例如:-7514271。这是我做错了什么,还是有其他方法可以实现这一目标?

下面是在 C++ 中调用 ASM 的代码:

这里,在 C# 中调用 C++ 的代码:

如果需要,这里是 ASM 代码MyProc1
Main.asm:

主要定义:

0 投票
0 回答
38 浏览

c++ - 在文件 .asm 中使用全局变量

我有文件 main.cpptest.asm

test.asm

i我如何使用文件中的变量test.asm?我使用 Visual c++ 编译器 2017。

0 投票
1 回答
106 浏览

assembly - 如何在真正的 64 位模式下(使用 LARGEADDRESSAWARE)组装和链接 ml64?

我正在使用 Microsoftml64和 Windows 10 上的链接将旧的 masm 程序改造成真正的 64 位 x64 模式。链接器在具有 REX.W 前缀的代码中给出错误。

链接器的/LARGEADDRESSAWARE选项听起来像是完整的 64 位支持的正确选择,但它抱怨。 /LARADDRESSAWARE:NO有效,但从我读过的文档来看,它似乎是 32 位程序在“兼容模式”下超过 2GB 到 3GB 的一个选项。MS 文档对此并不清楚。

.data我也认为这.code可能是错误的使用方法,因为 MS ml64 文档说它适用于 32 位代码,但没有说明如何处理 64 位代码。但我似乎无法找到一种不使用.data并使.code事情正常的方法。无论如何,我不想因缺少链接或 ml64 中的某些选项而被限制为 4GB。我已将问题简化为最简单的示例。以下汇编和链接:

下面是 test.asm 程序:

0 投票
0 回答
23 浏览

debugging - 我的 MASM 代码在调试后显示 3 个错误,但我不知道如何修复它们。有人能帮我吗?

按调试后,我有 3 个错误: 1>main.obj:错误 LNK2019:未解析的外部符号 _printf 在函数 _main 中引用 1>main.obj:错误 LNK2019:未解析的外部符号 _scanf 在函数 _main 1>LINK 中引用:错误 LNK2001 : 未解析的外部符号 _mainCRTStartup

我还想补充一点,我从 Builder Dependencies 中选择了 masm,并在 Linker Input 中添加了库 msvcrt.lib 和 legacy_stdio_definitions.lib。你知道可能是什么问题吗?

0 投票
0 回答
42 浏览

assembly - 如何编译带有段块错误的汇编代码

我想知道如何编译这个汇编代码。
我使用了 ml64 汇编程序,但它显示错误:
ml64.exe" /c /coff kernel-droid.asm
我也尝试指定条目,但它不起作用。

错误 A2008:语法错误:在指令中错误 A2008:语法错误:部分错误 A2008:语法错误:全局错误 A2034:必须在段块中

0 投票
0 回答
28 浏览

c# - 如何将 ref byte[] 从 C# 传递给从 DLL 文件加载的 MASM64 过程,以便它可以在 masm 代码中从 C# 修改原始数组

例如,masm 过程有 2 个参数,其中包含类似于指向原始字节数组地址的指针和数组长度的东西。它将所有值更改为 0 并返回数组的最后一个值(不是数组)。

在 C# 中有一些类从 .dll 文件加载 masm 代码并以某种方式传递给该方法,类似于 ref byte[] 和数组长度。

我在互联网上找到的东西让我想到了这样的事情:

MASM 就像:

我只是找不到带有 ref 的 C# 数组对象如何将其更改为指针,因此它可以作为内存地址工作,因此可以将其作为参数传递给 masm,然后在 masm 中修改地址指向的值。

简单:将 C# 数组作为原始数组和数组长度发送到 dll masm64 过程以修改并返回一些值

0 投票
0 回答
22 浏览

masm64 - CreateProcessA 函数因 MASM64 中的访问冲突而失败 (ml64.exe)

非常类似的问题,如CreateProcessA 函数在 MASM64 (ml64.exe) 中不起作用,但在我的情况下,我认为它不适用于 64x 中的对齐或指针数据类型。所以代码是

错误 - kernelbase.dll 中的访问冲突

movaps xmmword ptr ss:[rsp+C0],xmm0

有人可以澄清我的代码有什么问题吗?

0 投票
2 回答
68 浏览

assembly - 汇编程序上的消息框调用问题

这是代码(适用于masm64)

该程序的工作方式如下:它解决了数学问题 f/e - b/d - a/c 并将结果发送到消息框,但它不起作用。它通常在没有调用计数的情况下工作,但我需要这部分代码。我该如何解决?

0 投票
1 回答
90 浏览

assembly - 如何在 XMM 中水平求和有符号字节

我正在 x64 程序集中编写一些代码并使用 SIMD。

xmm15我在寄存器中有 9 个字节。为简单起见,让我们看一下以下代码:

如何获得其中元素的水平总和xmm15

我试过haddps了,但它似乎只适用于无符号 DWORD,而且我找不到对字节进行操作的替代方法。

在这种情况下,我可以使用哪些 SSE 指令来对有符号字节求和?