问题标签 [masm32]

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 投票
2 回答
45329 浏览

assembly - 汇编 - .data、.code 和寄存器...?

所以今天早上我发布了一个关于装配的困惑问题,我得到了一些非常真诚的帮助,我真的很感激。

现在我开始着手组装并开始了解它是如何工作的。

我觉得我理解的东西包括堆栈、中断、二进制/十六进制,以及大多数基本操作的一般情况(jmp、push、mov 等)。

我正在努力理解并希望得到帮助的概念如下 - 如果您能解决以下任何问题,这将是一个巨大的帮助:

  1. .data 部分到底发生了什么?是我们声明的那些变量吗?
  2. 如果是这样,我们可以稍后在代码部分声明变量吗?如果不是,为什么不呢?如果是这样,那么我们如何以及为什么使用数据部分?
  3. 什么是寄存器?它与变量相比如何?我的意思是我知道这是一个存储一小部分信息的位置……但这对我来说听起来就像一个变量。
  4. 如何制作数组?我知道这似乎有点随机,但我很好奇我将如何去做这样的事情。
  5. 是否有一个关于每个寄存器应该用于什么的常见做法列表?我仍然没有完全理解它们,但注意到有些人说,例如,应该使用某个寄存器来存储来自过程的“返回值”——是否有一个全面的或至少是信息丰富的此类做法列表?
  6. 我学习汇编的原因之一是为了更好地理解我的高级代码背后发生了什么。考虑到这一点——当我用 C++ 编程时,我经常考虑堆栈和堆。在汇编中,我知道堆栈是什么——“堆”在哪里?

一些信息:我将 masm32 与 WinAsm 一起用作 IDE,并且我正在使用 Windows 7。我以前有很多使用高级语言(如 c++/java)进行编程的经验。


编辑:感谢大家的帮助,像往常一样提供丰富的信息!好东西!最后一件事——我想知道堆栈指针和基指针或 ESP 和 EBP 之间有什么区别。有人可以帮我吗?

编辑:我想我现在明白了...... ESP 总是指向堆栈的顶部。但是,您可以将 EBP 指向任何您想要的位置。ESP 是自动处理的,但您可以使用 EBP 做任何您想做的事情。例如:

在这种情况下,EBP 现在指向持有 4 的地址,但 ESP 现在指向持有 2 的地址。

在实际应用中,6、5 和 4 可能是函数参数,而 3 和 2 可能是该函数中的局部变量。

0 投票
4 回答
2635 浏览

assembly - 为什么每当我尝试使用中断时,我的 masm32 程序就会崩溃?

这是代码:

结果:http: //img705.imageshack.us/img705/3738/resultom.png

“test.exe 已停止工作” - 当它到达中断时总是正确的。

这是我试图使用的中断。它应该简单地退出程序。我尝试过的其他方法包括字符输入/输出等。没有任何效果。

我在 Windows 7 上,使用带有 WinAsm IDE 的 masm32。

有很多很酷的事情似乎我应该能够用中断来做......但是,每当我尝试使用中断时它就会崩溃 - 总是以同样的方式。

这似乎相关并且可能有用:DOS Interrupt in masm x86 assembly crashing

......但我真的无法从中弄清楚任何事情。

有什么建议么?

0 投票
3 回答
3196 浏览

assembly - 从 MASM/MASM64 在编译时检测架构

如果目标体系结构是 I386 或 AMD64,我如何在编译时从 ASM 源文件中检测?

我正在使用 masm(ml.exe)/masm64(ml64.exe) 来组装 file32.asm 和 file64.asm。最好创建一个文件 file.asm,它应该包括 file32.asm 或 file64.asm,具体取决于架构。理想情况下,我希望能够编写如下内容:

此外,如果需要,我可以使用不同的命令行选项运行 ml.exe 和 ml64.exe。

谢谢!

0 投票
2 回答
2944 浏览

visual-c++ - 编译由 VC++ 生成的程序集输出?

我有一个简单的 hello world C 程序并用 /FA 编译它。因此,编译器也会生成相应的汇编列表。现在我想使用 masm/link 从生成的 .asm 列表中组装一个可执行文件。

以下命令行产生 3 个链接器错误:

表明 C 运行时函数未链接到之前生成的目标文件:

asm_test.obj:错误 LNK2001:未解析的外部符号 @__security_check_cookie@4 asm_test.obj:错误 LNK2001:未解析的外部符号 _printf LINK:错误 LNK2001:未解析的外部符号 _wmainCRTStartup asm_test.exe:致命错误 LNK1120:3 个未解析的外部

这是生成的程序集清单

我正在使用最新的 masm32 版本(6.14.8444)。

更新

正如 Cogwheel 所建议的,我INCLUDELIB msvcrt.lib在 asm 源代码中包含了一个。程序编译并创建了一个可执行文件,但链接器会生成一个警告:

msvcrt。忽略

当我启动可执行文件时,C 运行时会生成以下错误:

运行时错误:R6034 应用程序尝试错误地加载 C 运行时库

0 投票
1 回答
309 浏览

assembly - 无法识别高级宏 - 初学者 MASM

这段 MASM 代码有什么问题?

我收到一个错误.endw。我已经进行了一些测试以确保自己做到这一点。汇编告诉我invalid instruction operands

感谢您的时间!

0 投票
1 回答
228 浏览

sdk - 构建 TASM32 SDK?

我刚刚下载了 Embarcadero Delphi 2010(试用版)。tasm32 和相关的东西(ilink32、implib、impdef 等)仍然可用。他们仍然缺少头文件和导入库,但幸运的是可以通过 win2inc、implib 等解决。

最终结果可以称为 TASM32 SDK(与 MASM32 SDK 类似)。

考虑到 Delphi 是一种商业产品,我计划将此 SDK 仅用于个人用途(当然也不是商业用途)。

这是否合法?

0 投票
2 回答
7420 浏览

assembly - A2004 MASM32 问题

我的 MASM32 汇编器有问题

以下代码是我从 MASM32 教程中复制的 Hello World 示例:

在尝试组装时,MASM32 抛出 A2004 错误并带有以下注释:

任何人都可以帮助我吗?这段代码在 TASM 汇编器上运行得非常好,但现在我必须使用 MASM32,而且对于我之前证明可以与 TASM 一起使用的任何汇编代码,我都遇到了这个 A2004 错误。

如果这是相关的,我有一个运行 Win7 操作系统的 32 位 CPU。

谢谢。

0 投票
2 回答
956 浏览

c++ - MASM str 和 substr?

我目前正在用 asm 编写一个 irc 机器人,我已经在 C++ 中做过一次,所以我知道如何解决我遇到的大多数问题,但我需要一个 substr()[*] 函数,就像在 C++ 中看到的那样。我需要 substr 函数从 PING 请求中接收服务器名称,以便我可以使用相应的 PONG 响应进行响应

但是我不知道如何在MASM中实现它,我听说过一种叫做macroassemble的东西,似乎substr经常用在那些函数中

有谁知道我怎样才能让我的 substr 函数工作

[*] string substr ( size_t pos = 0, size_t n = npos )

这就是我在 C++ 中使用 substr() 函数的方式:

其中 data 是一个字符串,包含服务器发送给我的所有信息,SCHiMBot 是我用来与服务器对话的类 此代码是直接从我编写的机器人中复制出来的,所以它应该是完美的

0 投票
1 回答
241 浏览

assembly - Windows 程序集怀疑 - x86

我正在构建一个没有任何宏的 Windows 汇编程序。所以我下载了一个使用宏的程序,并将其转换为“纯”汇编代码。

但是我在这里面临一个问题。有看不懂的标签@@:,也有看不懂的跳转jne @F。这2个符号是什么?

同样对于PostQuitMessageAPI,我可以硬编码内存地址(在 WinXP 32 位 SP3 英语上),但DefWindowProc它可以编译,但在执行时会中断。有人知道为什么吗?

谢谢各位的支持。

PS.:我正在使用 masm32

0 投票
2 回答
2225 浏览

assembly - MASM 中有转义字符吗?

我知道用单引号括起来的字符串可以包含双引号,反之亦然,但是字符串可以同时包含两者吗?例如,字符串: